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

0.1.37 • Public • Published

📝 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 });
  }
}

📝 Documentation

Documentation

🛠️ Tools

Typescript Sequelize Typegoose NodeJS MongoDB

Authors

ImRLopezAG

🔗 Links

portfolio linkedin twitter

Package Sidebar

Install

npm i @gnx-utilities/services

Weekly Downloads

1

Version

0.1.37

License

MIT

Unpacked Size

46.7 kB

Total Files

7

Last publish

Collaborators

  • imrlopez.ag