This commit is contained in:
2025-12-17 12:05:00 +01:00
parent 4d890863d3
commit 07dfefebe4
65 changed files with 6034 additions and 778 deletions

View File

@@ -1,5 +1,5 @@
import { ISponsorRepository } from '@core/racing/domain/repositories/ISponsorRepository';
import { Sponsor } from '@core/racing/domain/entities/Sponsor';
import { Sponsor } from '@core/racing/domain/entities/sponsor/Sponsor';
import { Logger } from '@core/shared/application';
export class InMemorySponsorRepository implements ISponsorRepository {
@@ -9,8 +9,8 @@ export class InMemorySponsorRepository implements ISponsorRepository {
constructor(private readonly logger: Logger, initialSponsors: Sponsor[] = []) {
this.logger.info('InMemorySponsorRepository initialized.');
for (const sponsor of initialSponsors) {
this.sponsors.set(sponsor.id, sponsor);
this.emailIndex.set(sponsor.contactEmail.toLowerCase(), sponsor.id);
this.sponsors.set(sponsor.id.toString(), sponsor);
this.emailIndex.set(sponsor.contactEmail.toString().toLowerCase(), sponsor.id.toString());
this.logger.debug(`Seeded sponsor: ${sponsor.id} (${sponsor.name}).`);
}
}
@@ -43,37 +43,37 @@ export class InMemorySponsorRepository implements ISponsorRepository {
async create(sponsor: Sponsor): Promise<Sponsor> {
this.logger.debug(`[InMemorySponsorRepository] Creating sponsor: ${sponsor.id} (${sponsor.name})`);
if (this.sponsors.has(sponsor.id)) {
if (this.sponsors.has(sponsor.id.toString())) {
this.logger.warn(`Sponsor with ID ${sponsor.id} already exists.`);
throw new Error('Sponsor already exists');
}
if (this.emailIndex.has(sponsor.contactEmail.toLowerCase())) {
if (this.emailIndex.has(sponsor.contactEmail.toString().toLowerCase())) {
this.logger.warn(`Sponsor with email ${sponsor.contactEmail} already exists.`);
throw new Error('Sponsor with this email already exists');
}
this.sponsors.set(sponsor.id, sponsor);
this.emailIndex.set(sponsor.contactEmail.toLowerCase(), sponsor.id);
this.sponsors.set(sponsor.id.toString(), sponsor);
this.emailIndex.set(sponsor.contactEmail.toString().toLowerCase(), sponsor.id.toString());
this.logger.info(`Sponsor ${sponsor.id} (${sponsor.name}) created successfully.`);
return Promise.resolve(sponsor);
}
async update(sponsor: Sponsor): Promise<Sponsor> {
this.logger.debug(`[InMemorySponsorRepository] Updating sponsor: ${sponsor.id} (${sponsor.name})`);
if (!this.sponsors.has(sponsor.id)) {
if (!this.sponsors.has(sponsor.id.toString())) {
this.logger.warn(`Sponsor with ID ${sponsor.id} not found for update.`);
throw new Error('Sponsor not found');
}
const existingSponsor = this.sponsors.get(sponsor.id);
const existingSponsor = this.sponsors.get(sponsor.id.toString());
// If email changed, update index
if (existingSponsor && existingSponsor.contactEmail.toLowerCase() !== sponsor.contactEmail.toLowerCase()) {
if (this.emailIndex.has(sponsor.contactEmail.toLowerCase()) && this.emailIndex.get(sponsor.contactEmail.toLowerCase()) !== sponsor.id) {
if (existingSponsor && existingSponsor.contactEmail.toString().toLowerCase() !== sponsor.contactEmail.toString().toLowerCase()) {
if (this.emailIndex.has(sponsor.contactEmail.toString().toLowerCase()) && this.emailIndex.get(sponsor.contactEmail.toString().toLowerCase()) !== sponsor.id.toString()) {
this.logger.warn(`Cannot update sponsor ${sponsor.id} to email ${sponsor.contactEmail} as it's already taken.`);
throw new Error('Sponsor with this email already exists');
}
this.emailIndex.delete(existingSponsor.contactEmail.toLowerCase());
this.emailIndex.set(sponsor.contactEmail.toLowerCase(), sponsor.id);
this.emailIndex.delete(existingSponsor.contactEmail.toString().toLowerCase());
this.emailIndex.set(sponsor.contactEmail.toString().toLowerCase(), sponsor.id.toString());
}
this.sponsors.set(sponsor.id, sponsor);
this.sponsors.set(sponsor.id.toString(), sponsor);
this.logger.info(`Sponsor ${sponsor.id} (${sponsor.name}) updated successfully.`);
return Promise.resolve(sponsor);
}
@@ -83,7 +83,7 @@ export class InMemorySponsorRepository implements ISponsorRepository {
const sponsor = this.sponsors.get(id);
if (sponsor) {
this.sponsors.delete(id);
this.emailIndex.delete(sponsor.contactEmail.toLowerCase());
this.emailIndex.delete(sponsor.contactEmail.toString().toLowerCase());
this.logger.info(`Sponsor ${id} deleted successfully.`);
} else {
this.logger.warn(`Sponsor with ID ${id} not found for deletion.`);