using Demo.Data.Repository; using Demo.domain.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Demo.Domain.UseCase { public class UseCaseGeneratePresence { public readonly IUserRepository _userRepository; public readonly IPresenceRepository _presenceRepository; private readonly IGroupRepository _groupRepository; public UseCaseGeneratePresence(IUserRepository userRepository, IPresenceRepository presenceRepository, IGroupRepository groupRepository) { _userRepository = userRepository; _presenceRepository = presenceRepository; _groupRepository = groupRepository; } public List GetPresenceByGroupAndDate(int groupId, DateTime date) { return _presenceRepository.GetPresenceByGroupAndDate(groupId, date); } public void GeneratePresenceForDay(int firstLesson, int lastLesson, int groupId, DateTime currentDate) { // Проверка существования группы var groupExists = _groupRepository.GetAllGroup().Any(g => g.Id == groupId); if (!groupExists) { throw new ArgumentException($"Группа с ID {groupId} не существует."); } var users = _userRepository.GetAllUsers.Where(u => u.GroupID == groupId).ToList(); List presences = new List(); for (int lessonNumber = firstLesson; lessonNumber <= lastLesson; lessonNumber++) { foreach (var user in users) { presences.Add(new PresenceLocalEntity { UserGuid = user.Guid, Date = currentDate, LessonNumber = lessonNumber, IsAttedance = true }); } } _presenceRepository.SavePresence(presences); } public void GeneratePresenceForWeek(int firstLesson, int lastLesson, int groupId, DateTime startTime) { // Проверка существования группы var groupExists = _groupRepository.GetAllGroup().Any(g => g.Id == groupId); if (!groupExists) { throw new ArgumentException($"Группа с ID {groupId} не существует."); } for (int i = 0; i < 7; i++) { DateTime currentTime = startTime.AddDays(i); GeneratePresenceForDay(firstLesson, lastLesson, groupId, currentTime); } } public void MarkUserAsAbsent(Guid userGuid, int groupId, int firstLesson, int lastLesson, DateTime date) { var presences = _presenceRepository.GetPresenceByGroupAndDate(groupId, date); foreach (var presence in presences.Where(p => p.UserGuid == userGuid && p.LessonNumber >= firstLesson && p.LessonNumber <= lastLesson)) { presence.IsAttedance = false; } _presenceRepository.SavePresence(presences); } public List GetAllPresenceByGroup(int groupId) { return _presenceRepository.GetPresenceByGroup(groupId); } public GroupPresenceSummary GetGeneralPresenceForGroup(int groupId) { return _presenceRepository.GetGeneralPresenceForGroup(groupId); } public class UseCaseGeneratePresence { public readonly IUserRepository _userRepository; public readonly IPresenceRepository _presenceRepository; private readonly IGroupRepository _groupRepository; public UseCaseGeneratePresence(IUserRepository userRepository, IPresenceRepository presenceRepository, IGroupRepository groupRepository) { _userRepository = userRepository; _presenceRepository = presenceRepository; _groupRepository = groupRepository; } public List GetPresenceByGroupAndDate(int groupId, DateTime date) { return _presenceRepository.GetPresenceByGroupAndDate(groupId, date); } public void GeneratePresenceForDay(int firstLesson, int lastLesson, int groupId, DateTime currentDate) { // Проверка существования группы var groupExists = _groupRepository.GetAllGroup().Any(g => g.Id == groupId); if (!groupExists) { throw new ArgumentException($"Группа с ID {groupId} не существует."); } var users = _userRepository.GetAllUsers.Where(u => u.GroupID == groupId).ToList(); List presences = new List(); for (int lessonNumber = firstLesson; lessonNumber <= lastLesson; lessonNumber++) { foreach (var user in users) { presences.Add(new PresenceLocalEntity { UserGuid = user.Guid, Date = currentDate, LessonNumber = lessonNumber, IsAttedance = true }); } } _presenceRepository.SavePresence(presences); } public void GeneratePresenceForWeek(int firstLesson, int lastLesson, int groupId, DateTime startTime) { // Проверка существования группы var groupExists = _groupRepository.GetAllGroup().Any(g => g.Id == groupId); if (!groupExists) { throw new ArgumentException($"Группа с ID {groupId} не существует."); } for (int i = 0; i < 7; i++) { DateTime currentTime = startTime.AddDays(i); GeneratePresenceForDay(firstLesson, lastLesson, groupId, currentTime); } } public void MarkUserAsAbsent(Guid userGuid, int groupId, int firstLesson, int lastLesson, DateTime date) { var presences = _presenceRepository.GetPresenceByGroupAndDate(groupId, date); foreach (var presence in presences.Where(p => p.UserGuid == userGuid && p.LessonNumber >= firstLesson && p.LessonNumber <= lastLesson)) { presence.IsAttedance = false; } _presenceRepository.SavePresence(presences); } } } }