81 lines
2.4 KiB
TypeScript
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);
|
|
}
|
|
}
|