import { Body, Controller, Get, Query, Put, Delete, Post, BadRequestException } from '@nestjs/common'; import { ApiOperation, ApiTags } from '@nestjs/swagger'; import { Perm, definePermission } from '../auth/decorators/permission.decorator'; import { ApiSecurityAuth } from '~/common/decorators/swagger.decorator'; import { ProductService } from './product.service'; import { ApiResult } from '~/common/decorators/api-result.decorator'; import { ProductEntity } from './product.entity'; import { ProductDto, ProductQueryDto, ProductUpdateDto } from './product.dto'; import { IdParam } from '~/common/decorators/id-param.decorator'; import { Domain, SkDomain } from '~/common/decorators/domain.decorator'; export const permissions = definePermission('app:product', { LIST: 'list', CREATE: 'create', READ: 'read', UPDATE: 'update', DELETE: 'delete' } as const); @ApiTags('Product - 产品') @ApiSecurityAuth() @Controller('product') export class ProductController { constructor(private productService: ProductService) {} @Get() @ApiOperation({ summary: '获取产品列表' }) @ApiResult({ type: [ProductEntity], isPage: true }) @Perm(permissions.LIST) async list(@Domain() domain: SkDomain, @Query() dto: ProductQueryDto) { return this.productService.findAll({ ...dto, domain }); } @Get(':id') @ApiOperation({ summary: '获取产品信息' }) @ApiResult({ type: ProductDto }) @Perm(permissions.READ) async info(@IdParam() id: number) { return this.productService.info(id); } @Post() @ApiOperation({ summary: '新增产品' }) @Perm(permissions.CREATE) async create(@Domain() domain: SkDomain, @Body() dto: ProductDto): Promise { await this.productService.create({ ...dto, domain }); } @Put(':id') @ApiOperation({ summary: '更新产品' }) @Perm(permissions.UPDATE) async update(@IdParam() id: number, @Body() dto: ProductUpdateDto): Promise { await this.productService.update(id, dto); } @Delete(':id') @ApiOperation({ summary: '删除产品' }) @Perm(permissions.DELETE) async delete(@IdParam() id: number): Promise { await this.productService.delete(id); } @Put('unlink-attachments/:id') @ApiOperation({ summary: '附件解除关联' }) @Perm(permissions.UPDATE) async unlinkAttachments( @IdParam() id: number, @Body() { fileIds }: ProductUpdateDto ): Promise { await this.productService.unlinkAttachments(id, fileIds); } }