using ApplicationLayer.Services.Applicants.NeededServices; using Domains.ApplicantDomain; using Infrastructure.Database.Applicants.Repositories.Exceptions; using Infrastructure.Database.Generic; using Microsoft.EntityFrameworkCore; namespace Infrastructure.Database.Applicants.Repositories; /// Repository pattern for /// /// public sealed class ApplicantsRepository(IGenericReader reader, IGenericWriter writer) : GenericRepository(reader, writer), IApplicantsRepository { protected override IQueryable LoadDomain() { return base.LoadDomain() .Include(a => a.PlaceOfWork); } async Task IApplicantsRepository.FindByUserIdAsync(Guid userId, CancellationToken cancellationToken) { var result = await LoadDomain().SingleOrDefaultAsync(a => a.UserId == userId, cancellationToken); return result ?? throw new ApplicantNotFoundByUserIdException(userId); } async Task IApplicantsRepository.GetApplicantIdByUserId(Guid userId, CancellationToken cancellationToken) { var result = await base.LoadDomain().SingleOrDefaultAsync(a => a.UserId == userId, cancellationToken); return result?.Id ?? throw new ApplicantNotFoundByUserIdException(userId); } }