@gnx-utilities/decorators
v0.1.89
Published
Generic services is a library that allows you to create services with a generic repository
Downloads
5
Maintainers
Readme
📝 Generics Decorators
Generic decorators is a extended library from @gnx-utilities/core that allows you to create services with a generic repository, this library is based on the Sequelizer library and also in Typegoose but based on typescript decorators.
📦 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/decorators @gnx-utilities/models
pnpm add @gnx-utilities/decorators @gnx-utilities/models
yarn add @gnx-utilities/decorators @gnx-utilities/models
bun add @gnx-utilities/decorators @gnx-utilities/models
📖 Usage
Sequelize
import { SequelizeBaseEntity } from '@gnx-utilities/models'
import { DataTypes, Sequelize } from 'sequelize'
import { sequelizeRepository, getRepository } from '@gnx-utilities/decorators'
export const sequelize = new Sequelize({
dialect: 'sqlite',
storage: ':memory:'
})
export class SequelizeUser extends SequelizeBaseEntity {
declare firstName: string
declare lastName: string
}
SequelizeUser.init(
{
firstName: { type: DataTypes.STRING },
lastName: { type: DataTypes.STRING }
},
{ sequelize, modelName: 'person' }
)
@sequelizeRepository({ model: SequelizeUser })
export class SequelizeUserService {
greeting (): string {
return 'Hello, world!'
}
}
const userService = getRepository<SequelizeUser, SequelizeUserService>({ repository: SequelizeUserService });
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 { getModelForClass, prop } from '@typegoose/typegoose'
import { TypegooseBaseEntity } from '@gnx-utilities/models'
import { typegooseRepository } from '../../src/decorators/typegoose.decorator.js'
export class TypegooseUser extends TypegooseBaseEntity {
@prop({ type: String })
declare firstName: string
@prop({ type: String })
declare lastName: string
}
export const UserModel = getModelForClass(TypegooseUser)
@typegooseRepository({ model: UserModel })
export class TypegooseUserService {
greeting (): string {
return 'Hello, world!'
}
}
const userService = getRepository<TypegooseUser, TypegooseUserService>({ repository: TypegooseUserService });
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.