Skip to content

Stradivario/gapi-sequelize

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@Gapi/Sequelize

@Gapi Sequelize module @StrongTyped

For questions/issues you can write ticket here
This module is intended to be used with GAPI

Installation and basic examples:

To install this Gapi module, run:
$ npm install @gapi/sequelize --save

Consuming gapi-sequelize

Import inside AppModule or CoreModule
import { Module } from '@rxdi/core';
import { SequelizeModule } from '@gapi/sequelize';

@Module({
    imports: [
        SequelizeModule.forRoot({
            dialect: 'postgres',
            host: process.env.DB_HOST || '',
            port: process.env.DB_PORT || 5432,
            username: process.env.DB_USERNAME || '',
            password: process.env.DB_PASSWORD || '',
            database: process.env.DB_NAME || 'your-database',
            storage: ':memory:',
            logging: false,
            modelPaths: [process.cwd() + '/src/models'],
            force: false
        })
    ]
})
export class CoreModule { }
Create folder root/src/models and put this testing User Typescript-Sequelize Model with Uppercase name example: "User.ts"
import {
    Table,
    Column,
    Model,
    CreatedAt,
    UpdatedAt,
    DeletedAt,
    PrimaryKey,
    AutoIncrement,
    HasMany,
    DataType,
    BelongsToMany
} from 'sequelize-typescript';

export interface UserSettings {
    sidebar: boolean;
}

@Table
export class User extends Model<User> {

    @PrimaryKey
    @AutoIncrement
    @Column
    id: number;

    @Column
    name: string;

    @Column({
        type: DataType.ENUM({ values: ['ADMIN', 'USER'] })
    })
    type: 'ADMIN' | 'USER';

    @Column({
        type: DataType.JSONB,
        allowNull: true
    })
    settings: UserSettings;


    @CreatedAt
    creationDate: Date;

    @UpdatedAt
    updatedOn: Date;

    @DeletedAt
    deletionDate: Date;

}
Final use this class inside your services the following way
import { Service } from "@rxdi/core";
import { UserType } from "../types/user.type";
import { User } from '../../../models/User';

@Service()
export class AnotherService {
    trimFirstLetter(username: string): string {
        return username.charAt(1);
    }
}

@Service()
export class UserService {
    constructor(
        private anotherService: AnotherService
    ) { }

    async findUser(id: number): Promise<User> {
        return await User.findOne({ where: { id: id } });
    }

    async addUser(user: User): Promise<User> {
        return await User.create(user);
    }

    async deleteUser(id: number) {
        return await User.destroy({ where: { id: id } });
    }

    async updateUser(user: User) {
        return await User.update(user, {
            where: {
                id: user.id
            }
        })
    }

}

Advanced getting sequelize instance to manage your sequelize connection

import { Service } from '@rxdi/core';
import { SequelizeService } from '@gapi/sequelize';

@Service()
export class SequelizePrivateService extends SequelizeService implements SequelizeService {
    sequelize: Sequelize;
    constructor() {
        super({
            dialect: 'postgres',
            host: process.env.DB_HOST || '',
            port: process.env.DB_PORT || '5432',
            username: process.env.DB_USERNAME || '',
            password: process.env.DB_PASSWORD || '',
            name: process.env.DB_NAME || 'your-database',
            storage: ':memory:',
            logging: false,
            modelPaths: [process.cwd() + '/src/models'],
            force: false
        })
    }
}

Next import SequelizePrivateService inside Core or AppModule

import { Module } from '@rxdi/core';
import { SequelizeModule } from '@gapi/sequelize';
import { SequelizePrivateService } from './services/sequelize/sequelize.service.ts';

@Module({
    services: [SequelizePrivateService]
})
export class CoreModule { }

TODO: Better documentation...

Enjoy ! :)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published