# @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.

Latest version **0.0.11** (published 2019-08-19) · ISC license · 0 weekly downloads

## Install

```sh
npm install @irrelon/schema-model
pnpm add @irrelon/schema-model
yarn add @irrelon/schema-model
bun add @irrelon/schema-model
```

## 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.0.11 |
| Published | 2019-08-19 |
| First published | 2019-07-24 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 19.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | coolbloke1324 |

## Links

- npm: https://www.npmjs.com/package/@irrelon/schema-model
- npm.io page: https://npm.io/package/@irrelon/schema-model

## Dependencies (2)

- [@irrelon/schema](https://npm.io/package/@irrelon/schema.md) ^3.0.2
- [@irrelon/emitter](https://npm.io/package/@irrelon/emitter.md) ^3.0.0

## Recent versions

- 0.0.11 (latest) — 2019-08-19
- 0.0.10 — 2019-08-13
- 0.0.9 — 2019-08-06
- 0.0.8 — 2019-08-06
- 0.0.7 — 2019-07-24

## 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.

```js
const {Schema} = require("@irrelon/schema-model");
const UserSchema = new Schema({
	"name": {
		"type": String,
		"required": true
	},
	"age": {
		"type": Number,
		"required": false
	}
});

// The extended schema class from @irrelon/schema-model 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.
});
```

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