Decorators
The decorators API contain the Generics repository of our ODM/ORM based on our models API gnx-utilities/models it has many methods which will help you to implement your applications quickly as our packages gnx-utilities/service, gnx-utilities/decorators is an abstraction of the gnx-utilities/service package.
✏️ Methods
| Method | Params | Return |
|---|---|---|
| model | - | Model |
| getAll | - | Promise<T[]> |
| getAllPaginated | { page, limit } | Promise<Pagination<T>> |
| getAllDeleted | - | Promise<T[]> |
| getAllWithDeleted | - | Promise<T[]> |
| getById | { id } | Promise<T> |
| create | { entity } | Promise<T> |
| bulkCreate | { entities } | Promise<T[]> |
| update | { entity, id } | Promise<T> |
| hardDelete | { id } | Promise<void> |
| softDelete | { id } | Promise<boolean> |
| restore | { id } | Promise<boolean> |
| bulkDelete | - | Promise<void> |
| getSchema | { exclude } | Schema[] |
📝 Declaration
This is an example of how to declare a service with the SequelizeService class and the SequelizeBaseEntity class from gnx-utilities/models library.
import { SequelizeBaseEntity } from '@gnx-utilities/models'import { DataTypes, Sequelize } from 'sequelize'import { sequelizeRepository, getRepository } from '@gnx-utilities/decorators'import type { UUID } from 'node:crypto'
const sequelize = new Sequelize({ dialect: 'sqlite', storage: './db/test.sqlite'})
class User extends SequelizeBaseEntity { declare id: UUID declare firstName: string declare lastName: string declare email: string}
User.init( { id: { type: DataTypes.UUID, primaryKey: true, defaultValue: DataTypes.UUIDV4 }, firstName: { type: DataTypes.STRING }, lastName: { type: DataTypes.STRING }, email: { type: DataTypes.STRING }, isDeleted: { type: DataTypes.BOOLEAN, defaultValue: false } }, { sequelize, modelName: 'person' })
@sequelizeRepository({ model: SequelizeUser })class UserService { greeting(): string { return 'Hello, world!' }}
const userService = getRepository<User>({ repository: UserService })import { TypegooseBaseEntity } from '@gnx-utilities/models'import { getModelForClass, prop } from '@typegoose/typegoose'import { typegooseRepository, getRepository } from '@gnx-utilities/decorators'
const uri = 'mongodb://localhost:27017/?readPreference=primary&ssl=false&directConnection=true'
const connection = async (): Promise<void> => { await connect(uri, { dbName: 'test' })}
class User extends TypegooseBaseEntity { @prop({ type: String }) declare firstName: string
@prop({ type: String }) declare lastName: string
@prop({ type: String }) declare email: string}
@typegooseRepository({ model: UserModel })class UserService { greeting(): string { return 'Hello, world!' }}
const userService = getRepository<User>({ repository: UserService })getAll
Get all documents from a collection
const users = await userService.getAll();
console.log(users); // [ { firstName: 'John', lastName: 'Doe' } ]getAllPaginated
Get all documents from a collection with pagination
const users = await userService.getAllPaginated({ page: 1, limit: 10 });
console.log(users); // { docs: [ { firstName: 'John', lastName: 'Doe' } ], totalDocs: 1, limit: 10, totalPages: 1, page: 1, pagingCounter: 1, hasPrevPage: false, hasNextPage: false, prevPage: null, nextPage: null }getAllDeleted
Get all deleted documents from a collection
const users = await userService.getAllDeleted();
console.log(users); // [ { firstName: 'John', lastName: 'Doe' } ]getAllWithDeleted
Get all documents from a collection with deleted documents
const users = await userService.getAllWithDeleted();
console.log(users); // [ { firstName: 'John', lastName: 'Doe' } ]getById
Get a document by id
const user = await userService.getById({ id: 1 });
console.log(user); // { firstName: 'John', lastName: 'Doe' }create
Create a document
const user = await userService.create({ entity: { firstName: 'John', lastName: 'Doe' },});
console.log(user.firstName); // JohnbulkCreate
Create many documents
const entity = { firstName: 'John', lastName: 'Doe' }const created = await userService.bulkCreate({ entities: Array(10).fill(entity),});
console.log(created); // [ { firstName: 'John', lastName: 'Doe' } ]update
Update a document
const user = await userService.update({ id: 1, entity: { firstName: 'Jane', lastName: 'Doe' },});
console.log(user.firstName); // JanehardDelete
Hard delete a document
await userService.hardDelete({ id: 1 });on the database the document will be deleted
softDelete
Soft delete a document
await userService.softDelete({ id: 1 });on the database the document will be updated with the isDeleted field
| id | firstName | lastName | createdAt | updatedAt | isDeleted |
|---|---|---|---|---|---|
| 1 | John | Doe | 2021-01-01 00:00:00 | 2021-01-01 00:00:00 | 1 or true |
restore
Restore a document
await userService.restore({ id: 1 });on the database the document will be updated with the isDeleted field
| id | firstName | lastName | createdAt | updatedAt | isDeleted |
|---|---|---|---|---|---|
| 1 | John | Doe | 2021-01-01 00:00:00 | 2021-01-01 00:00:00 | 0 or false |
bulkDelete
Delete all documents from a collection
await userService.bulkDelete();| id | firstName | lastName | createdAt | updatedAt | isDeleted |
|---|
getSchema
Get the properties that are mandatory for the model
const schema = userService.getSchema();
console.log(schema); // [ { name: 'firstName', type: 'string' }, { name: 'lastName', type: 'string' } ]
const schema = userService.getSchema({ exclude: ['firstName'] });
console.log(schema); // [ { name: 'lastName', type: 'string' } ]