/** * Repository Interface: ISponsorshipRequestRepository * * Defines operations for SponsorshipRequest aggregate persistence */ import type { SponsorshipRequest, SponsorableEntityType, SponsorshipRequestStatus } from '../entities/SponsorshipRequest'; export interface ISponsorshipRequestRepository { findById(id: string): Promise; /** * Find all requests for a specific entity (driver, team, race, or season) */ findByEntity(entityType: SponsorableEntityType, entityId: string): Promise; /** * Find pending requests for an entity that need review */ findPendingByEntity(entityType: SponsorableEntityType, entityId: string): Promise; /** * Find all requests made by a sponsor */ findBySponsorId(sponsorId: string): Promise; /** * Find requests by status */ findByStatus(status: SponsorshipRequestStatus): Promise; /** * Find requests by sponsor and status */ findBySponsorIdAndStatus(sponsorId: string, status: SponsorshipRequestStatus): Promise; /** * Check if a sponsor already has a pending request for an entity */ hasPendingRequest(sponsorId: string, entityType: SponsorableEntityType, entityId: string): Promise; /** * Count pending requests for an entity */ countPendingByEntity(entityType: SponsorableEntityType, entityId: string): Promise; create(request: SponsorshipRequest): Promise; update(request: SponsorshipRequest): Promise; delete(id: string): Promise; exists(id: string): Promise; }