using System; using AttendanceApp.Domain.UseCases; using AttendanceApp.Data.Repository; using AttendanceApp.Domain.Models; using AttendanceApp.Data.Exceptions; namespace AttendanceApp.UI { public class PresenceConsole { private readonly UseCaseGeneratePresence _generatePresenceUseCase; private readonly IPresenceRepository _presenceRepository; private readonly IGroupRepository _groupRepository; public PresenceConsole(UseCaseGeneratePresence generatePresenceUseCase, IPresenceRepository presenceRepository, IGroupRepository groupRepository) { _generatePresenceUseCase = generatePresenceUseCase; _presenceRepository = presenceRepository; _groupRepository = groupRepository; } public void GenerateDailyPresence() { Console.Clear(); Console.WriteLine("=== Генерация посещаемости на текущий день ==="); Console.Write("Введите номер первого занятия: "); var firstClassInput = Console.ReadLine(); Console.Write("Введите номер последнего занятия: "); var lastClassInput = Console.ReadLine(); Console.Write("Введите ID группы: "); var groupIdInput = Console.ReadLine(); var currentDate = DateTime.Now.Date; if (int.TryParse(firstClassInput, out int firstClassNum) && int.TryParse(lastClassInput, out int lastClassNum) && int.TryParse(groupIdInput, out int groupId)) { try { _generatePresenceUseCase.GenerateDailyPresence(firstClassNum, lastClassNum, groupId, currentDate); Console.WriteLine("Посещаемость успешно сгенерирована на текущий день."); } catch (GroupNotFoundException ex) { Console.WriteLine(ex.Message); } } else { Console.WriteLine("Неверный формат ввода."); } Console.WriteLine("Нажмите любую клавишу для продолжения..."); Console.ReadKey(); } public void GenerateWeeklyPresence() { Console.Clear(); Console.WriteLine("=== Генерация посещаемости на неделю ==="); Console.Write("Введите номер первого занятия: "); var firstClassInput = Console.ReadLine(); Console.Write("Введите номер последнего занятия: "); var lastClassInput = Console.ReadLine(); Console.Write("Введите ID группы: "); var groupIdInput = Console.ReadLine(); Console.Write("Введите стартовую дату (yyyy-MM-dd): "); var startDateInput = Console.ReadLine(); if (int.TryParse(firstClassInput, out int firstClassNum) && int.TryParse(lastClassInput, out int lastClassNum) && int.TryParse(groupIdInput, out int groupId) && DateTime.TryParse(startDateInput, out DateTime startDate)) { try { _generatePresenceUseCase.GenerateWeeklyPresence(firstClassNum, lastClassNum, groupId, startDate); Console.WriteLine("Посещаемость успешно сгенерирована на неделю."); } catch (GroupNotFoundException ex) { Console.WriteLine(ex.Message); } } else { Console.WriteLine("Неверный формат ввода."); } Console.WriteLine("Нажмите любую клавишу для продолжения..."); Console.ReadKey(); } public void ShowPresenceByGroupAndDate() { Console.Clear(); Console.WriteLine("=== Показать посещаемость по группе и дате ==="); Console.Write("Введите ID группы: "); var groupIdInput = Console.ReadLine(); Console.Write("Введите дату (yyyy-MM-dd): "); var dateInput = Console.ReadLine(); if (int.TryParse(groupIdInput, out int groupId) && DateTime.TryParse(dateInput, out DateTime date)) { try { var group = _groupRepository.GetGroupById(groupId); var presences = _presenceRepository.GetPresenceByGroupAndDate(groupId, date); Console.WriteLine($"Посещаемость группы {group.Name} на {date.ToShortDateString()}:"); foreach (var presence in presences) { Console.WriteLine($"Пользователь ID: {presence.UserId} | Занятие №: {presence.ClassNumber} | Присутствует: {presence.IsPresent}"); } } catch (GroupNotFoundException ex) { Console.WriteLine(ex.Message); } } else { Console.WriteLine("Неверный формат ввода."); } Console.WriteLine("Нажмите любую клавишу для продолжения..."); Console.ReadKey(); } public void MarkUserAbsent() { Console.Clear(); Console.WriteLine("=== Отметить пользователя как отсутствующего ==="); Console.Write("Введите ID пользователя (GUID): "); var userIdInput = Console.ReadLine(); Console.Write("Введите диапазон занятий (через запятую, например: 1,3): "); var classRangeInput = Console.ReadLine(); if (Guid.TryParse(userIdInput, out Guid userId) && classRangeInput.Contains(",") && int.TryParse(classRangeInput.Split(',')[0], out int startClass) && int.TryParse(classRangeInput.Split(',')[1], out int endClass)) { try { var currentDate = DateTime.Now.Date; for (int classNum = startClass; classNum <= endClass; classNum++) { var presence = new Presence { ClassDate = currentDate, ClassNumber = classNum, IsPresent = false, UserId = userId }; _presenceRepository.UpdatePresence(presence); } Console.WriteLine("Пользователь успешно отмечен как отсутствующий на указанных занятиях."); } catch (RepositoryException ex) { Console.WriteLine($"Ошибка: {ex.Message}"); } } else { Console.WriteLine("Неверный формат ввода."); } Console.WriteLine("Нажмите любую клавишу для продолжения..."); Console.ReadKey(); } public void ShowPresenceByGroup() { Console.Clear(); Console.WriteLine("=== Показать посещаемость по группе ==="); Console.Write("Введите ID группы: "); var groupIdInput = Console.ReadLine(); if (int.TryParse(groupIdInput, out int groupId)) { try { var group = _groupRepository.GetGroupById(groupId); var presences = _presenceRepository.GetPresenceByGroup(groupId); Console.WriteLine($"Посещаемость группы {group.Name}:"); foreach (var presence in presences) { Console.WriteLine($"Дата: {presence.ClassDate.ToShortDateString()} | " + $"Занятие №{presence.ClassNumber} | " + $"Присутствует: {(presence.IsPresent ? "Да" : "Нет")} | " + $"Студент ID: {presence.UserId}"); } } catch (GroupNotFoundException ex) { Console.WriteLine($"Ошибка: {ex.Message}"); } } else { Console.WriteLine("Неверный формат ID группы."); } Console.WriteLine("\nНажмите любую клавишу для продолжения..."); Console.ReadKey(); } } }