ekyc

Electronic KYC process with uploading ID document using OAuth 2.1 (experimental)
Log | Files | Refs | README | LICENSE

decline.ts (1421B)


      1 import { EntityLocked } from "#core/application/repository_error.ts";
      2 import { AdminRepository } from "#core/application/id_document/admin_repository.ts";
      3 import { IDDocumentRepository } from "#core/application/id_document/id_document_repository.ts";
      4 import { IDDocumentOutOfState } from "#core/domain/id_document.ts";
      5 import { InvalidUUID, UUID } from "#core/domain/uuid.ts";
      6 
      7 export type IDDocumentDeclineRequest = {
      8   uuid: string;
      9   admin: string;
     10 };
     11 
     12 export type IDDocumentDeclineResponse = { status: "invalid" | "declined" };
     13 
     14 export class IDDocumentDeclineUseCase {
     15   constructor(
     16     private readonly adminRepo: AdminRepository,
     17     private readonly idDocumentRepo: IDDocumentRepository,
     18   ) {}
     19 
     20   async execute(
     21     request: IDDocumentDeclineRequest,
     22   ): Promise<IDDocumentDeclineResponse> {
     23     try {
     24       const adminUuid = new UUID(request.admin);
     25       const idDocumentUuid = new UUID(request.uuid);
     26       const admin = await this.adminRepo.find(adminUuid);
     27       const idDocument = await this.idDocumentRepo.findOrCreate(idDocumentUuid);
     28       idDocument.decline(admin);
     29       await this.idDocumentRepo.store(idDocument);
     30       return { status: "declined" };
     31     } catch (error) {
     32       if (
     33         error instanceof InvalidUUID ||
     34         error instanceof IDDocumentOutOfState ||
     35         error instanceof EntityLocked
     36       ) {
     37         return { status: "invalid" };
     38       }
     39       throw error;
     40     }
     41   }
     42 }