using Demo.Data.Repository; using Demo.domain.Models; namespace Demo.Domain.UseCase { public class PresenceUseCase : IPresenceUseCase { private readonly IUserRepository _repositoryUserImpl; private readonly IPresenceRepository _repositoryPresenceImpl; private readonly IGroupRepository _repositoryGroupImpl; public PresenceUseCase(IPresenceRepository presenceRepository, IUserRepository repositoryUserImpl, IGroupRepository repositoryGroupImpl) { _repositoryPresenceImpl = presenceRepository; _repositoryGroupImpl = repositoryGroupImpl; _repositoryUserImpl = repositoryUserImpl; } public List GetPresencesByGroup(int groupId) { var usersByGroup = _repositoryUserImpl.GetAllUser() .Where(user => user.GroupID == groupId).ToList(); var presenceByGroup = _repositoryPresenceImpl.GetPresencesByGroup() .Where(x => usersByGroup.Any(user => user.Guid == x.UserGuid)) .Select(presence => new Presence{ User = new User{ Guid = presence.UserGuid, Group = new Group{ Id = groupId, Name = _repositoryGroupImpl.GetAllGroup().First(group => group.Id == groupId).Name }, FIO = usersByGroup.First(user => user.Guid == presence.UserGuid).FIO, }, LessonNumber = presence.LessonNumber, Date = presence.Date, IsAttedance = presence.IsAttedance }).ToList(); return presenceByGroup; } public List GetPresencesByGroupAndDate(int groupId, DateOnly date) { var usersByGroup = _repositoryUserImpl.GetAllUser() .Where(user => user.GroupID == groupId).ToList(); var presenceByGroupAndDate = _repositoryPresenceImpl.GetPresencesByGroup() .Where(x => usersByGroup.Any(user => user.Guid == x.UserGuid && x.Date == date)) .Select(presence => new Presence{ User = new User{ Guid = presence.UserGuid, Group = new Group{ Id = groupId, Name = _repositoryGroupImpl.GetAllGroup().First(group => group.Id == groupId).Name }, FIO = usersByGroup.First(user => user.Guid == presence.UserGuid).FIO, }, LessonNumber = presence.LessonNumber, Date = presence.Date, IsAttedance = presence.IsAttedance }).ToList(); return presenceByGroupAndDate; } public bool UpdateAttedance(int firstLesson, int lastLesson, DateOnly date, Guid UserGuid){ _repositoryPresenceImpl.UpdateAttedance(firstLesson, lastLesson, date, UserGuid); return true; } public bool GeneratePresence(int firstLesson, int lastLesson, int groupId, DateOnly date){ List presenceList = new List{}; var usersByGroup = _repositoryUserImpl.GetAllUser().Where(x => x.GroupID == groupId); for (int i = firstLesson; i <= lastLesson; i++){ foreach(UserLocalEntity user in usersByGroup){ presenceList.Add(new Presence{ User = new User{ Group = new Group{ Id = groupId, Name = _repositoryGroupImpl.GetAllGroup().First(group => group.Id == groupId).Name }, FIO = usersByGroup.First(user2 => user2.Guid == user.Guid).FIO, Guid = user.Guid }, IsAttedance = true, Date = date, LessonNumber = i}); } } var presenceLocalEntity = presenceList.Select(x => new PresenceLocalEntity{ UserGuid = x.User.Guid, IsAttedance = x.IsAttedance, LessonNumber = x.LessonNumber, Date = x.Date }).ToList(); _repositoryPresenceImpl.SavePresence(presenceLocalEntity); return true; } public bool GenerateWeekPresence(int firstLesson, int lastLesson, int groupId, DateOnly date){ for (int i = 0; i < 8; i++){ GeneratePresence(firstLesson, lastLesson, groupId, date.AddDays(i)); } return true; } } }