diff options
Diffstat (limited to 'client/src/app/shared/shared-moderation/abuse.service.ts')
-rw-r--r-- | client/src/app/shared/shared-moderation/abuse.service.ts | 93 |
1 files changed, 64 insertions, 29 deletions
diff --git a/client/src/app/shared/shared-moderation/abuse.service.ts b/client/src/app/shared/shared-moderation/abuse.service.ts index 652d8370f..c1aa62023 100644 --- a/client/src/app/shared/shared-moderation/abuse.service.ts +++ b/client/src/app/shared/shared-moderation/abuse.service.ts | |||
@@ -5,13 +5,24 @@ import { catchError, map } from 'rxjs/operators' | |||
5 | import { HttpClient, HttpParams } from '@angular/common/http' | 5 | import { HttpClient, HttpParams } from '@angular/common/http' |
6 | import { Injectable } from '@angular/core' | 6 | import { Injectable } from '@angular/core' |
7 | import { RestExtractor, RestPagination, RestService } from '@app/core' | 7 | import { RestExtractor, RestPagination, RestService } from '@app/core' |
8 | import { AdminAbuse, AbuseCreate, AbuseFilter, AbusePredefinedReasonsString, AbuseState, AbuseUpdate, ResultList, UserAbuse, AbuseMessage } from '@shared/models' | ||
9 | import { environment } from '../../../environments/environment' | ||
10 | import { I18n } from '@ngx-translate/i18n-polyfill' | 8 | import { I18n } from '@ngx-translate/i18n-polyfill' |
9 | import { | ||
10 | AbuseCreate, | ||
11 | AbuseFilter, | ||
12 | AbuseMessage, | ||
13 | AbusePredefinedReasonsString, | ||
14 | AbuseState, | ||
15 | AbuseUpdate, | ||
16 | AdminAbuse, | ||
17 | ResultList, | ||
18 | UserAbuse | ||
19 | } from '@shared/models' | ||
20 | import { environment } from '../../../environments/environment' | ||
11 | 21 | ||
12 | @Injectable() | 22 | @Injectable() |
13 | export class AbuseService { | 23 | export class AbuseService { |
14 | private static BASE_ABUSE_URL = environment.apiUrl + '/api/v1/abuses' | 24 | private static BASE_ABUSE_URL = environment.apiUrl + '/api/v1/abuses' |
25 | private static BASE_MY_ABUSE_URL = environment.apiUrl + '/api/v1/users/me/abuses' | ||
15 | 26 | ||
16 | constructor ( | 27 | constructor ( |
17 | private i18n: I18n, | 28 | private i18n: I18n, |
@@ -32,33 +43,7 @@ export class AbuseService { | |||
32 | params = this.restService.addRestGetParams(params, pagination, sort) | 43 | params = this.restService.addRestGetParams(params, pagination, sort) |
33 | 44 | ||
34 | if (search) { | 45 | if (search) { |
35 | const filters = this.restService.parseQueryStringFilter(search, { | 46 | params = this.buildParamsFromSearch(search, params) |
36 | id: { prefix: '#' }, | ||
37 | state: { | ||
38 | prefix: 'state:', | ||
39 | handler: v => { | ||
40 | if (v === 'accepted') return AbuseState.ACCEPTED | ||
41 | if (v === 'pending') return AbuseState.PENDING | ||
42 | if (v === 'rejected') return AbuseState.REJECTED | ||
43 | |||
44 | return undefined | ||
45 | } | ||
46 | }, | ||
47 | videoIs: { | ||
48 | prefix: 'videoIs:', | ||
49 | handler: v => { | ||
50 | if (v === 'deleted') return v | ||
51 | if (v === 'blacklisted') return v | ||
52 | |||
53 | return undefined | ||
54 | } | ||
55 | }, | ||
56 | searchReporter: { prefix: 'reporter:' }, | ||
57 | searchReportee: { prefix: 'reportee:' }, | ||
58 | predefinedReason: { prefix: 'tag:' } | ||
59 | }) | ||
60 | |||
61 | params = this.restService.addObjectParams(params, filters) | ||
62 | } | 47 | } |
63 | 48 | ||
64 | return this.authHttp.get<ResultList<AdminAbuse>>(url, { params }) | 49 | return this.authHttp.get<ResultList<AdminAbuse>>(url, { params }) |
@@ -67,6 +52,27 @@ export class AbuseService { | |||
67 | ) | 52 | ) |
68 | } | 53 | } |
69 | 54 | ||
55 | getUserAbuses (options: { | ||
56 | pagination: RestPagination, | ||
57 | sort: SortMeta, | ||
58 | search?: string | ||
59 | }): Observable<ResultList<UserAbuse>> { | ||
60 | const { pagination, sort, search } = options | ||
61 | const url = AbuseService.BASE_MY_ABUSE_URL | ||
62 | |||
63 | let params = new HttpParams() | ||
64 | params = this.restService.addRestGetParams(params, pagination, sort) | ||
65 | |||
66 | if (search) { | ||
67 | params = this.buildParamsFromSearch(search, params) | ||
68 | } | ||
69 | |||
70 | return this.authHttp.get<ResultList<UserAbuse>>(url, { params }) | ||
71 | .pipe( | ||
72 | catchError(res => this.restExtractor.handleError(res)) | ||
73 | ) | ||
74 | } | ||
75 | |||
70 | reportVideo (parameters: AbuseCreate) { | 76 | reportVideo (parameters: AbuseCreate) { |
71 | const url = AbuseService.BASE_ABUSE_URL | 77 | const url = AbuseService.BASE_ABUSE_URL |
72 | 78 | ||
@@ -180,4 +186,33 @@ export class AbuseService { | |||
180 | return reasons | 186 | return reasons |
181 | } | 187 | } |
182 | 188 | ||
189 | private buildParamsFromSearch (search: string, params: HttpParams) { | ||
190 | const filters = this.restService.parseQueryStringFilter(search, { | ||
191 | id: { prefix: '#' }, | ||
192 | state: { | ||
193 | prefix: 'state:', | ||
194 | handler: v => { | ||
195 | if (v === 'accepted') return AbuseState.ACCEPTED | ||
196 | if (v === 'pending') return AbuseState.PENDING | ||
197 | if (v === 'rejected') return AbuseState.REJECTED | ||
198 | |||
199 | return undefined | ||
200 | } | ||
201 | }, | ||
202 | videoIs: { | ||
203 | prefix: 'videoIs:', | ||
204 | handler: v => { | ||
205 | if (v === 'deleted') return v | ||
206 | if (v === 'blacklisted') return v | ||
207 | |||
208 | return undefined | ||
209 | } | ||
210 | }, | ||
211 | searchReporter: { prefix: 'reporter:' }, | ||
212 | searchReportee: { prefix: 'reportee:' }, | ||
213 | predefinedReason: { prefix: 'tag:' } | ||
214 | }) | ||
215 | |||
216 | return this.restService.addObjectParams(params, filters) | ||
217 | } | ||
183 | } | 218 | } |