import { Injectable } from '@angular/core'; import { Applicant, ApplicantAdminUser, ApplicantExistsResponse, ApplicantForApi, ApplicantFromSearch, ApplicantResetPasswordPayload, CreateApplicant, CreateApplicantResponse, LinkSSOApplicantPayload, SearchApplicantsPayload, UpdateProfile } from '@core/typings/applicant.typing'; import { ClientAffiliateInfo, ResetPasswordApiResponse } from '@core/typings/client-user.typing'; import { ApplicantOrganization } from '@core/typings/organization.typing'; import { PaginationOptions } from '@yourcause/common'; import { HttpRestService } from '../services/http-rest.service'; import { PortalDeterminationService } from '../services/portal-determination.service'; @Injectable({ providedIn: 'root' }) export class ApplicantResources { constructor ( private determinationService: PortalDeterminationService, private httpRestService: HttpRestService ) {} getApplicant (): Promise { return this.httpRestService.get('api/portal/applicant'); } resetPassword ( payload: ApplicantResetPasswordPayload ): Promise { return this.httpRestService.post('api/portal/applicant/reset', payload); } linkHRData (linkHRDataPayload: LinkSSOApplicantPayload) { return this.httpRestService.post('api/manager/applications/LinkSsoApplicant', linkHRDataPayload); } createApplicant (applicant: ApplicantForApi): Promise { const endpoint = `api/${ this.determinationService.isManager ? 'manager' : 'portal' }/applications/applicant`; return this.httpRestService.post(endpoint, applicant); } searchApplicants (payload: SearchApplicantsPayload): Promise { return this.httpRestService.post(`api/manager/applications/applicantDetail`, payload); } searchApplicantsFromPortal (email = ''): Promise { const encodedEmail = encodeURIComponent(email); return this.httpRestService.get(`api/portal/applications/applicant?email=${encodedEmail}`); } addApplicant (data: CreateApplicant): Promise { return this.httpRestService.post('api/portal/applicant', data); } saveProfileImage (url: string, file: Blob, contentType: string) { return this.httpRestService.putS3PublicRead(url, file, contentType); } updateProfile (data: UpdateProfile): Promise { return this.httpRestService.post('api/portal/applicant/updateprofile', data); } getApplicantOrganizations (clientId: number): Promise { return this.httpRestService.get(`api/portal/applicant/organizations?clientId=${clientId}`); } confirmApplicantEmail (token: string) { return this.httpRestService.post('api/portal/applicant/confirmEmail', { token }); } requestPasswordEmail (email: string) { return this.httpRestService.post('api/portal/applicant/RequestPasswordChange', { email }); } deactivateAccount () { const endpoint = 'api/portal/applicant/DeactivateAccount'; return this.httpRestService.post(endpoint, { clearPersonalData: true }); } doesApplicantExist ( email: string, grantProgramGuid: string ): Promise { const endpoint = 'api/portal/applicant/exists'; return this.httpRestService.post(endpoint, { email, grantProgramGuid }); } lookupEmployee (externalEmployeeId: string, applicationId: number) { const endpoint = 'api/manager/applications/findSsoApplicant'; return this.httpRestService.post(endpoint, { externalEmployeeId, applicationId }); } adminApplicantsPaginated ( paginationOptions: PaginationOptions, clientIds: number[] = [] ) { const endpoint = 'api/admin/applicant/paginated'; return this.httpRestService.post(endpoint, { paginationOptions, clientIds }); } confirmEmailAddress ( applicantId: number ) { const endpoint = `api/admin/applicant/confirmemailaddress`; return this.httpRestService.post(endpoint, { applicantId }); } async getEmailTextForApplicant ( email: string, purpose: string ) { const endpoint = `api/admin/applicant/generatetokenforapplicant`; const response = await this.httpRestService.post<{ token: string }>(endpoint, { email, purpose }); return response.token; } updateApplicant ( applicant: ApplicantAdminUser ) { const endpoint = `api/admin/applicant/edit`; return this.httpRestService.post(endpoint, applicant); } getClientAffiliateInfo (): Promise { const endpoint = '/api/portal/applicant/AffiliateInfo'; return this.httpRestService.get(endpoint); } }