feat: setup argument function module report

pull/8/head
Firman Ramdhani 2024-07-03 11:52:12 +07:00
parent 35b3cfac8c
commit c0f8d5ad9d
15 changed files with 299 additions and 22 deletions

View File

@ -1,7 +1,18 @@
import { Controller, Delete, Get, Post, Put } from '@nestjs/common'; import {
Body,
Controller,
Delete,
Get,
Param,
Post,
Put,
Query,
} from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { Public } from 'src/core/guards'; import { Public } from 'src/core/guards';
import { MODULE_NAME } from 'src/core/strings/constants/module.constants'; import { MODULE_NAME } from 'src/core/strings/constants/module.constants';
import { GetReportBookmarkDto } from '../shared/dto/report-bookmark.get.dto';
import { CreateReportBookmarkDto } from '../shared/dto/report-bookmark.create.dto';
@ApiTags(`${MODULE_NAME.REPORT_BOOKMARK.split('-').join(' ')}`) @ApiTags(`${MODULE_NAME.REPORT_BOOKMARK.split('-').join(' ')}`)
@Controller(`v1/${MODULE_NAME.REPORT_BOOKMARK}`) @Controller(`v1/${MODULE_NAME.REPORT_BOOKMARK}`)
@ -9,27 +20,27 @@ import { MODULE_NAME } from 'src/core/strings/constants/module.constants';
@ApiBearerAuth('JWT') @ApiBearerAuth('JWT')
export class ReportBookmarkController { export class ReportBookmarkController {
@Post() @Post()
async create() { async create(@Body() body: CreateReportBookmarkDto) {
return; return;
} }
@Get() @Get()
async getAll() { async getAll(@Query() query: GetReportBookmarkDto) {
return; return;
} }
@Put('applied') @Put('applied/:id')
async applied() { async applied(@Param('id') id: string) {
return; return;
} }
@Put('unapplied') @Put('unapplied/:id')
async unapplied() { async unapplied(@Param('id') id: string) {
return; return;
} }
@Delete(':id') @Delete(':id')
async delete() { async delete(@Param('id') id: string) {
return; return;
} }
} }

View File

@ -1,4 +1,5 @@
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { BaseReportService } from '../shared/services/base-report.service';
@Injectable() @Injectable()
export class ReportBookmarkService {} export class ReportBookmarkService extends BaseReportService {}

View File

@ -1,7 +1,22 @@
import { Controller, Delete, Get, Post, Put } from '@nestjs/common'; import {
Body,
Controller,
Delete,
Get,
Param,
Post,
Put,
Query,
} from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { Public } from 'src/core/guards'; import { Public } from 'src/core/guards';
import { MODULE_NAME } from 'src/core/strings/constants/module.constants'; import { MODULE_NAME } from 'src/core/strings/constants/module.constants';
import { CreateReportExportDto } from '../shared/dto/report-export.create.dto';
import {
GetReportExportDto,
GetReportExportFileNameDto,
GetReportExportProcessingDto,
} from '../shared/dto/report-export.get.dto';
@ApiTags(`${MODULE_NAME.REPORT_EXPORT.split('-').join(' ')}`) @ApiTags(`${MODULE_NAME.REPORT_EXPORT.split('-').join(' ')}`)
@Controller(`v1/${MODULE_NAME.REPORT_EXPORT}`) @Controller(`v1/${MODULE_NAME.REPORT_EXPORT}`)
@ -9,27 +24,27 @@ import { MODULE_NAME } from 'src/core/strings/constants/module.constants';
@ApiBearerAuth('JWT') @ApiBearerAuth('JWT')
export class ReportExportController { export class ReportExportController {
@Post() @Post()
async create() { async create(@Body() body: CreateReportExportDto) {
return; return;
} }
@Get() @Get()
async getAll() { async getAll(@Query() query: GetReportExportDto) {
return; return;
} }
@Delete(':id') @Delete(':id')
async delete() { async delete(@Param('id') id: string) {
return; return;
} }
@Get('processing') @Get('processing')
async getAllProcessing() { async getAllProcessing(@Query() query: GetReportExportProcessingDto) {
return; return;
} }
@Get('filename-history') @Get('filename-history')
async getListHistoryFileName() { async getListHistoryFileName(@Query() query: GetReportExportFileNameDto) {
return; return;
} }
} }

View File

@ -1,4 +1,5 @@
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { BaseReportService } from '../shared/services/base-report.service';
@Injectable() @Injectable()
export class ReportExportService {} export class ReportExportService extends BaseReportService {}

View File

@ -1,20 +1,24 @@
import { Controller, Get, Post } from '@nestjs/common'; import { Body, Controller, Get, Post, Query } from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { Public } from 'src/core/guards'; import { Public } from 'src/core/guards';
import { MODULE_NAME } from 'src/core/strings/constants/module.constants'; import { MODULE_NAME } from 'src/core/strings/constants/module.constants';
import { ReportService } from './report.service';
import { GetReportConfigDto } from '../shared/dto/report-config.get.dto';
import { GetReportDataDto } from '../shared/dto/report-data.get.dto';
@ApiTags(`${MODULE_NAME.REPORT.split('-').join(' ')}`) @ApiTags(`${MODULE_NAME.REPORT.split('-').join(' ')}`)
@Controller(`v1/${MODULE_NAME.REPORT}`) @Controller(`v1/${MODULE_NAME.REPORT}`)
@Public(false) @Public(false)
@ApiBearerAuth('JWT') @ApiBearerAuth('JWT')
export class ReportController { export class ReportController {
constructor(private service: ReportService) {}
@Get('config') @Get('config')
async getReportConfig() { async getReportConfig(@Query() query: GetReportConfigDto) {
return; return await this.service.getReportConfig(query);
} }
@Post('data') @Post('data')
async getReportData() { async getReportData(@Body() body: GetReportDataDto) {
return; return await this.service.getReportData(body);
} }
} }

View File

@ -1,4 +1,15 @@
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { BaseReportService } from '../shared/services/base-report.service';
import { GetReportConfigDto } from '../shared/dto/report-config.get.dto';
import { GetReportDataDto } from '../shared/dto/report-data.get.dto';
@Injectable() @Injectable()
export class ReportService {} export class ReportService extends BaseReportService {
async getReportConfig(query: GetReportConfigDto) {
return this.getUser();
}
async getReportData(body: GetReportDataDto) {
return this.getUser();
}
}

View File

@ -0,0 +1,33 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsBoolean, IsObject, IsString, ValidateIf } from 'class-validator';
export class CreateReportBookmarkDto {
@ApiProperty({ name: 'group_name', required: true })
@IsString()
group_name: string;
@ApiProperty({ name: 'unique_name', required: true })
@IsString()
unique_name: string;
@ApiProperty({ name: 'label', required: true })
@IsString()
label: string;
@ApiProperty({ name: 'applied', required: true })
@IsBoolean()
applied: boolean;
@ApiProperty({ name: 'type', required: true })
@IsBoolean()
type: 'table_config' | 'filter';
@ApiProperty({
name: 'configuration',
type: Object,
required: true,
})
@IsObject()
@ValidateIf((body) => body.configuration)
configuration: any;
}

View File

@ -0,0 +1,22 @@
import { ApiProperty } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
export class GetReportBookmarkDto {
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
group_names?: string;
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
unique_names?: string[];
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
types?: string[];
}

View File

@ -0,0 +1,16 @@
import { ApiProperty } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
export class GetReportConfigDto {
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
group_names?: string;
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
unique_names?: string[];
}

View File

@ -0,0 +1,22 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsObject, IsString, ValidateIf } from 'class-validator';
import { QueryModelEntity } from '../entities/query-model.entity';
export class GetReportDataDto {
@ApiProperty({ name: 'group_name', required: true })
@IsString()
group_name: string;
@ApiProperty({ name: 'unique_name', required: true })
@IsString()
unique_name: string;
@ApiProperty({
name: 'query_model',
type: Object,
required: true,
})
@IsObject()
@ValidateIf((body) => body.query_model)
query_model: QueryModelEntity;
}

View File

@ -0,0 +1,23 @@
import { ApiProperty } from '@nestjs/swagger';
import { GetReportDataDto } from './report-data.get.dto';
import { IsString, IsNumber, IsOptional, IsArray } from 'class-validator';
import { ColumnStateEntity } from '../entities/query-model.entity';
export class CreateReportExportDto extends GetReportDataDto {
@ApiProperty({ name: 'time_zone', required: true })
@IsString()
time_zone: string;
@ApiProperty({ name: 'file_name', required: true })
@IsString()
file_name?: string;
@ApiProperty({
name: 'column_state',
type: [Object],
required: true,
})
@IsOptional()
@IsArray()
column_state: ColumnStateEntity[];
}

View File

@ -0,0 +1,69 @@
import { ApiProperty } from '@nestjs/swagger';
import { Transform } from 'class-transformer';
import { IsNumber, ValidateIf } from 'class-validator';
export class GetReportExportDto {
@ApiProperty({ type: Number, required: false, default: 1 })
@Transform((body) => Number(body.value))
@ValidateIf((body) => body.page)
@IsNumber()
page = 1;
@ApiProperty({ type: Number, required: false, default: 10 })
@Transform((body) => Number(body.value))
@ValidateIf((body) => body.limit)
@IsNumber()
limit = 10;
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
group_names?: string;
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
unique_names?: string[];
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
statuses?: string;
}
export class GetReportExportProcessingDto {
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
group_names?: string;
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
unique_names?: string[];
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
statuses?: string;
}
export class GetReportExportFileNameDto {
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
group_names?: string;
@ApiProperty({ type: ['string'], required: false })
@Transform((body) => {
return Array.isArray(body.value) ? body.value : [body.value];
})
unique_names?: string[];
}

View File

@ -0,0 +1,32 @@
export interface QueryModelEntity {
startRow: number;
endRow: number;
rowGroupCols: RowGroupCol[];
valueCols: any[];
pivotCols: any[];
pivotMode: boolean;
groupKeys: any[];
filterModel: any;
sortModel: any[];
}
interface RowGroupCol {
id: string;
displayName: string;
field: string;
}
export interface ColumnStateEntity {
colId: string;
width: number;
hide: boolean;
pinned: any;
sort: any;
sortIndex: any;
aggFunc: any;
rowGroup: boolean;
rowGroupIndex: any;
pivot: boolean;
pivotIndex: any;
flex: number;
}

View File

@ -0,0 +1,17 @@
import { Inject, Injectable } from '@nestjs/common';
import { UserProvider } from 'src/core/sessions';
import { BLANK_USER } from 'src/core/strings/constants/base.constants';
@Injectable()
export class BaseReportService {
@Inject()
protected userProvider: UserProvider;
getUser() {
try {
return this.userProvider?.user;
} catch (error) {
return BLANK_USER;
}
}
}