ekyc

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

approve.ts (1425B)


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