# @gnx-utilities/decorators

> Generic services is a library that allows you to create services with a generic repository

Latest version **0.1.89** (published 2023-12-29) · MIT license · 0 weekly downloads

## Install

```sh
npm install @gnx-utilities/decorators
pnpm add @gnx-utilities/decorators
yarn add @gnx-utilities/decorators
bun add @gnx-utilities/decorators
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.89 |
| Published | 2023-12-29 |
| First published | 2023-12-08 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=18.0.0 |
| Dependencies | 5 |
| Unpacked size | 28.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | ImRLopezAg |
| Maintainers | imrlopez.ag |
| Keywords | typescript, nodejs, sequelize, mongoose, typegoose, generic |

## Links

- npm: https://www.npmjs.com/package/@gnx-utilities/decorators
- Repository: https://github.com/ImRLopezAG/gnx-core
- Homepage: https://gnx-udocs.vercel.app
- Issues: https://github.com/ImRLopezAG/gnx-core/issues
- npm.io page: https://npm.io/package/@gnx-utilities/decorators

## Dependencies (5)

- [mongoose](https://npm.io/package/mongoose.md) *
- [@swc/core](https://npm.io/package/@swc/core.md) ^1.3.100
- [sequelize](https://npm.io/package/sequelize.md) *
- [@typegoose/typegoose](https://npm.io/package/@typegoose/typegoose.md) *
- [@gnx-utilities/models](https://npm.io/package/@gnx-utilities/models.md) *

## Alternatives

- [angular-pipes](https://npm.io/package/angular-pipes.md) — 5.6K weekly downloads
- [@ng-web-apis/midi](https://npm.io/package/@ng-web-apis/midi.md) — 2.6K weekly downloads
- [happn-3](https://npm.io/package/happn-3.md) — 1.6K weekly downloads
- [@opensip-cli/lang-go](https://npm.io/package/@opensip-cli/lang-go.md) — 1.2K weekly downloads
- [mongoose-typescript](https://npm.io/package/mongoose-typescript.md) — 85 weekly downloads

## Recent versions

- 0.1.89 (latest) — 2023-12-29
- 0.1.88 — 2023-12-24
- 0.1.85 — 2023-12-23
- 0.1.84 — 2023-12-23
- 0.1.83 — 2023-12-23
- 0.1.82 — 2023-12-23
- 0.1.81 — 2023-12-22
- 0.1.6 — 2023-12-17
- 0.1.5 — 2023-12-16
- 0.1.4 — 2023-12-13
- 0.1.3 — 2023-12-12
- 0.1.2 — 2023-12-09
- 0.1.1 — 2023-12-08
- 0.1.0 — 2023-12-08
- 0.0.9 — 2023-12-08

## 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](https://sequelize.org/) library and also in [Typegoose](https://typegoose.github.io/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.

```bash
npm install @gnx-utilities/decorators @gnx-utilities/models
```
```bash
pnpm add @gnx-utilities/decorators @gnx-utilities/models
```
```bash
yarn add @gnx-utilities/decorators @gnx-utilities/models
```
```bash
bun add @gnx-utilities/decorators @gnx-utilities/models
```

## 📖 Usage

### Sequelize

```typescript
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.

```typescript
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](https://img.shields.io/badge/Documentation-000000?style=for-the-badge&logo=read-the-docs&logoColor=white)](https://gnx-udocs.vercel.app)

### 🛠️ Tools


[![Typescript](https://img.shields.io/badge/Typescript-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
[![Sequelize](https://img.shields.io/badge/Sequelize-52B0E7?logo=sequelize&logoColor=white)](https://sequelize.org/)
[![Typegoose](https://img.shields.io/badge/Typegoose-3178C6?logo=typescript&logoColor=white)](https://typegoose.github.io/typegoose/)
[![NodeJS](https://img.shields.io/badge/NodeJS-339933?logo=node.js&logoColor=white)](https://nodejs.org/es/)
[![MongoDB](https://img.shields.io/badge/MongoDB-47A248?logo=mongodb&logoColor=white)](https://www.mongodb.com/)



## Authors

[![ImRLopezAG](https://img.shields.io/badge/ImRLopezAG-000000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/ImRLopezAG)

## 🔗 Links

[![portfolio](https://img.shields.io/badge/my_portfolio-000?style=for-the-badge&logo=ko-fi&logoColor=white)](https://imrlopez.dev)
[![linkedin](https://img.shields.io/badge/linkedin-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/angel-gabriel-lopez/)
[![twitter](https://img.shields.io/badge/twitter-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white)](https://twitter.com/imr_lopez)

---
_Source: https://npm.io/package/@gnx-utilities/decorators · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
