]>
Commit | Line | Data |
---|---|---|
b033851f | 1 | import { pick } from '@shared/core-utils' |
0c1a77e9 C |
2 | import { |
3 | AbuseFilter, | |
4 | AbuseMessage, | |
5 | AbusePredefinedReasonsString, | |
6 | AbuseState, | |
7 | AbuseUpdate, | |
8 | AbuseVideoIs, | |
9 | AdminAbuse, | |
4c7e60bc | 10 | HttpStatusCode, |
0c1a77e9 C |
11 | ResultList, |
12 | UserAbuse | |
13 | } from '@shared/models' | |
0c1a77e9 | 14 | import { unwrapBody } from '../requests/requests' |
4c7e60bc | 15 | import { AbstractCommand, OverrideCommandOptions } from '../shared' |
0c1a77e9 C |
16 | |
17 | export class AbusesCommand extends AbstractCommand { | |
18 | ||
19 | report (options: OverrideCommandOptions & { | |
20 | reason: string | |
21 | ||
22 | accountId?: number | |
23 | videoId?: number | |
24 | commentId?: number | |
25 | ||
26 | predefinedReasons?: AbusePredefinedReasonsString[] | |
27 | ||
28 | startAt?: number | |
29 | endAt?: number | |
30 | }) { | |
31 | const path = '/api/v1/abuses' | |
32 | ||
33 | const video = options.videoId | |
34 | ? { | |
35 | id: options.videoId, | |
36 | startAt: options.startAt, | |
37 | endAt: options.endAt | |
38 | } | |
39 | : undefined | |
40 | ||
41 | const comment = options.commentId | |
42 | ? { id: options.commentId } | |
43 | : undefined | |
44 | ||
45 | const account = options.accountId | |
46 | ? { id: options.accountId } | |
47 | : undefined | |
48 | ||
49 | const body = { | |
50 | account, | |
51 | video, | |
52 | comment, | |
53 | ||
54 | reason: options.reason, | |
55 | predefinedReasons: options.predefinedReasons | |
56 | } | |
57 | ||
58 | return unwrapBody<{ abuse: { id: number } }>(this.postBodyRequest({ | |
59 | ...options, | |
60 | ||
61 | path, | |
62 | fields: body, | |
a1637fa1 | 63 | implicitToken: true, |
0c1a77e9 C |
64 | defaultExpectedStatus: HttpStatusCode.OK_200 |
65 | })) | |
66 | } | |
67 | ||
68 | getAdminList (options: OverrideCommandOptions & { | |
69 | start?: number | |
70 | count?: number | |
71 | sort?: string | |
72 | ||
73 | id?: number | |
74 | predefinedReason?: AbusePredefinedReasonsString | |
75 | search?: string | |
76 | filter?: AbuseFilter | |
77 | state?: AbuseState | |
78 | videoIs?: AbuseVideoIs | |
79 | searchReporter?: string | |
80 | searchReportee?: string | |
81 | searchVideo?: string | |
82 | searchVideoChannel?: string | |
83 | } = {}) { | |
b033851f | 84 | const toPick: (keyof typeof options)[] = [ |
0c1a77e9 C |
85 | 'count', |
86 | 'filter', | |
87 | 'id', | |
88 | 'predefinedReason', | |
89 | 'search', | |
90 | 'searchReportee', | |
91 | 'searchReporter', | |
92 | 'searchVideo', | |
93 | 'searchVideoChannel', | |
94 | 'sort', | |
95 | 'start', | |
96 | 'state', | |
97 | 'videoIs' | |
98 | ] | |
99 | ||
100 | const path = '/api/v1/abuses' | |
101 | ||
102 | const defaultQuery = { sort: 'createdAt' } | |
103 | const query = { ...defaultQuery, ...pick(options, toPick) } | |
104 | ||
105 | return this.getRequestBody<ResultList<AdminAbuse>>({ | |
106 | ...options, | |
107 | ||
108 | path, | |
109 | query, | |
a1637fa1 | 110 | implicitToken: true, |
0c1a77e9 C |
111 | defaultExpectedStatus: HttpStatusCode.OK_200 |
112 | }) | |
113 | } | |
114 | ||
115 | getUserList (options: OverrideCommandOptions & { | |
116 | start?: number | |
117 | count?: number | |
118 | sort?: string | |
119 | ||
120 | id?: number | |
121 | search?: string | |
122 | state?: AbuseState | |
123 | }) { | |
b033851f | 124 | const toPick: (keyof typeof options)[] = [ |
0c1a77e9 C |
125 | 'id', |
126 | 'search', | |
127 | 'state', | |
128 | 'start', | |
129 | 'count', | |
130 | 'sort' | |
131 | ] | |
132 | ||
133 | const path = '/api/v1/users/me/abuses' | |
134 | ||
135 | const defaultQuery = { sort: 'createdAt' } | |
136 | const query = { ...defaultQuery, ...pick(options, toPick) } | |
137 | ||
138 | return this.getRequestBody<ResultList<UserAbuse>>({ | |
139 | ...options, | |
140 | ||
141 | path, | |
142 | query, | |
a1637fa1 | 143 | implicitToken: true, |
0c1a77e9 C |
144 | defaultExpectedStatus: HttpStatusCode.OK_200 |
145 | }) | |
146 | } | |
147 | ||
148 | update (options: OverrideCommandOptions & { | |
149 | abuseId: number | |
150 | body: AbuseUpdate | |
151 | }) { | |
152 | const { abuseId, body } = options | |
153 | const path = '/api/v1/abuses/' + abuseId | |
154 | ||
155 | return this.putBodyRequest({ | |
156 | ...options, | |
157 | ||
158 | path, | |
159 | fields: body, | |
a1637fa1 | 160 | implicitToken: true, |
0c1a77e9 C |
161 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 |
162 | }) | |
163 | } | |
164 | ||
165 | delete (options: OverrideCommandOptions & { | |
166 | abuseId: number | |
167 | }) { | |
168 | const { abuseId } = options | |
169 | const path = '/api/v1/abuses/' + abuseId | |
170 | ||
a1637fa1 C |
171 | return this.deleteRequest({ |
172 | ...options, | |
173 | ||
174 | path, | |
175 | implicitToken: true, | |
176 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 | |
177 | }) | |
0c1a77e9 C |
178 | } |
179 | ||
180 | listMessages (options: OverrideCommandOptions & { | |
181 | abuseId: number | |
182 | }) { | |
183 | const { abuseId } = options | |
184 | const path = '/api/v1/abuses/' + abuseId + '/messages' | |
185 | ||
a1637fa1 C |
186 | return this.getRequestBody<ResultList<AbuseMessage>>({ |
187 | ...options, | |
188 | ||
189 | path, | |
190 | implicitToken: true, | |
191 | defaultExpectedStatus: HttpStatusCode.OK_200 | |
192 | }) | |
0c1a77e9 C |
193 | } |
194 | ||
195 | deleteMessage (options: OverrideCommandOptions & { | |
196 | abuseId: number | |
197 | messageId: number | |
198 | }) { | |
199 | const { abuseId, messageId } = options | |
200 | const path = '/api/v1/abuses/' + abuseId + '/messages/' + messageId | |
201 | ||
a1637fa1 C |
202 | return this.deleteRequest({ |
203 | ...options, | |
204 | ||
205 | path, | |
206 | implicitToken: true, | |
207 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 | |
208 | }) | |
0c1a77e9 C |
209 | } |
210 | ||
211 | addMessage (options: OverrideCommandOptions & { | |
212 | abuseId: number | |
213 | message: string | |
214 | }) { | |
215 | const { abuseId, message } = options | |
216 | const path = '/api/v1/abuses/' + abuseId + '/messages' | |
217 | ||
218 | return this.postBodyRequest({ | |
219 | ...options, | |
220 | ||
221 | path, | |
222 | fields: { message }, | |
a1637fa1 | 223 | implicitToken: true, |
0c1a77e9 C |
224 | defaultExpectedStatus: HttpStatusCode.OK_200 |
225 | }) | |
226 | } | |
227 | ||
228 | } |