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 }