@gnx-utilities/services
v0.1.37
Published
Generic services is a library that allows you to create services for your models in a simple way, it is compatible with sequelize, mongoose and typegoose
Downloads
12
Maintainers
Readme
📝 Generics Services
Generic services is a library that allows you to create services with a generic repository, this library is based on the Sequelizer library and also in Typegoose.
📦 Installation
[!Note] You need to have one of the ORM or ODM to manage the data before. The supported ORMs/ODMs are Sequelize and Typegoose wich needs moongose.
npm install @gnx-utilities/core @gnx-utilities/models
pnpm add @gnx-utilities/core @gnx-utilities/models
yarn add @gnx-utilities/core @gnx-utilities/models
bun add @gnx-utilities/core @gnx-utilities/models
📖 Usage
Sequelize
import { SequelizeBaseEntity } from '@gnx-utilities/models'
import { DataTypes, Sequelize } from 'sequelize'
import { SequelizeService } from '@gnx-utilities/core'
export const sequelize = new Sequelize('test', 'postgres', 'root', {
host: 'localhost',
dialect: 'postgres'
})
export class User extends SequelizeBaseEntity {
declare firstName: string
declare lastName: string
}
User.init(
{
firstName: { type: DataTypes.STRING },
lastName: { type: DataTypes.STRING }
},
{ sequelize, modelName: 'person' }
)
export class UserService extends SequelizeService<User> {
constructor () {
super(User)
}
}
const userService = new UserService();
const user = await userService.create({ entity: { firstName: 'John', lastName: 'Doe' } });
console.log(user.firstName); // John
Typegoose
[!Warning] Typegoose needs some configuration to work properly, fallow the example below to configure it.
[!Important] On prop decorator you need to add the type of the property, if you don't do this, the library will not work properly.
import { TypegooseService } from '@gnx-utilities/core';
import { getModelForClass, prop } from '@typegoose/typegoose'
import { TypegooseBaseEntity } from '@gnx-utilities/models'
export class User extends TypegooseBaseEntity {
@prop({ type: String })
declare firstName: string
@prop({ type: String })
declare lastName: string
}
export const UserModel = getModelForClass(User)
export class UserService extends TypegooseService<User> {
constructor () {
super(UserModel)
}
}
const userService = new UserService();
const user = await userService.create({ entity: { firstName: 'John', lastName: 'Doe' } });
console.log(user.firstName); // John
[!Note] You Can fallow the test configuration to get more information about the configuration.
Override methods
import { SequelizeService } from '@gnx-utilities/core';
import { ServiceParams, ServiceParamsWithEntity, ServiceParamsWithId } from '@gnx-utilities/models';
export class UserService extends SequelizeService {
constructor() {
super(User);
}
override async create({ entity }: ServiceParamsWithEntity) {
// your code here
return super.create({ entity });
}
override async update({ id, entity }: ServiceParams) {
// your code here
return super.update({ id, entity });
}
override async delete({ id }: ServiceParamsWithId) {
// your code here
return super.delete({ id });
}
}
import { TypegooseService } from '@gnx-utilities/core';
import { ServiceParams, ServiceParamsWithEntity, ServiceParamsWithId } from '@gnx-utilities/models';
export class UserService extends TypegooseService {
constructor() {
super(UserModel);
}
override async create({ entity }: ServiceParamsWithEntity<User>) {
// your code here
return super.create({ entity });
}
override async update({ id, entity }: ServiceParams) {
// your code here
return super.update({ id, entity });
}
override async delete({ id }: ServiceParamsWithId) {
// your code here
return super.delete({ id });
}
}