Files
gridpilot.gg/adapters/payments/persistence/inmemory/InMemoryPaymentRepository.ts
Marc Mintel 6df38a462a
Some checks failed
CI / lint-typecheck (pull_request) Failing after 4m50s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
integration tests
2026-01-23 11:44:59 +01:00

66 lines
2.3 KiB
TypeScript

/**
* In-Memory Implementation: InMemoryPaymentRepository
*/
import type { Payment, PaymentType } from '@core/payments/domain/entities/Payment';
import type { PaymentRepository } from '@core/payments/domain/repositories/PaymentRepository';
import type { Logger } from '@core/shared/domain/Logger';
export class InMemoryPaymentRepository implements PaymentRepository {
private payments: Map<string, Payment> = new Map();
constructor(private readonly logger: Logger) {}
async findById(id: string): Promise<Payment | null> {
this.logger.debug('[InMemoryPaymentRepository] findById', { id });
return this.payments.get(id) || null;
}
async findByLeagueId(leagueId: string): Promise<Payment[]> {
this.logger.debug('[InMemoryPaymentRepository] findByLeagueId', { leagueId });
return Array.from(this.payments.values()).filter(p => p.leagueId === leagueId);
}
async findByPayerId(payerId: string): Promise<Payment[]> {
this.logger.debug('[InMemoryPaymentRepository] findByPayerId', { payerId });
return Array.from(this.payments.values()).filter(p => p.payerId === payerId);
}
async findByType(type: PaymentType): Promise<Payment[]> {
this.logger.debug('[InMemoryPaymentRepository] findByType', { type });
return Array.from(this.payments.values()).filter(p => p.type === type);
}
async findByFilters(filters: { leagueId?: string; payerId?: string; type?: PaymentType }): Promise<Payment[]> {
this.logger.debug('[InMemoryPaymentRepository] findByFilters', { filters });
let results = Array.from(this.payments.values());
if (filters.leagueId) {
results = results.filter(p => p.leagueId === filters.leagueId);
}
if (filters.payerId) {
results = results.filter(p => p.payerId === filters.payerId);
}
if (filters.type) {
results = results.filter(p => p.type === filters.type);
}
return results;
}
async create(payment: Payment): Promise<Payment> {
this.logger.debug('[InMemoryPaymentRepository] create', { payment });
this.payments.set(payment.id, payment);
return payment;
}
async update(payment: Payment): Promise<Payment> {
this.logger.debug('[InMemoryPaymentRepository] update', { payment });
this.payments.set(payment.id, payment);
return payment;
}
clear(): void {
this.payments.clear();
}
}