using System.Collections.Generic; using System.Linq; using skydiveLogs_api.Business.Interface; using skydiveLogs_api.Data.Interface; using skydiveLogs_api.Model; namespace skydiveLogs_api.Business { public class StatsService : IStatsService { public StatsService(IJumpRepository jumpRepository) { _jumpRepository = jumpRepository; } public IEnumerable GetStatsByAircraft() { var allJumps = _jumpRepository.GetAll(); return allJumps.GroupBy(j => j.Aircraft.Name, j => j, (groupby, jumps) => new Statistic { Label = groupby.ToString(), Nb = jumps.Count() }) .ToList(); } public IEnumerable GetStatsByDz() { var allJumps = _jumpRepository.GetAll(); return allJumps.GroupBy(j => j.DropZone.Name, j => j, (groupby, jumps) => new Statistic { Label = groupby.ToString(), Nb = jumps.Count() }) .ToList(); } public IEnumerable GetStatsByJumpType() { var allJumps = _jumpRepository.GetAll(); return allJumps.GroupBy(j => j.JumpType.Name, j => j, (groupby, jumps) => new Statistic { Label = groupby.ToString(), Nb = jumps.Count() }) .ToList(); } public IEnumerable GetStatsByGear() { var allJumps = _jumpRepository.GetAll(); return allJumps.GroupBy(j => j.Gear.Name, j => j, (groupby, jumps) => new Statistic { Label = groupby.ToString(), Nb = jumps.Count() }) .ToList(); } public IEnumerable GetStatsByYear() { var allJumps = _jumpRepository.GetAll(); return allJumps.GroupBy(j => j.JumpDate.Year, j => j, (groupby, jumps) => new Statistic { Label = groupby.ToString(), Nb = jumps.Count() }) .ToList(); } public IEnumerable GetStatsForLastYearByDz() { var allJumps = _jumpRepository.GetAll(); var lastJump = allJumps.OrderByDescending(j => j.JumpDate).FirstOrDefault(); var yearOfLastJump = lastJump.JumpDate.Year; return allJumps.Where(j => j.JumpDate.Year == yearOfLastJump) .GroupBy(j => j.DropZone.Name, j => j, (groupby, jumps) => new Statistic { Label = groupby.ToString(), Nb = jumps.Count() }) .ToList(); } public IEnumerable GetStatsForLastYearByJumpType() { var allJumps = _jumpRepository.GetAll(); var lastJump = allJumps.OrderByDescending(j => j.JumpDate).FirstOrDefault(); var yearOfLastJump = lastJump.JumpDate.Year; return allJumps.Where(j => j.JumpDate.Year == yearOfLastJump) .GroupBy(j => j.JumpType.Name, j => j, (groupby, jumps) => new Statistic { Label = groupby.ToString(), Nb = jumps.Count() }) .ToList(); } public IEnumerable GetStatsForLastMonthByDz() { var allJumps = _jumpRepository.GetAll(); var lastJump = allJumps.OrderByDescending(j => j.JumpDate).FirstOrDefault(); var yearOfLastJump = lastJump.JumpDate.Year; var monthOfLastJump = lastJump.JumpDate.Month; return allJumps.Where(j => j.JumpDate.Year == yearOfLastJump && j.JumpDate.Month == monthOfLastJump) .GroupBy(j => j.DropZone.Name, j => j, (groupby, jumps) => new Statistic { Label = groupby.ToString(), Nb = jumps.Count() }) .ToList(); } public IEnumerable GetStatsForLastMonthByJumpType() { var allJumps = _jumpRepository.GetAll(); var lastJump = allJumps.OrderByDescending(j => j.JumpDate).FirstOrDefault(); var yearOfLastJump = lastJump.JumpDate.Year; var monthOfLastJump = lastJump.JumpDate.Month; return allJumps.Where(j => j.JumpDate.Year == yearOfLastJump && j.JumpDate.Month == monthOfLastJump) .GroupBy(j => j.JumpType.Name, j => j, (groupby, jumps) => new Statistic { Label = groupby.ToString(), Nb = jumps.Count() }) .ToList(); } public SimpleSummary GetSimpleSummary() { var allJumps = _jumpRepository.GetAll(); var lastJump = allJumps.OrderByDescending(j => j.JumpDate).FirstOrDefault(); return new SimpleSummary { LastJump = lastJump, TotalJumps = allJumps.Count(), TotalCutaway = allJumps.Where(j => j.WithCutaway).Count() }; } private readonly IJumpRepository _jumpRepository; } }