irrelon-schema-model
v0.0.6
Published
A library that extends the functionality of Irrelon Schema (npm i irrelon-schema) and adds the ability to instantiate, return and update models based on existing schemas.
Downloads
7
Readme
Irrelon Schema Model
A library that extends the functionality of Irrelon Schema (npm i irrelon-schema) and adds the ability to instantiate, return and update models based on existing schemas.
If you use "Schema" from this library it also extends the Schema class from irrelon-schema and adds the ability to create a new model constructor based on a schema e.g.
const {Schema} = require("irrelon-model-schema");
const UserSchema = new Schema({
"name": {
"type": String,
"required": true
},
"age": {
"type": Number,
"required": false
}
});
// The extended schema class from irrelon-model-schema supports
// setting a REST endpoint that should be used for CRUD manipulation
// of models
UserSchema.endPoint("/api/v1/user");
// The extended schema class also supports specifying an API object
// that exposes CRUD methods that implement the API interface described
// below in this document. The schema can use the API interface to call
// the REST endpoint via HTTP/s in order to apply CRUD operations.
UserSchema.api({
// C(RUD)
post: (url, data, options) => {
Promise.resolve({
err: {
msg: "",
token: "",
details: {}
},
data: {},
status: 200
});
},
// (C)R(UD)
get: () => {},
// (CR)U(D)
put: () => {},
patch: () => {},
// (CRU)D
delete: () => {}
});
// Create a model constructor
const UserModel = UserSchema.model();
// Now we can get a user by id through the model
const myUser = await UserModel.findById(1);
// myUser is now an instance of UserModel with the data from
// the API endpoint matching the ID: 1 - if there was an error
// then the myUser instance will not be populated and will
// be in an error state. You can check this by calling
// UserModel.error(myUser)
myUser.name = "My New Name";
// Now we've modified the name, let's save it back to the API
// internally this will call the API patch method
myUser.save().then((response) => {
// Check response and do whatever application logic you like
// response conforms to the successResponse or failureResponse
// schemas.
});
// If we want to overwrite (PUT) the model instead of partial
// updating (PATCH) we use the model method "overwrite()" instead:
myUser.overwrite().then((response) => {
// Check response and do whatever application logic you like
// response conforms to the successResponse or failureResponse
// schemas.
});