ekyc

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

ratelimit.ts (952B)


      1 import { EntityLocked } from "../../core/application/repository_error.ts";
      2 import {
      3   mapFromRateLimit,
      4   mapToRateLimit,
      5   RateLimitDto,
      6 } from "./mapper/ratelimit.ts";
      7 
      8 import { RateLimitRepository } from "#core/application/oauth2/ratelimit_repository.ts";
      9 import { RateLimit } from "#core/domain/rate_limit.ts";
     10 
     11 export class MemoryRateLimitRepositoryAdapter implements RateLimitRepository {
     12   constructor(private readonly entities: Map<string, RateLimitDto>) {
     13   }
     14 
     15   findOrCreate(key: string): RateLimit {
     16     const entity = this.entities.get(key);
     17     if (entity !== undefined) {
     18       return mapToRateLimit(entity);
     19     }
     20     return new RateLimit(key);
     21   }
     22 
     23   store(entity: RateLimit): void {
     24     const dto = mapFromRateLimit(entity);
     25     const latest = this.entities.get(dto.key)?.version ?? 0;
     26     if (latest > dto.version) {
     27       throw new EntityLocked();
     28     }
     29     entity.version = ++dto.version;
     30     this.entities.set(dto.key, dto);
     31   }
     32 }