1 import { SortMeta } from 'primeng/api'
2 import { from } from 'rxjs'
3 import { catchError, concatMap, toArray } from 'rxjs/operators'
4 import { HttpClient, HttpParams } from '@angular/common/http'
5 import { Injectable } from '@angular/core'
6 import { RestExtractor, RestPagination, RestService } from '@app/core'
7 import { arrayify } from '@shared/core-utils'
8 import { ResultList, UserRegistration, UserRegistrationUpdateState } from '@shared/models'
9 import { environment } from '../../../../environments/environment'
12 export class AdminRegistrationService {
13 private static BASE_REGISTRATION_URL = environment.apiUrl + '/api/v1/users/registrations'
16 private authHttp: HttpClient,
17 private restExtractor: RestExtractor,
18 private restService: RestService
21 listRegistrations (options: {
22 pagination: RestPagination
26 const { pagination, sort, search } = options
28 const url = AdminRegistrationService.BASE_REGISTRATION_URL
30 let params = new HttpParams()
31 params = this.restService.addRestGetParams(params, pagination, sort)
34 params = params.append('search', search)
37 return this.authHttp.get<ResultList<UserRegistration>>(url, { params })
39 catchError(res => this.restExtractor.handleError(res))
43 acceptRegistration (options: {
44 registration: UserRegistration
45 moderationResponse: string
46 preventEmailDelivery: boolean
48 const { registration, moderationResponse, preventEmailDelivery } = options
50 const url = AdminRegistrationService.BASE_REGISTRATION_URL + '/' + registration.id + '/accept'
51 const body: UserRegistrationUpdateState = { moderationResponse, preventEmailDelivery }
53 return this.authHttp.post(url, body)
54 .pipe(catchError(res => this.restExtractor.handleError(res)))
57 rejectRegistration (options: {
58 registration: UserRegistration
59 moderationResponse: string
60 preventEmailDelivery: boolean
62 const { registration, moderationResponse, preventEmailDelivery } = options
64 const url = AdminRegistrationService.BASE_REGISTRATION_URL + '/' + registration.id + '/reject'
65 const body: UserRegistrationUpdateState = { moderationResponse, preventEmailDelivery }
67 return this.authHttp.post(url, body)
68 .pipe(catchError(res => this.restExtractor.handleError(res)))
71 removeRegistrations (registrationsArg: UserRegistration | UserRegistration[]) {
72 const registrations = arrayify(registrationsArg)
74 return from(registrations)
76 concatMap(r => this.authHttp.delete(AdminRegistrationService.BASE_REGISTRATION_URL + '/' + r.id)),
78 catchError(err => this.restExtractor.handleError(err))