返回 AiToEarn
video.controller.ts
根目录 / project / aitoearn-backend / apps / aitoearn-ai / src / core / ai / video / video.controller.ts
1 import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common'
2 import { ApiTags } from '@nestjs/swagger'
3 import { GetToken, Public, TokenInfo } from '@yikart/aitoearn-auth'
4 import { ApiDoc, ParseObjectIdPipe, UserType } from '@yikart/common'
5 import { ListVideoTasksQueryDto, VideoGenerationRequestDto } from './video.dto'
6 import { VideoService } from './video.service'
7 import {
8 ListVideoTasksResponseVo,
9 VideoGenerationModelParamsVo,
10 VideoGenerationResponseVo,
11 VideoTaskStatusResponseVo,
12 } from './video.vo'
13
14 @ApiTags('Me/Ai/Video')
15 @Controller('ai')
16 export class VideoController {
17 constructor(private readonly videoService: VideoService) {}
18
19 @ApiDoc({
20 summary: 'Get Video Generation Model Parameters',
21 response: [VideoGenerationModelParamsVo],
22 })
23 @Public()
24 @Get('/models/video/generation')
25 async getVideoGenerationModels(@GetToken() token?: TokenInfo): Promise<VideoGenerationModelParamsVo[]> {
26 const response = await this.videoService.getVideoGenerationModelParams({
27 userId: token?.id,
28 userType: UserType.User,
29 })
30 return response.map(item => VideoGenerationModelParamsVo.create(item))
31 }
32
33 @ApiDoc({
34 summary: 'Generate Video',
35 body: VideoGenerationRequestDto.schema,
36 response: VideoGenerationResponseVo,
37 })
38 @Post('/video/generations')
39 async videoGeneration(
40 @GetToken() token: TokenInfo,
41 @Body() body: VideoGenerationRequestDto,
42 ): Promise<VideoGenerationResponseVo> {
43 const response = await this.videoService.userVideoGeneration({
44 userId: token.id,
45 userType: UserType.User,
46 ...body,
47 })
48 return VideoGenerationResponseVo.create(response)
49 }
50
51 @ApiDoc({
52 summary: 'Get Video Task Status',
53 response: VideoTaskStatusResponseVo,
54 })
55 @Get('/video/generations/:taskId')
56 async getVideoTaskStatus(
57 @GetToken() token: TokenInfo,
58 @Param('taskId', ParseObjectIdPipe) taskId: string,
59 ): Promise<VideoTaskStatusResponseVo> {
60 const response = await this.videoService.getVideoTaskStatus({
61 userId: token.id,
62 userType: UserType.User,
63 taskId,
64 })
65 return VideoTaskStatusResponseVo.create(response)
66 }
67
68 @ApiDoc({
69 summary: 'List Video Tasks',
70 query: ListVideoTasksQueryDto.schema,
71 response: ListVideoTasksResponseVo,
72 })
73 @Get('/video/generations')
74 async listVideoTasks(
75 @GetToken() token: TokenInfo,
76 @Query() query: ListVideoTasksQueryDto,
77 ): Promise<ListVideoTasksResponseVo> {
78 const [list, total] = await this.videoService.listVideoTasks({
79 ...query,
80 userId: token.id,
81 userType: UserType.User,
82 })
83 return new ListVideoTasksResponseVo(list, total, query)
84 }
85 }
86
86 lines TYPESCRIPT