localhost_oa_based/src/modules/product/product.controller.ts

81 lines
2.4 KiB
TypeScript

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<void> {
await this.productService.create({ ...dto, domain });
}
@Put(':id')
@ApiOperation({ summary: '更新产品' })
@Perm(permissions.UPDATE)
async update(@IdParam() id: number, @Body() dto: ProductUpdateDto): Promise<void> {
await this.productService.update(id, dto);
}
@Delete(':id')
@ApiOperation({ summary: '删除产品' })
@Perm(permissions.DELETE)
async delete(@IdParam() id: number): Promise<void> {
await this.productService.delete(id);
}
@Put('unlink-attachments/:id')
@ApiOperation({ summary: '附件解除关联' })
@Perm(permissions.UPDATE)
async unlinkAttachments(
@IdParam() id: number,
@Body() { fileIds }: ProductUpdateDto
): Promise<void> {
await this.productService.unlinkAttachments(id, fileIds);
}
}