feat(SPG-321) REST API Read User Privileges

pull/2/head
ashar 2024-06-03 15:30:58 +07:00
parent af06f2d08e
commit e442ca717e
13 changed files with 214 additions and 22 deletions

View File

@ -7,7 +7,9 @@ export enum STATUS {
INACTIVE = 'inactive',
PENDING = 'pending',
REFUNDED = 'refunded',
REJECTED = 'rejected',
SETTLED = 'settled',
WAITING = 'waiting',
}
export enum ORDER_TYPE {

View File

@ -1,3 +1,4 @@
export enum MODULE_NAME {
USER_PRIVILEGE = 'user-privileges',
USER_PRIVILEGE_CONFIGURATION = 'user-privilege-configurations',
}

View File

@ -1,3 +1,5 @@
export enum TABLE_NAME {
USER = 'users',
USER_PRIVILEGE = 'user_privileges',
USER_PRIVILEGE_CONFIGURATION = 'user_privilege_configurations',
}

View File

@ -0,0 +1,29 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UserPrivilege1717385661972 implements MigrationInterface {
name = 'UserPrivilege1717385661972';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "user_privilege_configurations" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "module" character varying(125) NOT NULL, "module_label" character varying(125), "menu" character varying(125) NOT NULL, "menu_label" character varying(125), "sub_menu" character varying(125), "sub_menu_label" character varying(125), "view" boolean, "create" boolean, "edit" boolean, "delete" boolean, "cancel" boolean, "confirm" boolean, "index" integer DEFAULT '0', "user_privilege_id" uuid, CONSTRAINT "PK_8ed47d7806c97dbf77969acc075" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE TYPE "public"."user_privileges_status_enum" AS ENUM('active', 'cancel', 'confirmed', 'draft', 'expired', 'inactive', 'pending', 'refunded', 'rejected', 'settled', 'waiting')`,
);
await queryRunner.query(
`CREATE TABLE "user_privileges" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "creator_id" character varying(36), "creator_name" character varying(125), "editor_id" character varying(36), "editor_name" character varying(125), "created_at" bigint NOT NULL, "updated_at" bigint NOT NULL, "status" "public"."user_privileges_status_enum" NOT NULL DEFAULT 'draft', "name" character varying(125) NOT NULL, CONSTRAINT "PK_4429e115dd3db86b6cf1f044ea5" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`ALTER TABLE "user_privilege_configurations" ADD CONSTRAINT "FK_ef45354482245798d95f78e450a" FOREIGN KEY ("user_privilege_id") REFERENCES "user_privileges"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "user_privilege_configurations" DROP CONSTRAINT "FK_ef45354482245798d95f78e450a"`,
);
await queryRunner.query(`DROP TABLE "user_privileges"`);
await queryRunner.query(`DROP TYPE "public"."user_privileges_status_enum"`);
await queryRunner.query(`DROP TABLE "user_privilege_configurations"`);
}
}

View File

@ -1,19 +1,17 @@
import { Injectable } from "@nestjs/common";
import { UserPrivilegeEntity } from "../../domain/entities/user-privilege.entity";
import { InjectRepository } from "@nestjs/typeorm";
import { UserPrivilegeModel } from "../model/user-privilege.model";
import { CONNECTION_NAME } from "src/core/strings/constants/base.constants";
import { Repository } from "typeorm";
import { BaseReadService } from "src/core/modules/data/service/base-read.service";
import { Injectable } from '@nestjs/common';
import { UserPrivilegeEntity } from '../../domain/entities/user-privilege.entity';
import { InjectRepository } from '@nestjs/typeorm';
import { UserPrivilegeModel } from '../models/user-privilege.model';
import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants';
import { Repository } from 'typeorm';
import { BaseReadService } from 'src/core/modules/data/service/base-read.service';
@Injectable()
export class UserPrivilegeReadService extends BaseReadService<UserPrivilegeEntity> {
constructor(
@InjectRepository(UserPrivilegeModel, CONNECTION_NAME.DEFAULT)
private repo: Repository<UserPrivilegeModel>,
) {
constructor(
@InjectRepository(UserPrivilegeModel, CONNECTION_NAME.DEFAULT)
private repo: Repository<UserPrivilegeModel>,
) {
super(repo);
}
}
}
}

View File

@ -0,0 +1,6 @@
import { BaseFilterEntity } from 'src/core/modules/domain/entities/base-filter.entity';
export interface FilterUserPrivilegeConfigurationEntity
extends BaseFilterEntity {
user_privilege_ids: string[];
}

View File

@ -1,5 +1,3 @@
import { BaseFilterEntity } from "src/core/modules/domain/entities/base-filter.entity";
import { BaseFilterEntity } from 'src/core/modules/domain/entities/base-filter.entity';
export interface FilterUserPrivilegeEntity extends BaseFilterEntity {
}
export interface FilterUserPrivilegeEntity extends BaseFilterEntity {}

View File

@ -0,0 +1,37 @@
import { Injectable } from '@nestjs/common';
import { BaseIndexManager } from 'src/core/modules/domain/usecase/managers/base-index.manager';
import { UserPrivilegeConfigurationEntity } from '../../../entities/user-privilege-configuration.entity';
import { Param } from 'src/core/helpers/query/specific-search.helper';
import { SelectQueryBuilder } from 'typeorm';
@Injectable()
export class IndexUserPrivilegeConfigurationManager extends BaseIndexManager<UserPrivilegeConfigurationEntity> {
async prepareData(): Promise<void> {
return;
}
async beforeProcess(): Promise<void> {
return;
}
async afterProcess(): Promise<void> {
return;
}
get specificFilter(): Param[] {
return;
}
setQueryFilter(
queryBuilder: SelectQueryBuilder<UserPrivilegeConfigurationEntity>,
): SelectQueryBuilder<UserPrivilegeConfigurationEntity> {
console.log(this.filterParam, 'param');
if (this.filterParam.user_privilege_ids) {
queryBuilder.andWhere(`user_privilege_id In (:...privilegeIds)`, {
privilegeIds: this.filterParam.user_privilege_ids,
});
}
return queryBuilder;
}
}

View File

@ -0,0 +1,34 @@
import { Injectable } from '@nestjs/common';
import { BaseDetailManager } from 'src/core/modules/domain/usecase/managers/base-detail.manager';
import { UserPrivilegeEntity } from '../../../entities/user-privilege.entity';
import { TABLE_NAME } from 'src/core/strings/constants/table.constants';
@Injectable()
export class DetailUserPrivilegeManager extends BaseDetailManager<UserPrivilegeEntity> {
get setFindProperties(): any {
return {
id: this.dataId,
};
}
get selectData(): string[] {
return ['id'];
}
get relationData(): string[] {
return [];
}
async prepareData(): Promise<void> {
this.tableName = TABLE_NAME.USER_PRIVILEGE;
return;
}
async beforeProcess(): Promise<void> {
return;
}
async afterProcess(): Promise<void> {
return;
}
}

View File

@ -0,0 +1,36 @@
import { Injectable } from '@nestjs/common';
import { BaseIndexManager } from 'src/core/modules/domain/usecase/managers/base-index.manager';
import { UserPrivilegeEntity } from '../../../entities/user-privilege.entity';
import { SelectQueryBuilder } from 'typeorm';
import { TABLE_NAME } from 'src/core/strings/constants/table.constants';
import { Param } from 'src/core/helpers/query/specific-search.helper';
@Injectable()
export class IndexUserPrivilegeManager extends BaseIndexManager<UserPrivilegeEntity> {
async prepareData(): Promise<void> {
this.tableName = TABLE_NAME.USER_PRIVILEGE;
return;
}
async beforeProcess(): Promise<void> {
return;
}
async afterProcess(): Promise<void> {
return;
}
get specificFilter(): Param[] {
return [];
}
setQueryFilter(
queryBuilder: SelectQueryBuilder<UserPrivilegeEntity>,
): SelectQueryBuilder<UserPrivilegeEntity> {
return queryBuilder;
}
setFilterSearch(): string[] {
return [];
}
}

View File

@ -0,0 +1,32 @@
import { Injectable } from '@nestjs/common';
import { IndexUserPrivilegeManager } from './managers/index-user-privilege.manager';
import { UserPrivilegeReadService } from '../../../data/service/user-privilege-read.service';
import { UserPrivilegeEntity } from '../../entities/user-privilege.entity';
import { PaginationResponse } from 'src/core/response/domain/ok-response.interface';
import { BaseReadOrchestrator } from 'src/core/modules/domain/usecase/orchestrators/base-read.orchestrator';
import { DetailUserPrivilegeManager } from './managers/detail-user-privilege.manager';
@Injectable()
export class UserPrivilegeReadOrchestrator extends BaseReadOrchestrator<UserPrivilegeEntity> {
constructor(
private indexManager: IndexUserPrivilegeManager,
private detailManager: DetailUserPrivilegeManager,
private serviceData: UserPrivilegeReadService,
) {
super();
}
async index(params): Promise<PaginationResponse<UserPrivilegeEntity>> {
this.indexManager.setFilterParam(params);
this.indexManager.setService(this.serviceData);
await this.indexManager.execute();
return this.indexManager.getResult();
}
async detail(dataId: string): Promise<UserPrivilegeEntity> {
this.detailManager.setData(dataId);
this.detailManager.setService(this.serviceData);
await this.detailManager.execute();
return this.detailManager.getResult();
}
}

View File

@ -0,0 +1,15 @@
import { BaseFilterDto } from 'src/core/modules/infrastructure/dto/base-filter.dto';
import { FilterUserPrivilegeConfigurationEntity } from '../../domain/entities/filter-user-privilege-configuration.entity';
import { ApiProperty } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
export class FilterUserPrivilegeConfigurationDto
extends BaseFilterDto
implements FilterUserPrivilegeConfigurationEntity
{
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
user_privilege_ids: string[];
}

View File

@ -1,4 +1,6 @@
import { BaseFilterDto } from "src/core/modules/infrastructure/dto/base-filter.dto";
import { FilterUserPrivilegeEntity } from "../../domain/entities/filter-user-privilege.entity";
import { BaseFilterDto } from 'src/core/modules/infrastructure/dto/base-filter.dto';
import { FilterUserPrivilegeEntity } from '../../domain/entities/filter-user-privilege.entity';
export class FilterUserPrivilegeDto extends BaseFilterDto implements FilterUserPrivilegeEntity {}
export class FilterUserPrivilegeDto
extends BaseFilterDto
implements FilterUserPrivilegeEntity {}