using skydiveLogs_api.Domain; using skydiveLogs_api.DomainBusiness.Interfaces; using skydiveLogs_api.DomainService.Repositories; using System.Collections.Generic; using System.Linq; namespace skydiveLogs_api.DomainBusiness { public class StatsForLastMonthByDzService : IStatsForLastMonthByDzService { #region Public Constructors public StatsForLastMonthByDzService(IJumpService jumpService, IIdentityService identityService, IStatsForLastMonthByDzRepository statsForLastMonthByDzRepository) { _jumpService = jumpService; _identityService = identityService; _statsForLastMonthByDzRepository = statsForLastMonthByDzRepository; } #endregion Public Constructors #region Public Methods public IEnumerable GetStats() { var allStats = _statsForLastMonthByDzRepository.GetAll(_identityService.ConnectedUser); if (!allStats.Any()) { var allJumps = _jumpService.GetAllJumps(); var results = new List(); if (allJumps.Any()) { var lastJump = allJumps.OrderByDescending(j => j.JumpDate).First(); var yearOfLastJump = lastJump.JumpDate.Year; var monthOfLastJump = lastJump.JumpDate.Month; results = [.. allJumps.Where(j => j.JumpDate.Year == yearOfLastJump && j.JumpDate.Month == monthOfLastJump) .GroupBy(j => j.DropZone.Name, j => j, (groupby, jumps) => new StatsForLastMonthByDz { DropZone = groupby.ToString(), Nb = jumps.Count(), User = _identityService.ConnectedUser })]; } _statsForLastMonthByDzRepository.Add(results); return results; } return allStats; } public void Reset() { _statsForLastMonthByDzRepository.Delete(_identityService.ConnectedUser); } #endregion Public Methods #region Private Fields private readonly IIdentityService _identityService; private readonly IJumpService _jumpService; private readonly IStatsForLastMonthByDzRepository _statsForLastMonthByDzRepository; #endregion Private Fields } }