0.1.3 • Published 5 years ago
tashfin-crud v0.1.3
Tashfin CRUD
A library for TashfinJS that returns the main crud functions using MongoDB as DB and Tatabot as validator.
Arguments
Tashfin CRUD takes 4 arguments:
moduleName: String serving as collection nameschema: Schema to use in validationdb: MongoDB instancemoduleOptions: An object containing these options:listQuery: The MongoDB aggregation to use forGET_$root.paranoid: Boolean. If trueDELETE_rootwon't completely delete item. Instead it will set itstrashproperty totrue.
Return
Tashfin CRUD return 5 functions:
GET_$rootGET_rootPOST_rootPUT_rootDELETE_root
Installation
npm i -save tashfin-crudExamples
Raw use
The simplest example:
First start by instantiate db and pass it to module in your main app file:
const { MongoClient } = require("mongodb");
const { listen } = require("tashfin");
const users = require("./app_modules/users");
mongoClient.connect(<DB_URL>, async (err, db) => {
if (err) throw err;
console.log("Connected successfully to database");
const logRequest = true;
const modules = { users: users(db) };
listen({modules, logRequest});
});Then in your module file:
const tashfinCRUD = require("tashfin-crud");
// The schema is set in the file for example purpose, but it's better to put it in another
// file, import it.
const schema = {
"*name": "string",
email: "email",
age: { type: "integer", min: 13 },
role: { type: "enum", values: ["admin", "follower"] }
}
module.exports = db => tashfinCRUD("users", schema, db);Now, you should be able to use these routes:
GET /usersGET /users/123POST /usersPUT /users/123DELETE /users/123
Custom Aggregation
If you want to set an aggregation for GET_$root, here is how you do:
your module file:
const tashfinCRUD = require("tashfin-crud");
// The schema is set in the file for example purpose, but it's better to put it in another
// file, import it.
const schema = {
"*name": "string",
email: "email",
age: { type: "integer", min: 13 },
role: { type: "enum", values: ["admin", "follower"] }
}
const listQuery = [ //...My custom aggregation ];
module.exports = db => tashfinCRUD("users", schema, db, { listQuery });Custom Functions
Since Tashfin CRUD just returns functions, you can return custom functions instead of the returned ones from the library.
Here is an example of custom PUT_root:
const tashfinCRUD = require("tashfin-crud");
// The schema is set in the file for example purpose, but it's better to put it in another
// file, import it.
const schema = {
"*name": "string",
email: "email",
age: { type: "integer", min: 13 },
role: { type: "enum", values: ["admin", "follower"] }
}
const listQuery = [ //...My custom aggregation ];
module.exports = db => {
const tashfinCRUDFunctions = tashfinCRUD("users", schema, db, listQuery);
const DELETE_root = () => { statusCode: 403, content: "Here, we don't delete things" };
return { ...tashfinCRUDFunctions, DELETE_root};
}