using System; using System.Collections.Generic; using System.Threading.Tasks; using AutoMapper; using EstusShots.Server.Models; using EstusShots.Shared.Interfaces; using EstusShots.Shared.Models; using EstusShots.Shared.Models.Parameters; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Dto = EstusShots.Shared.Dto; namespace EstusShots.Server.Services { public class SeasonsService : ISeasonsController { private readonly EstusShotsContext _context; private readonly IMapper _mapper; private readonly ILogger _logger; public SeasonsService(EstusShotsContext context, IMapper mapper, ILogger logger) { _context = context; _mapper = mapper; _logger = logger; } public async Task> GetSeasons(GetSeasonsParameter parameter) { var seasons = await _context.Seasons.ToListAsync(); var dtos = _mapper.Map>(seasons); return new ApiResponse(new GetSeasonsResponse(dtos)); } public async Task> GetSeason(GetSeasonParameter parameter) { var season = await _context.Seasons.FindAsync(parameter.SeasonId); if (season == null) { _logger.LogWarning($"Season '{parameter.SeasonId}' not found in database"); return new ApiResponse(new OperationResult(false, $"Season '{parameter.SeasonId}' not found in database")); } var seasonDto = _mapper.Map(season); return new ApiResponse(new GetSeasonResponse(seasonDto)); } public async Task> SaveSeason(SaveSeasonParameter parameter) { if (parameter.Season.SeasonId.IsEmpty()) { var season = _mapper.Map(parameter.Season); _context.Seasons.Add(season); var count = await _context.SaveChangesAsync(); _logger.LogInformation($"Season created: '{season.SeasonId}' ({count} rows updated)"); return new ApiResponse(new SaveSeasonResponse(season.SeasonId)); } else { var season = await _context.Seasons.FindAsync(parameter.Season.SeasonId); _context.Seasons.Update(season); _mapper.Map(parameter.Season, season); var count = await _context.SaveChangesAsync(); _logger.LogInformation($"Season '{season.SeasonId}' updated ({count} rows updated)"); return new ApiResponse(new SaveSeasonResponse(season.SeasonId)); } } } }