From d332935e85eeb4be870210ce9148cd24929a0bc4 Mon Sep 17 00:00:00 2001 From: ilham Date: Sat, 11 Dec 2021 11:24:28 +0700 Subject: [PATCH] add: commission setting --- src/configurable/commission.service.ts | 48 +++++++++++++++++++ src/configurable/configurable.controller.ts | 30 +++++++++++- src/configurable/configurable.module.ts | 8 ++-- .../entities/commission_setting.entity.ts | 16 +++++++ src/helper/enum-list.ts | 9 +++- src/users/entities/partner.entity.ts | 13 +++++ src/users/entities/userDetail.entity.ts | 18 ------- src/users/entities/user_detail.entity.ts | 22 +++++++++ 8 files changed, 140 insertions(+), 24 deletions(-) create mode 100644 src/configurable/commission.service.ts create mode 100644 src/configurable/entities/commission_setting.entity.ts create mode 100644 src/users/entities/partner.entity.ts delete mode 100644 src/users/entities/userDetail.entity.ts create mode 100644 src/users/entities/user_detail.entity.ts diff --git a/src/configurable/commission.service.ts b/src/configurable/commission.service.ts new file mode 100644 index 0000000..3765970 --- /dev/null +++ b/src/configurable/commission.service.ts @@ -0,0 +1,48 @@ +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { EntityNotFoundError, Repository } from 'typeorm'; +import { Roles } from './entities/roles.entity'; +import { InjectRepository } from '@nestjs/typeorm'; +import { UpdateUserDto } from '../users/dto/update-user.dto'; +import { CommissionSetting } from './entities/commission_setting.entity'; + +@Injectable() +export class CommissionService { + constructor( + @InjectRepository(CommissionSetting) + private commissionRepository: Repository, + ) {} + + findAllRoles(page) { + return this.commissionRepository.findAndCount({ + skip: page * 10, + take: 10, + order: { + version: 'DESC', + }, + }); + } + + async updateCommission(id: string, request) { + try { + await this.commissionRepository.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; + } + } + + const result = await this.commissionRepository.update(id, { + commission: request.value, + }); + + return this.commissionRepository.findOneOrFail(id); + } +} diff --git a/src/configurable/configurable.controller.ts b/src/configurable/configurable.controller.ts index f1ca79c..63d6006 100644 --- a/src/configurable/configurable.controller.ts +++ b/src/configurable/configurable.controller.ts @@ -11,13 +11,17 @@ import { Query, } from '@nestjs/common'; import { RoleService } from './roles.service'; +import { CommissionService } from './commission.service'; @Controller({ path: 'config', version: '1', }) export class ConfigurableController { - constructor(private readonly roleService: RoleService) {} + constructor( + private readonly roleService: RoleService, + private readonly commissionService: CommissionService, + ) {} @Get('/roles') async findAll(@Query('page') page: number) { @@ -31,6 +35,18 @@ export class ConfigurableController { }; } + @Get('/commission') + async findCommission(@Query('page') page: number) { + const [data, count] = await this.commissionService.findAllRoles(page); + + return { + data, + count, + statusCode: HttpStatus.OK, + message: 'success', + }; + } + @Get(':id') async findOne(@Param('id', ParseUUIDPipe) id: string) { return { @@ -39,4 +55,16 @@ export class ConfigurableController { message: 'success', }; } + + @Put('/commission/:id') + async updateCommission( + @Param('id', ParseUUIDPipe) id: string, + @Body() request, + ) { + return { + data: await this.commissionService.updateCommission(id, request), + statusCode: HttpStatus.OK, + message: 'success', + }; + } } diff --git a/src/configurable/configurable.module.ts b/src/configurable/configurable.module.ts index 5325245..58d0459 100644 --- a/src/configurable/configurable.module.ts +++ b/src/configurable/configurable.module.ts @@ -3,11 +3,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { Roles } from './entities/roles.entity'; import { ConfigurableController } from './configurable.controller'; import { RoleService } from './roles.service'; +import { CommissionService } from './commission.service'; +import { CommissionSetting } from './entities/commission_setting.entity'; @Module({ - imports: [TypeOrmModule.forFeature([Roles])], + imports: [TypeOrmModule.forFeature([Roles, CommissionSetting])], controllers: [ConfigurableController], - providers: [RoleService], - exports: [RoleService] + providers: [RoleService, CommissionService], + exports: [RoleService], }) export class ConfigurableModule {} diff --git a/src/configurable/entities/commission_setting.entity.ts b/src/configurable/entities/commission_setting.entity.ts new file mode 100644 index 0000000..8f0de02 --- /dev/null +++ b/src/configurable/entities/commission_setting.entity.ts @@ -0,0 +1,16 @@ +import { Entity, Column, OneToOne, JoinColumn } from 'typeorm'; +import { BaseModel } from '../../config/basemodel.entity'; +import { Roles } from './roles.entity'; + +@Entity() +export class CommissionSetting extends BaseModel { + @Column() + name: string; + + @Column() + commission: number; + + @OneToOne(() => Roles) + @JoinColumn() + role: Roles; +} diff --git a/src/helper/enum-list.ts b/src/helper/enum-list.ts index 303ff60..2ba4d88 100644 --- a/src/helper/enum-list.ts +++ b/src/helper/enum-list.ts @@ -24,10 +24,15 @@ export enum coaType { BANK, EXPENSE, ACCOUNT_RECEIVABLE, - ACCOUNT_PAYABLE + ACCOUNT_PAYABLE, } export enum balanceType { DEBIT, CREDIT, -} \ No newline at end of file +} + +export enum accountType { + PARTNER, + CUSTOMER, +} diff --git a/src/users/entities/partner.entity.ts b/src/users/entities/partner.entity.ts new file mode 100644 index 0000000..8ff03d9 --- /dev/null +++ b/src/users/entities/partner.entity.ts @@ -0,0 +1,13 @@ +import { Roles } from 'src/configurable/entities/roles.entity'; +import { Entity, Column, PrimaryGeneratedColumn, ManyToOne } from 'typeorm'; +import { BaseModel } from '../../config/basemodel.entity'; +import { hashPassword } from '../../helper/hash_password'; + +@Entity() +export class User extends BaseModel { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column() + name: string; +} diff --git a/src/users/entities/userDetail.entity.ts b/src/users/entities/userDetail.entity.ts deleted file mode 100644 index 579325b..0000000 --- a/src/users/entities/userDetail.entity.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { - Entity, - Column, - PrimaryGeneratedColumn, - UpdateDateColumn, - DeleteDateColumn, - VersionColumn, - CreateDateColumn, -} from 'typeorm'; - -@Entity() -export class User { - @PrimaryGeneratedColumn('uuid') - id: string; - - @Column() - firstName: string; -} diff --git a/src/users/entities/user_detail.entity.ts b/src/users/entities/user_detail.entity.ts new file mode 100644 index 0000000..7113eb9 --- /dev/null +++ b/src/users/entities/user_detail.entity.ts @@ -0,0 +1,22 @@ +import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; +import { accountType } from '../../helper/enum-list'; + +@Entity() +export class UserDetail { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column() + name: string; + + @Column() + first_name: string; + + @Column() + phone_number: string; + + @Column({ + nullable: true, + }) + type: accountType; +}