pr1/presence/ui/MainMenu.cs

197 lines
9.7 KiB
C#
Raw Normal View History

2024-11-20 17:50:01 +00:00

using Demo.Data.Repository;
using Demo.domain.Models;
using Demo.Domain.UseCase;
using System;
2024-12-05 09:30:01 +00:00
using static Demo.UI.UserConsoleUI;
2024-11-20 17:50:01 +00:00
namespace Demo.UI
{
2024-12-05 09:30:01 +00:00
// Основное меню консольного пользовательского интерфейса.
2024-11-20 17:50:01 +00:00
public class MainMenuUI
{
2024-12-05 09:30:01 +00:00
private readonly UserConsole _userConsole; // Консольный интерфейс для работы с пользователями.
private readonly GroupConsoleUI _groupConsole; // Консольный интерфейс для работы с группами.
private readonly PresenceConsole _presenceConsole; // Консольный интерфейс для работы с посещаемостью.
2024-11-20 17:50:01 +00:00
2024-12-05 09:30:01 +00:00
// Конструктор для инициализации зависимостей.
2024-11-20 17:50:01 +00:00
public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, UseCaseGeneratePresence presenceUseCase, IPresenceRepository presenceRepository)
{
2024-12-05 09:30:01 +00:00
// Инициализация всех интерфейсов с соответствующими UseCase и репозиториями.
2024-11-20 17:50:01 +00:00
_userConsole = new UserConsole(userUseCase);
2024-12-05 09:30:01 +00:00
_groupConsole = new GroupConsoleUI(groupUseCase);
2024-11-20 17:50:01 +00:00
_presenceConsole = new PresenceConsole(presenceUseCase, presenceRepository);
}
2024-12-05 09:30:01 +00:00
// Основной метод для отображения меню и обработки ввода пользователя.
2024-11-20 17:50:01 +00:00
public void DisplayMenu()
{
while (true)
{
2024-12-05 09:30:01 +00:00
// Отображение доступных команд в консоль.
Console.WriteLine("MENU");
Console.WriteLine("1. Все пользователи");
Console.WriteLine("2. Найти пользователя");
Console.WriteLine("3. Обновить данные пользователя");
Console.WriteLine("4. Удалить пользователя");
2024-11-20 17:50:01 +00:00
Console.WriteLine("5. Список всех групп");
Console.WriteLine("6. Найти группу");
Console.WriteLine("7. Создать группу");
Console.WriteLine("8. Изменить название группы");
Console.WriteLine("9. Удалить группу");
2024-12-05 09:30:01 +00:00
Console.WriteLine("10. Сгенерировать посещаемость на день");
Console.WriteLine("11. Сгенерировать посещаемость на неделю");
Console.WriteLine("12. Показать посещаемость группы");
Console.WriteLine("13. Посещаемость группы за день");
Console.WriteLine("14. Отметить отсутствующего пользователя");
2024-11-20 17:50:01 +00:00
Console.WriteLine("0. Выход");
Console.Write("Выберите команду: ");
2024-12-05 09:30:01 +00:00
// Считывание команды пользователя.
2024-11-20 17:50:01 +00:00
string command = Console.ReadLine();
Console.WriteLine();
2024-12-05 09:30:01 +00:00
// Обработка команд через switch-case.
2024-11-20 17:50:01 +00:00
switch (command)
{
2024-12-05 09:30:01 +00:00
case "1": _userConsole.AllUsers(); break;// Показать всех пользователей.
2024-11-20 17:50:01 +00:00
case "2": ExecuteGuidCommand("Введите Guid пользователя для поиска: ", _userConsole.FindUserByGuid); break;
case "3": ExecuteGuidCommand("Введите Guid пользователя для обновления: ", _userConsole.UpdateUserByGuid); break;
case "4": ExecuteGuidCommand("Введите Guid пользователя для удаления: ", _userConsole.RemoveUserByGuid); break;
2024-12-05 09:30:01 +00:00
case "5": _groupConsole.DisplayAllGroups(); break; // Показать все группы.
2024-11-20 17:50:01 +00:00
case "6": ExecuteIntCommand("Введите ID группы для поиска: ", _groupConsole.FindGroupById); break;
case "7":
Console.Write("Введите название новой группы: ");
2024-12-05 09:30:01 +00:00
_groupConsole.AddGroup(Console.ReadLine()); // Создать новую группу.
2024-11-20 17:50:01 +00:00
break;
case "8":
ExecuteIntCommand("Введите ID группы для изменения: ", id =>
{
Console.Write("Введите новое название группы: ");
_groupConsole.UpdateGroupName(id, Console.ReadLine());
});
break;
case "9":
ExecuteIntCommand("Введите ID группы для удаления: ", id => _groupConsole.RemoveGroup(id.ToString()));
break;
2024-12-05 09:30:01 +00:00
case "10": GenerateAttendance("день"); break;// Генерация посещаемости на день.
2024-11-20 17:50:01 +00:00
2024-12-05 09:30:01 +00:00
case "11": GenerateAttendance("неделю"); break; // Генерация посещаемости на неделю.
2024-11-20 17:50:01 +00:00
case "12":
Console.Write("Введите дату (гггг-мм-дд): ");
DateTime date = DateTime.Parse(Console.ReadLine());
ExecuteIntCommand("Введите ID группы: ", id => _presenceConsole.DisplayPresence(date, id));
break;
case "13":
ExecuteIntCommand("Введите ID группы: ", _presenceConsole.DisplayAllPresenceByGroup);
break;
case "14":
Console.Write("Введите Guid пользователя: ");
Guid userGuid = Guid.Parse(Console.ReadLine());
2024-12-05 09:30:01 +00:00
GenerateAbsence(userGuid); // Отметить пользователя как отсутствующего.
2024-11-20 17:50:01 +00:00
break;
case "0":
2024-12-05 09:30:01 +00:00
return; // Завершение программы.
2024-11-20 17:50:01 +00:00
default:
2024-12-05 09:30:01 +00:00
Console.WriteLine("Команда не распознана."); // Сообщение об ошибке.
2024-11-20 17:50:01 +00:00
break;
}
}
}
// Метод для обработки команд с параметром Guid.
private void ExecuteGuidCommand(string prompt, Action<Guid> action)
{
Console.Write(prompt);
if (Guid.TryParse(Console.ReadLine(), out Guid guid))
{
action(guid);
}
else
{
Console.WriteLine("Неверный формат Guid.");
}
}
// Метод для обработки команд с параметром int.
private void ExecuteIntCommand(string prompt, Action<int> action)
{
Console.Write(prompt);
if (int.TryParse(Console.ReadLine(), out int value))
{
action(value);
}
else
{
Console.WriteLine("Неверный формат числа.");
}
}
2024-12-05 09:30:01 +00:00
// Генерация посещаемости на день или неделю.
2024-11-20 17:50:01 +00:00
private void GenerateAttendance(string period)
{
try
{
Console.Write("Введите номер первого занятия: ");
int firstLesson = int.Parse(Console.ReadLine());
Console.Write("Введите номер последнего занятия: ");
int lastLesson = int.Parse(Console.ReadLine());
ExecuteIntCommand("Введите ID группы: ", id =>
{
if (period == "день")
{
_presenceConsole.GeneratePresenceForDay(DateTime.Now, id, firstLesson, lastLesson);
Console.WriteLine("Посещаемость на день сгенерирована.");
}
else
{
_presenceConsole.GeneratePresenceForWeek(DateTime.Now, id, firstLesson, lastLesson);
Console.WriteLine("Посещаемость на неделю сгенерирована.");
}
});
}
catch
{
2024-12-05 09:30:01 +00:00
Console.WriteLine("Ошибка ввода данных.");
2024-11-20 17:50:01 +00:00
}
}
2024-12-05 09:30:01 +00:00
// Отметка пользователя как отсутствующего.
2024-11-20 17:50:01 +00:00
private void GenerateAbsence(Guid userGuid)
{
try
{
Console.Write("Введите номер первого занятия: ");
int firstLesson = int.Parse(Console.ReadLine());
Console.Write("Введите номер последнего занятия: ");
int lastLesson = int.Parse(Console.ReadLine());
ExecuteIntCommand("Введите ID группы: ", id =>
{
_presenceConsole.MarkUserAsAbsent(DateTime.Now, id, userGuid, firstLesson, lastLesson);
Console.WriteLine("Пользователь отмечен как отсутствующий.");
});
}
catch
{
Console.WriteLine("Ошибка ввода данных.");
}
}
}
}