@gnx-utilities/decorators
TypeScript icon, indicating that this package has built-in type declarations

0.1.89 • Public • Published

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

📝 Documentation

Documentation

🛠️ Tools

Typescript Sequelize Typegoose NodeJS MongoDB

Authors

ImRLopezAG

🔗 Links

portfolio linkedin twitter

Package Sidebar

Install

npm i @gnx-utilities/decorators

Weekly Downloads

1

Version

0.1.89

License

MIT

Unpacked Size

29.2 kB

Total Files

7

Last publish

Collaborators

  • imrlopez.ag