id_document.ts (1034B)
1 import { IDDocumentRepository } from "#core/application/id_document/id_document_repository.ts"; 2 import { EntityLocked } from "#core/application/repository_error.ts"; 3 import { IDDocument } from "#core/domain/id_document.ts"; 4 import { UUID } from "#core/domain/uuid.ts"; 5 import { 6 IDDocumentDto, 7 mapFromIDDocument, 8 mapToIDDocument, 9 } from "#infrastructure/memory/mapper/id_document.ts"; 10 11 export class MemoryIDDocumentRepositoryAdapter implements IDDocumentRepository { 12 constructor(private readonly entities: Map<string, IDDocumentDto>) { 13 } 14 15 findOrCreate(id: UUID): IDDocument { 16 const dto = this.entities.get(id.toString()); 17 if (dto !== undefined) { 18 return mapToIDDocument(dto); 19 } 20 return new IDDocument(id); 21 } 22 23 store(entity: IDDocument): void { 24 const dto = mapFromIDDocument(entity); 25 const latest = this.entities.get(dto.uuid)?.version ?? 0; 26 if (latest > dto.version) { 27 throw new EntityLocked(); 28 } 29 entity.version = ++dto.version; 30 this.entities.set(dto.uuid, dto); 31 } 32 }