# tashfin-crud

> crud functions for TashfinJS

Latest version **0.1.3** (published 2020-12-20) · ISC license · 0 weekly downloads

## Install

```sh
npm install tashfin-crud
pnpm add tashfin-crud
yarn add tashfin-crud
bun add tashfin-crud
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.3 |
| Published | 2020-12-20 |
| First published | 2020-10-04 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 5.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Tildah |
| Maintainers | burawi |
| Keywords | Tashfin, CRUD, mongo, tatabot |

## Links

- npm: https://www.npmjs.com/package/tashfin-crud
- Repository: https://gitlab.com/tildah/tashfin-crud
- Homepage: https://gitlab.com/tildah/tashfin-crud#readme
- Issues: https://gitlab.com/tildah/tashfin-crud/issues
- npm.io page: https://npm.io/package/tashfin-crud

## Dependencies (2)

- [mongodb](https://npm.io/package/mongodb.md) ^3.6.2
- [tatabot](https://npm.io/package/tatabot.md) ^1.0.2

## Alternatives

- [angular-pipes](https://npm.io/package/angular-pipes.md) — 5.6K weekly downloads
- [@ng-web-apis/midi](https://npm.io/package/@ng-web-apis/midi.md) — 2.6K weekly downloads
- [happn-3](https://npm.io/package/happn-3.md) — 1.6K weekly downloads
- [@opensip-cli/lang-go](https://npm.io/package/@opensip-cli/lang-go.md) — 1.2K weekly downloads
- [mongoose-typescript](https://npm.io/package/mongoose-typescript.md) — 85 weekly downloads

## Recent versions

- 0.1.3 (latest) — 2020-12-20
- 0.1.2 — 2020-10-13
- 0.1.1 — 2020-10-04

## README

# 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 name
* `schema`: Schema to use in validation
* `db`: MongoDB instance
* `moduleOptions`: An object containing these options:
    * `listQuery`: The MongoDB aggregation to use for `GET_$root`.
    * `paranoid`: Boolean. If true `DELETE_root` won't completely delete item. Instead it will set its `trash` property to `true`.

## Return
Tashfin CRUD return 5 functions:
* `GET_$root`
* `GET_root`
* `POST_root`
* `PUT_root`
* `DELETE_root`

## Installation
```
npm i -save tashfin-crud
```

## Examples
### Raw use
The simplest example:

First start by instantiate db and pass it to module in your **main app file**:
```javascript
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**:
```javascript
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    /users`
* `GET    /users/123`
* `POST   /users`
* `PUT    /users/123`
* `DELETE /users/123`

### Custom Aggregation
If you want to set an aggregation for `GET_$root`, here is how you do:

**your module file**:
```javascript
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`:
```javascript
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};
}
```

---
_Source: https://npm.io/package/tashfin-crud · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
