using Application.Classes; using Application.DataTransferObjects.Alliance; using Application.Errors; using Application.Interfaces; using AutoMapper; using AutoMapper.QueryableExtensions; using Database; using Database.Entities; using Microsoft.EntityFrameworkCore; namespace Application.Repositories; public class AllianceRepository(ApplicationContext context, IMapper mapper) : IAllianceRepository { public async Task>> GetAlliancesAsync(CancellationToken cancellationToken) { var alliances = await context.Alliances .ProjectTo(mapper.ConfigurationProvider) .AsNoTracking() .ToListAsync(cancellationToken); return Result.Success(alliances); } public async Task> GetAllianceAsync(Guid allianceId, CancellationToken cancellationToken) { var allianceById = await context.Alliances .ProjectTo(mapper.ConfigurationProvider) .AsNoTracking() .FirstOrDefaultAsync(alliance => alliance.Id == allianceId, cancellationToken); return allianceById is null ? Result.Failure(AllianceErrors.NotFound) : Result.Success(allianceById); } public async Task> UpdateAllianceAsync(UpdateAllianceDto updateAllianceDto, string modifiedBy, CancellationToken cancellationToken) { var allianceToUpdate = await context.Alliances .FirstOrDefaultAsync(alliance => alliance.Id == updateAllianceDto.Id, cancellationToken); if (allianceToUpdate is null) return Result.Failure(AllianceErrors.NotFound); mapper.Map(updateAllianceDto, allianceToUpdate); allianceToUpdate.ModifiedBy = modifiedBy; await context.SaveChangesAsync(cancellationToken); return Result.Success(mapper.Map(allianceToUpdate)); } public async Task> DeleteAllianceAsync(Guid allianceId, CancellationToken cancellationToken) { var allianceToDelete = await context.Alliances.FirstOrDefaultAsync(alliance => alliance.Id == allianceId, cancellationToken); if (allianceToDelete is null) return Result.Failure(AllianceErrors.NotFound); context.Alliances.Remove(allianceToDelete); await context.SaveChangesAsync(cancellationToken); return Result.Success(true); } }