From 288a6e5b69f73e84451fc01de5abf43cd5860c81 Mon Sep 17 00:00:00 2001 From: ilham Date: Thu, 2 Dec 2021 22:55:15 +0700 Subject: [PATCH] add: add modules entity --- src/config/basemodel.entity.ts | 36 +++++++++++++++ .../configurable.controller.spec.ts | 20 +++++++++ src/configurable/configurable.controller.ts | 42 ++++++++++++++++++ src/configurable/configurable.module.ts | 12 +++++ src/configurable/configurable.service.spec.ts | 18 ++++++++ src/configurable/configurable.service.ts | 34 ++++++++++++++ src/configurable/entities/roles.entity.ts | 8 ++++ src/ledger/entities/coa.entity.ts | 44 +++++++++++++++++++ src/product/entities/product.entity.ts | 33 ++++++++++++++ .../entities/productCategory.entity.ts | 27 ++++++++++++ .../entities/productHistoryPrice.entity.ts | 36 +++++++++++++++ .../entities/productSubCategory.entity.ts | 24 ++++++++++ src/users/entities/userDetail.entity.ts | 18 ++++++++ 13 files changed, 352 insertions(+) create mode 100644 src/config/basemodel.entity.ts create mode 100644 src/configurable/configurable.controller.spec.ts create mode 100644 src/configurable/configurable.controller.ts create mode 100644 src/configurable/configurable.module.ts create mode 100644 src/configurable/configurable.service.spec.ts create mode 100644 src/configurable/configurable.service.ts create mode 100644 src/configurable/entities/roles.entity.ts create mode 100644 src/ledger/entities/coa.entity.ts create mode 100644 src/product/entities/product.entity.ts create mode 100644 src/product/entities/productCategory.entity.ts create mode 100644 src/product/entities/productHistoryPrice.entity.ts create mode 100644 src/product/entities/productSubCategory.entity.ts create mode 100644 src/users/entities/userDetail.entity.ts diff --git a/src/config/basemodel.entity.ts b/src/config/basemodel.entity.ts new file mode 100644 index 0000000..2540372 --- /dev/null +++ b/src/config/basemodel.entity.ts @@ -0,0 +1,36 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + DeleteDateColumn, + VersionColumn, + CreateDateColumn, +} from 'typeorm'; + +@Entity() +export class BaseModel { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn({ + type: 'timestamp with time zone', + nullable: false, + }) + createdAt: Date; + + @UpdateDateColumn({ + type: 'timestamp with time zone', + nullable: false, + }) + updatedAt: Date; + + @DeleteDateColumn({ + type: 'timestamp with time zone', + nullable: true, + }) + deletedAt: Date; + + @VersionColumn() + version: number; +} diff --git a/src/configurable/configurable.controller.spec.ts b/src/configurable/configurable.controller.spec.ts new file mode 100644 index 0000000..579b37e --- /dev/null +++ b/src/configurable/configurable.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ConfigurableController } from './configurable.controller'; +import { ConfigurableService } from './configurable.service'; + +describe('ConfigurableController', () => { + let controller: ConfigurableController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [ConfigurableController], + providers: [ConfigurableService], + }).compile(); + + controller = module.get(ConfigurableController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/configurable/configurable.controller.ts b/src/configurable/configurable.controller.ts new file mode 100644 index 0000000..d1c99e6 --- /dev/null +++ b/src/configurable/configurable.controller.ts @@ -0,0 +1,42 @@ +import { + Controller, + Get, + Post, + Body, + Put, + Param, + Delete, + ParseUUIDPipe, + HttpStatus, +} from '@nestjs/common'; +import { ConfigurableService } from './configurable.service'; + +@Controller({ + path: 'config', + version: '1', +}) +export class ConfigurableController { + constructor(private readonly usersService: ConfigurableService) {} + + @Get() + async findAll() { + const [data, count] = await this.usersService.findAll(); + + return { + data, + count, + statusCode: HttpStatus.OK, + message: 'success', + }; + } + + @Get(':id') + async findOne(@Param('id', ParseUUIDPipe) id: string) { + return { + data: await this.usersService.findOne(id), + statusCode: HttpStatus.OK, + message: 'success', + }; + } + +} diff --git a/src/configurable/configurable.module.ts b/src/configurable/configurable.module.ts new file mode 100644 index 0000000..da4f11e --- /dev/null +++ b/src/configurable/configurable.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Roles } from './entities/roles.entity'; +import { ConfigurableController } from './configurable.controller'; +import { ConfigurableService } from './configurable.service'; + +@Module({ + imports: [TypeOrmModule.forFeature([Roles])], + controllers: [ConfigurableController], + providers: [ConfigurableService], +}) +export class ConfigurableModule {} diff --git a/src/configurable/configurable.service.spec.ts b/src/configurable/configurable.service.spec.ts new file mode 100644 index 0000000..be931a1 --- /dev/null +++ b/src/configurable/configurable.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ConfigurableService } from './configurable.service'; + +describe('ConfigurableService', () => { + let service: ConfigurableService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ConfigurableService], + }).compile(); + + service = module.get(ConfigurableService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/configurable/configurable.service.ts b/src/configurable/configurable.service.ts new file mode 100644 index 0000000..5236a1b --- /dev/null +++ b/src/configurable/configurable.service.ts @@ -0,0 +1,34 @@ +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { EntityNotFoundError, Repository } from 'typeorm'; +import { Roles } from './entities/roles.entity'; +import { InjectRepository } from '@nestjs/typeorm'; + +@Injectable() +export class ConfigurableService { + constructor( + @InjectRepository(Roles) + private rolesRepository: Repository, + ) {} + + findAll() { + return this.rolesRepository.findAndCount(); + } + + async findOne(id: string) { + try { + return await this.rolesRepository.findOneOrFail(id); + } catch (e) { + if (e instanceof EntityNotFoundError) { + throw new HttpException( + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Data not found', + }, + HttpStatus.NOT_FOUND, + ); + } else { + throw e; + } + } + } +} diff --git a/src/configurable/entities/roles.entity.ts b/src/configurable/entities/roles.entity.ts new file mode 100644 index 0000000..dabdf68 --- /dev/null +++ b/src/configurable/entities/roles.entity.ts @@ -0,0 +1,8 @@ +import { Entity, Column } from 'typeorm'; +import { BaseModel } from '../../config/basemodel.entity'; + +@Entity() +export class Roles extends BaseModel { + @Column() + name: string; +} diff --git a/src/ledger/entities/coa.entity.ts b/src/ledger/entities/coa.entity.ts new file mode 100644 index 0000000..a4dbaa0 --- /dev/null +++ b/src/ledger/entities/coa.entity.ts @@ -0,0 +1,44 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + DeleteDateColumn, + VersionColumn, + CreateDateColumn, ManyToOne, ManyToMany, JoinTable, +} from 'typeorm'; +import { Product } from '../../product/entities/product.entity'; +import { User } from '../../users/entities/user.entity'; +import { BaseModel } from '../../config/basemodel.entity'; + +enum type { + SYSTEM_BANk, + INCOME, +} + +enum balanceType { + DEBIT, + CREDIT, +} + +@Entity() +export class Roles extends BaseModel{ + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column() + name: string; + + @Column('text') + type: type; + + @Column('text') + balanceType: balanceType; + + @Column() + amount: number; + + @ManyToMany(() => User) + @JoinTable() + user: User[]; +} diff --git a/src/product/entities/product.entity.ts b/src/product/entities/product.entity.ts new file mode 100644 index 0000000..51d0279 --- /dev/null +++ b/src/product/entities/product.entity.ts @@ -0,0 +1,33 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + DeleteDateColumn, + VersionColumn, + CreateDateColumn, + OneToMany, +} from 'typeorm'; +import { ProductSubCategories } from './productSubCategory.entity'; +import { BaseModel } from '../../config/basemodel.entity'; + +@Entity() +export class Product extends BaseModel{ + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column() + name: string; + + @Column() + code: string; + + @Column() + status: string; + + @OneToMany( + () => ProductSubCategories, + (subCategories) => subCategories.category, + ) + subCategories: ProductSubCategories; +} diff --git a/src/product/entities/productCategory.entity.ts b/src/product/entities/productCategory.entity.ts new file mode 100644 index 0000000..65e385c --- /dev/null +++ b/src/product/entities/productCategory.entity.ts @@ -0,0 +1,27 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + DeleteDateColumn, + VersionColumn, + CreateDateColumn, + OneToMany, +} from 'typeorm'; +import { ProductSubCategories } from './productSubCategory.entity'; +import { BaseModel } from '../../config/basemodel.entity'; + +@Entity() +export class ProductCategories extends BaseModel { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column() + name: string; + + @OneToMany( + () => ProductSubCategories, + (subCategories) => subCategories.category, + ) + subCategories: ProductSubCategories; +} diff --git a/src/product/entities/productHistoryPrice.entity.ts b/src/product/entities/productHistoryPrice.entity.ts new file mode 100644 index 0000000..c744910 --- /dev/null +++ b/src/product/entities/productHistoryPrice.entity.ts @@ -0,0 +1,36 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + DeleteDateColumn, + VersionColumn, + CreateDateColumn, + OneToMany, + ManyToOne, +} from 'typeorm'; +import { Product } from './product.entity'; +import { BaseModel } from '../../config/basemodel.entity'; + +enum Type { + NORMAL, + PROMO, +} + +@Entity() +export class ProductHistoryPrice extends BaseModel { + @PrimaryGeneratedColumn('uuid') + id: string; + + @ManyToOne(() => Product, (product) => product.id) + productId: string; + + @Column({ type: 'date' }) + startDate: string; + + @Column({ type: 'date' }) + endDate: string; + + @Column('text') + type: Type; +} diff --git a/src/product/entities/productSubCategory.entity.ts b/src/product/entities/productSubCategory.entity.ts new file mode 100644 index 0000000..4221d1a --- /dev/null +++ b/src/product/entities/productSubCategory.entity.ts @@ -0,0 +1,24 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + DeleteDateColumn, + VersionColumn, + CreateDateColumn, + ManyToOne, +} from 'typeorm'; +import { ProductCategories } from './productCategory.entity'; +import { BaseModel } from '../../config/basemodel.entity'; + +@Entity() +export class ProductSubCategories extends BaseModel{ + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column() + name: string; + + @ManyToOne(() => ProductCategories, (categories) => categories.subCategories) + category: ProductCategories; +} diff --git a/src/users/entities/userDetail.entity.ts b/src/users/entities/userDetail.entity.ts new file mode 100644 index 0000000..579325b --- /dev/null +++ b/src/users/entities/userDetail.entity.ts @@ -0,0 +1,18 @@ +import { + Entity, + Column, + PrimaryGeneratedColumn, + UpdateDateColumn, + DeleteDateColumn, + VersionColumn, + CreateDateColumn, +} from 'typeorm'; + +@Entity() +export class User { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column() + firstName: string; +}