返回 AiToEarn
material-group.controller.ts
根目录 / project / aitoearn-backend / apps / aitoearn-server / src / core / content / material-group.controller.ts
1 /*
2 * @Author: nevin
3 * @Date: 2024-06-17 19:19:20
4 * @LastEditTime: 2024-12-23 12:45:22
5 * @LastEditors: nevin
6 * @Description: 草稿组
7 */
8 import {
9 Body,
10 Controller,
11 Delete,
12 Get,
13 Param,
14 Post,
15 Query,
16 } from '@nestjs/common'
17 import { ApiTags } from '@nestjs/swagger'
18 import { GetToken, TokenInfo } from '@yikart/aitoearn-auth'
19 import { ApiDoc, AppException, ParseObjectIdPipe, ResponseCode, TableDto } from '@yikart/common'
20 import { CreateMaterialGroupDto, MaterialGroupFilterDto, MaterialGroupFilterSchema, UpdateMaterialGroupDto } from './material-group.dto'
21
22 import { MaterialGroupService } from './material-group.service'
23 import { MaterialGroupVo } from './material-group.vo'
24
25 @ApiTags('Me/MaterialGroup')
26 @Controller('material/group')
27 export class MaterialGroupController {
28 constructor(
29 private readonly materialGroupService: MaterialGroupService,
30 ) { }
31
32 @ApiDoc({
33 summary: '创建草稿分组',
34 description: '使用提供的元数据创建新的草稿分组。',
35 body: CreateMaterialGroupDto.schema,
36 })
37 @Post()
38 async createGroup(
39 @GetToken() token: TokenInfo,
40 @Body() body: CreateMaterialGroupDto,
41 ) {
42 return this.materialGroupService.createGroup({
43 ...body,
44 userId: token.id,
45 })
46 }
47
48 @ApiDoc({
49 summary: '删除草稿分组',
50 description: '根据ID删除草稿分组。',
51 })
52 @Delete(':id')
53 async delGroup(
54 @GetToken() token: TokenInfo,
55 @Param('id', ParseObjectIdPipe) id: string,
56 ) {
57 const materialGroup = await this.materialGroupService.getGroupInfo(id)
58 if (!materialGroup || materialGroup.userId !== token.id) {
59 throw new AppException(ResponseCode.MaterialGroupNotFound)
60 }
61 if (materialGroup.isDefault) {
62 throw new AppException(ResponseCode.MaterialGroupDefaultNotAllowed)
63 }
64 return this.materialGroupService.delGroup(id)
65 }
66
67 @ApiDoc({
68 summary: '更新草稿分组信息',
69 description: '更新草稿分组的详情。',
70 body: UpdateMaterialGroupDto.schema,
71 })
72 @Post('info/:id')
73 async updateGroupInfo(
74 @GetToken() token: TokenInfo,
75 @Param('id', ParseObjectIdPipe) id: string,
76 @Body() body: UpdateMaterialGroupDto,
77 ) {
78 const materialGroup = await this.materialGroupService.getGroupInfo(id)
79 if (!materialGroup || materialGroup.userId !== token.id) {
80 throw new AppException(ResponseCode.MaterialGroupNotFound)
81 }
82 return this.materialGroupService.updateGroupInfo(id, body)
83 }
84
85 @ApiDoc({
86 summary: '获取草稿分组详情',
87 description: '根据ID获取草稿分组详情。',
88 })
89 @Get('info/:id')
90 async getGroupInfo(@Param('id', ParseObjectIdPipe) id: string) {
91 return this.materialGroupService.getGroupInfo(id)
92 }
93
94 @ApiDoc({
95 summary: '获取草稿分组列表',
96 description: '分页获取草稿分组列表。',
97 query: MaterialGroupFilterSchema,
98 response: [MaterialGroupVo],
99 })
100 @Get('list/:pageNo/:pageSize')
101 async getGroupList(
102 @GetToken() token: TokenInfo,
103 @Param() param: TableDto,
104 @Query() query: MaterialGroupFilterDto,
105 ) {
106 await this.materialGroupService.ensureDefaultGroup(token.id)
107
108 const { list, total } = await this.materialGroupService.getGroupList(param, {
109 userId: token.id,
110 ...query,
111 })
112
113 return {
114 list: list.map(item => MaterialGroupVo.create(item)),
115 total,
116 }
117 }
118 }
119
119 lines TYPESCRIPT