using Demo.Data.Repository; using Demo.Domain.Models; using System; using System.Collections.Generic; using System.Linq; namespace Demo.Domain.UseCases { public class GroupUseCase { private readonly IPresenceRepository _presenceRepository; private readonly GroupRepositoryImpl _groupRepository; // Измените на GroupRepositoryImpl public GroupUseCase(GroupRepositoryImpl groupRepository, IPresenceRepository presenceRepository) // Конструктор { _groupRepository = groupRepository; _presenceRepository = presenceRepository; } // Метод для генерации посещаемости на текущий день public List GeneratePresence(int firstLessonNumber, int lastLessonNumber, int groupId, DateTime currentDate) { var users = _groupRepository.GetUsersByGroup(groupId); // Получаем пользователей группы List presenceList = new List(); foreach (var user in users) { var lessons = new List(new bool[lastLessonNumber - firstLessonNumber + 1]); // По умолчанию все посещены var presence = new LessonPresence(user.Id, currentDate, groupId, lessons); // Измените на LessonPresence presenceList.Add(presence); } return presenceList; } // Метод для генерации посещаемости на неделю public Dictionary> GenerateWeeklyPresence(int firstLessonNumber, int lastLessonNumber, int groupId, DateTime startDate) { var weeklyPresence = new Dictionary>(); for (int i = 0; i < 7; i++) { var currentDate = startDate.AddDays(i); var dailyPresence = GeneratePresence(firstLessonNumber, lastLessonNumber, groupId, currentDate); weeklyPresence[currentDate] = dailyPresence; } return weeklyPresence; } // Метод для вывода посещаемости по группе public List GetPresenceByGroup(int groupId) { return _presenceRepository.GetPresenceByGroup(groupId); } // Метод для вывода посещаемости по группе по дате public List GetPresenceByGroupAndDate(int groupId, DateTime date) { return _presenceRepository.GetPresenceByGroupAndDate(groupId, date); } // Метод для отметки пользователя как отсутствующего public void MarkUserAbsent(Guid userId, int groupId, DateTime date, List lessonNumbers) { var presenceRecords = _presenceRepository.GetPresenceByGroupAndDate(groupId, date); var presenceRecord = presenceRecords.FirstOrDefault(p => p.UserId == userId); if (presenceRecord != null) { foreach (var lessonNumber in lessonNumbers) { if (lessonNumber >= 0 && lessonNumber < presenceRecord.Lessons.Count) { presenceRecord.Lessons[lessonNumber] = false; // Отмечаем как отсутствующего } } _presenceRepository.UpdatePresence(presenceRecord); // Обновляем запись в репозитории } } } }