返回 AiToEarn
works.controller.ts
根目录 / project / aitoearn-backend / apps / aitoearn-server / src / core / channels / works / works.controller.ts
1 import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common'
2 import { ApiTags } from '@nestjs/swagger'
3 import { GetToken, TokenInfo } from '@yikart/aitoearn-auth'
4 import { ApiDoc } from '@yikart/common'
5 import { AnalyticsService } from '../analytics/analytics.service'
6 import { ChannelWorkAnalyticsVo } from '../analytics/analytics.vo'
7 import { WorkService } from './work.service'
8 import {
9 WorkAccountQueryDto,
10 WorkAnalyticsQueryDto,
11 WorkLinkInfoQueryDto,
12 WorkListPlatformParamsDto,
13 WorkListQueryDto,
14 WorkOwnershipBodyDto,
15 WorkPlatformParamsDto,
16 } from './works.dto'
17 import { ChannelWorkDataVo, ChannelWorkListVo, ChannelWorkOwnershipVo } from './works.vo'
18
19 @ApiTags('Channels/Works')
20 @Controller({ path: '/channels/works', version: '2' })
21 export class WorksController {
22 constructor(
23 private readonly workService: WorkService,
24 private readonly analyticsService: AnalyticsService,
25 ) {}
26
27 @ApiDoc({
28 summary: '解析作品链接',
29 description: '根据链接获取作品信息',
30 query: WorkLinkInfoQueryDto.schema,
31 response: ChannelWorkDataVo,
32 })
33 @Get('/link-info')
34 async getLinkInfo(
35 @GetToken() token: TokenInfo,
36 @Query() query: WorkLinkInfoQueryDto,
37 ) {
38 return ChannelWorkDataVo.create(
39 await this.workService.getLinkInfo(
40 token.id,
41 query.platform,
42 query.link,
43 query.accountId,
44 ),
45 )
46 }
47
48 @ApiDoc({
49 summary: '获取账号作品列表',
50 description: '获取指定平台账号的作品列表',
51 query: WorkListQueryDto.schema,
52 response: ChannelWorkListVo,
53 })
54 @Get('/:platform')
55 async listWorks(
56 @GetToken() token: TokenInfo,
57 @Param() params: WorkListPlatformParamsDto,
58 @Query() query: WorkListQueryDto,
59 ) {
60 return ChannelWorkListVo.create(
61 await this.workService.listWorks(
62 token.id,
63 params.platform,
64 query.accountId,
65 query.pagination,
66 ),
67 )
68 }
69
70 @ApiDoc({
71 summary: '获取作品详情',
72 description: '获取指定作品的详细信息',
73 query: WorkAccountQueryDto.schema,
74 response: ChannelWorkDataVo,
75 })
76 @Get('/:platform/:platformWorkId')
77 async getDetail(
78 @GetToken() token: TokenInfo,
79 @Param() params: WorkPlatformParamsDto,
80 @Query() query: WorkAccountQueryDto,
81 ) {
82 return ChannelWorkDataVo.create(
83 await this.workService.getDetail(
84 token.id,
85 params.platform,
86 params.platformWorkId,
87 query.accountId,
88 ),
89 )
90 }
91
92 @ApiDoc({
93 summary: '获取作品数据',
94 description: '获取指定作品的分析数据',
95 query: WorkAnalyticsQueryDto.schema,
96 response: ChannelWorkAnalyticsVo,
97 })
98 @Get('/:platform/:platformWorkId/analytics')
99 async getAnalytics(
100 @GetToken() token: TokenInfo,
101 @Param() params: WorkPlatformParamsDto,
102 @Query() query: WorkAnalyticsQueryDto,
103 ) {
104 return ChannelWorkAnalyticsVo.create(
105 await this.analyticsService.fetchWorkAnalytics(
106 token.id,
107 params.platform,
108 params.platformWorkId,
109 query.accountId,
110 {
111 since: query.since,
112 until: query.until,
113 },
114 ),
115 )
116 }
117
118 @ApiDoc({
119 summary: '验证作品归属',
120 description: '验证作品是否属于指定账号',
121 body: WorkOwnershipBodyDto.schema,
122 response: ChannelWorkOwnershipVo,
123 })
124 @Post('/:platform/:platformWorkId/ownership/verify')
125 async verifyOwnership(
126 @GetToken() token: TokenInfo,
127 @Param() params: WorkPlatformParamsDto,
128 @Body() body: WorkOwnershipBodyDto,
129 ) {
130 return ChannelWorkOwnershipVo.create(
131 await this.workService.verifyOwnership(
132 token.id,
133 params.platform,
134 params.platformWorkId,
135 body.candidateAccountId,
136 ),
137 )
138 }
139 }
140
140 lines TYPESCRIPT