presence/Demo/UI/MainMenu.cs

462 lines
21 KiB
C#
Raw Normal View History

2024-10-25 08:47:11 +00:00
using Demo.Data.LocalData.Entity;
using Demo.Domain.Models;
using Demo.Domain.UseCase;
2024-10-21 12:42:00 +00:00
using System;
namespace Demo.UI
{
public class MainMenu
{
private readonly UserUseCase _userUseCase;
private readonly GroupUseCase _groupUseCase;
2024-10-25 08:47:11 +00:00
private readonly AttendanceUseCase _attendanceUseCase;
private readonly UseCaseGeneratePresence _presenceGenerator;
2024-10-21 12:42:00 +00:00
2024-10-25 08:47:11 +00:00
// Конструктор с инициализацией всех необходимых зависимостей
public MainMenu(UserUseCase userUseCase, GroupUseCase groupUseCase, AttendanceUseCase attendanceUseCase, UseCaseGeneratePresence presenceGenerator)
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
_userUseCase = userUseCase ?? throw new ArgumentNullException(nameof(userUseCase));
_groupUseCase = groupUseCase ?? throw new ArgumentNullException(nameof(groupUseCase));
_attendanceUseCase = attendanceUseCase ?? throw new ArgumentNullException(nameof(attendanceUseCase));
_presenceGenerator = presenceGenerator ?? throw new ArgumentNullException(nameof(presenceGenerator));
2024-10-21 12:42:00 +00:00
}
public void DisplayMenu()
{
while (true)
{
Console.Clear();
Console.WriteLine("1. Показать всех пользователей");
Console.WriteLine("2. Удалить пользователя по GUID");
Console.WriteLine("3. Обновить пользователя");
Console.WriteLine("4. Найти пользователя по GUID");
Console.WriteLine("5. Показать все группы");
Console.WriteLine("6. Добавить группу");
Console.WriteLine("7. Обновить группу");
2024-10-25 08:47:11 +00:00
Console.WriteLine("8. Удалить группу по ID");
Console.WriteLine("9. Найти группу по ID");
Console.WriteLine("10. Показать все посещаемости");
Console.WriteLine("11. Добавить посещаемость");
Console.WriteLine("12. Обновить посещаемость");
Console.WriteLine("13. Удалить посещаемость");
Console.WriteLine("14. Генерация посещаемости на день");
Console.WriteLine("15. Генерация посещаемости на неделю");
Console.WriteLine("16. Показать посещаемость по группе и дате");
Console.WriteLine("17. Показать посещаемость по группе за диапазон дат");
2024-10-21 12:42:00 +00:00
Console.WriteLine("0. Выход");
var choice = Console.ReadLine();
switch (choice)
{
2024-10-25 08:47:11 +00:00
case "1": ShowAllUsers(); break;
case "2": RemoveUser(); break;
case "3": UpdateUser(); break;
case "4": FindUserByGuid(); break;
case "5": ShowAllGroups(); break;
case "6": AddGroup(); break;
case "7": UpdateGroup(); break;
case "8": RemoveGroup(); break;
case "9": FindGroupById(); break;
case "10": ShowAllAttendances(); break;
case "11": AddAttendance(); break;
case "12": UpdateAttendance(); break;
case "13": RemoveAttendance(); break;
case "14": GeneratePresenceForDay(); break;
case "15": GeneratePresenceForWeek(); break;
case "16": ShowAttendancesByGroupAndDate(); break;
case "17": ShowAttendancesByGroupAndDateRange(); break;
case "0": return;
default: Console.WriteLine("Неверный ввод. Попробуйте снова."); break;
2024-10-21 12:42:00 +00:00
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
}
private void ShowAllUsers()
{
var users = _userUseCase.GetAllUsers();
Console.WriteLine("Все пользователи:");
foreach (var user in users)
{
2024-10-25 08:47:11 +00:00
Console.WriteLine($"GUID: {user.Guid}, ФИО: {user.FIO}, Группа ID: {user.GroupID}");
2024-10-21 12:42:00 +00:00
}
}
private void RemoveUser()
{
Console.Write("Введите GUID пользователя для удаления: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
2024-10-25 08:47:11 +00:00
var removed = _userUseCase.RemoveUser(userGuid);
Console.WriteLine(removed ? "Пользователь удалён." : "Пользователь не найден.");
}
else
{
Console.WriteLine("Некорректный GUID.");
}
}
private void UpdateUser()
{
Console.Write("Введите GUID пользователя для обновления: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
var user = _userUseCase.FindUserByGuid(userGuid);
if (user != null)
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите новое имя пользователя: ");
user.FIO = Console.ReadLine();
var updated = _userUseCase.UpdateUser(user);
Console.WriteLine(updated ? "Пользователь обновлён." : "Не удалось обновить пользователя.");
2024-10-21 12:42:00 +00:00
}
else
{
Console.WriteLine("Пользователь не найден.");
}
}
else
{
Console.WriteLine("Некорректный GUID.");
}
}
2024-10-25 08:47:11 +00:00
private void FindUserByGuid()
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите GUID пользователя для поиска: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
var userModel = _userUseCase.GetUserModelByGuid(userGuid);
Console.WriteLine(userModel != null ? $"Пользователь найден: GUID = {userModel.Guid}, ФИО = {userModel.FIO}" : "Пользователь не найден.");
}
else
{
Console.WriteLine("Некорректный GUID.");
}
}
private void ShowAllGroups()
{
var groups = _groupUseCase.GetAllGroups();
Console.WriteLine("Все группы:");
foreach (var group in groups)
{
Console.WriteLine($"ID: {group.Id}, Название: {group.Name}");
}
}
private void AddGroup()
{
Console.Write("Введите название новой группы: ");
var groupName = Console.ReadLine();
var group = new Demo.Domain.Models.Group { Name = groupName };
_groupUseCase.AddGroup(group);
Console.WriteLine("Группа добавлена.");
}
private void UpdateGroup()
{
Console.Write("Введите ID группы для обновления: ");
2024-10-21 12:42:00 +00:00
if (int.TryParse(Console.ReadLine(), out var groupId))
{
2024-10-25 08:47:11 +00:00
var group = _groupUseCase.GetGroupById(groupId);
if (group != null)
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите новое название группы: ");
group.Name = Console.ReadLine();
var updated = _groupUseCase.UpdateGroup(group);
Console.WriteLine(updated ? "Группа обновлена." : "Не удалось обновить группу.");
2024-10-21 12:42:00 +00:00
}
else
{
Console.WriteLine("Группа не найдена.");
}
}
else
{
Console.WriteLine("Некорректный ID.");
}
}
2024-10-25 08:47:11 +00:00
private void RemoveGroup()
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите ID группы для удаления: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
var removed = _groupUseCase.RemoveGroupById(groupId);
Console.WriteLine(removed ? "Группа удалена." : "Группа не найдена.");
}
else
{
Console.WriteLine("Некорректный ID.");
}
}
2024-10-21 12:42:00 +00:00
2024-10-25 08:47:11 +00:00
private void FindGroupById()
{
Console.Write("Введите ID группы для поиска: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
{
var group = _groupUseCase.GetGroupById(groupId);
Console.WriteLine(group != null ? $"Группа найдена: ID = {group.Id}, Название = {group.Name}" : "Группа не найдена.");
}
else
{
Console.WriteLine("Некорректный ID.");
}
}
2024-10-21 12:42:00 +00:00
2024-10-25 08:47:11 +00:00
private void ShowAllAttendances()
{
var attendances = _attendanceUseCase.GetAllAttendances();
Console.WriteLine("Все посещаемости:");
foreach (var attendance in attendances)
{
Console.WriteLine($"User ID: {attendance.UserGuid}, Date: {attendance.Date}, Present: {attendance.IsPresent}");
}
}
private void AddAttendance()
{
Console.Write("Введите GUID пользователя: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
Console.Write("Введите дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var date))
{
Console.Write("Введите номер урока: ");
if (int.TryParse(Console.ReadLine(), out var lessonNumber))
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
var attendance = new Attendance { UserGuid = userGuid, Date = date, LessonNumber = lessonNumber, IsPresent = true };
_attendanceUseCase.AddAttendance(attendance);
Console.WriteLine("Посещаемость добавлена.");
2024-10-21 12:42:00 +00:00
}
else
{
2024-10-25 08:47:11 +00:00
Console.WriteLine("Некорректный номер урока.");
2024-10-21 12:42:00 +00:00
}
}
else
{
2024-10-25 08:47:11 +00:00
Console.WriteLine("Некорректная дата.");
2024-10-21 12:42:00 +00:00
}
}
else
{
Console.WriteLine("Некорректный GUID.");
}
}
2024-10-25 08:47:11 +00:00
private void UpdateAttendance()
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите GUID пользователя: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var date))
{
Console.Write("Введите статус присутствия (true/false): ");
if (bool.TryParse(Console.ReadLine(), out var isPresent))
{
var attendance = new Attendance { UserGuid = userGuid, Date = date, LessonNumber = 1, IsPresent = isPresent };
var updated = _attendanceUseCase.UpdateAttendance(attendance);
Console.WriteLine(updated ? "Посещаемость обновлена." : "Запись о посещаемости не найдена.");
}
else
{
Console.WriteLine("Некорректный статус присутствия.");
}
}
else
{
Console.WriteLine("Некорректная дата.");
}
2024-10-21 12:42:00 +00:00
}
else
{
2024-10-25 08:47:11 +00:00
Console.WriteLine("Некорректный GUID.");
2024-10-21 12:42:00 +00:00
}
}
2024-10-25 08:47:11 +00:00
private void RemoveAttendance()
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите GUID пользователя: ");
if (Guid.TryParse(Console.ReadLine(), out var userGuid))
{
Console.Write("Введите дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var date))
{
var removed = _attendanceUseCase.RemoveAttendance(userGuid, date);
Console.WriteLine(removed ? "Посещаемость удалена." : "Запись о посещаемости не найдена.");
}
else
{
Console.WriteLine("Некорректная дата.");
}
}
else
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.WriteLine("Некорректный GUID.");
2024-10-21 12:42:00 +00:00
}
}
2024-10-25 08:47:11 +00:00
private void GeneratePresenceForDay()
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
{
Console.Write("Введите номер первого занятия: ");
if (int.TryParse(Console.ReadLine(), out var firstLesson))
{
Console.Write("Введите номер последнего занятия: ");
if (int.TryParse(Console.ReadLine(), out var lastLesson))
{
var currentDate = DateOnly.FromDateTime(DateTime.Now);
_presenceGenerator.GeneratePresenceForDay(firstLesson, lastLesson, groupId, currentDate);
Console.WriteLine("Посещаемость на текущий день сгенерирована.");
}
else
{
Console.WriteLine("Некорректный номер последнего занятия.");
}
}
else
{
Console.WriteLine("Некорректный номер первого занятия.");
}
}
else
{
Console.WriteLine("Некорректный ID группы.");
}
2024-10-21 12:42:00 +00:00
}
2024-10-25 08:47:11 +00:00
private void GeneratePresenceForWeek()
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите ID группы: ");
2024-10-21 12:42:00 +00:00
if (int.TryParse(Console.ReadLine(), out var groupId))
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите номер первого занятия: ");
if (int.TryParse(Console.ReadLine(), out var firstLesson))
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите номер последнего занятия: ");
if (int.TryParse(Console.ReadLine(), out var lastLesson))
{
var startDate = DateOnly.FromDateTime(DateTime.Now);
_presenceGenerator.GeneratePresenceForWeek(firstLesson, lastLesson, groupId, startDate);
Console.WriteLine("Посещаемость на неделю сгенерирована.");
}
else
{
Console.WriteLine("Некорректный номер последнего занятия.");
}
2024-10-21 12:42:00 +00:00
}
else
{
2024-10-25 08:47:11 +00:00
Console.WriteLine("Некорректный номер первого занятия.");
2024-10-21 12:42:00 +00:00
}
}
else
{
2024-10-25 08:47:11 +00:00
Console.WriteLine("Некорректный ID группы.");
2024-10-21 12:42:00 +00:00
}
}
2024-10-25 08:47:11 +00:00
private void ShowAttendancesByGroupAndDate()
{
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out var groupId))
{
Console.Write("Введите дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var date))
{
var attendances = _attendanceUseCase.GetAttendancesByGroupAndDate(groupId, date);
if (attendances.Any())
{
// Построение таблицы
Console.WriteLine($"\nПосещаемость для группы {groupId} на дату {date:yyyy-MM-dd}:\n");
2024-10-21 12:42:00 +00:00
2024-10-25 08:47:11 +00:00
// Заголовок таблицы
Console.WriteLine("+------------------------------------------+-----------+");
Console.WriteLine($"| {"UserGuid",-40} | {"IsPresent",-9} |");
Console.WriteLine("+------------------------------------------+-----------+");
// Данные таблицы
foreach (var attendance in attendances)
{
Console.WriteLine($"| {attendance.UserGuid,-40} | {attendance.IsPresent,-9} |");
Console.WriteLine("+------------------------------------------+-----------+");
}
}
else
{
Console.WriteLine($"\nНет данных о посещаемости для группы {groupId} на дату {date:yyyy-MM-dd}.");
}
}
else
{
Console.WriteLine("Некорректная дата.");
}
}
else
{
Console.WriteLine("Некорректный ID группы.");
}
}
private void ShowAttendancesByGroupAndDateRange()
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите ID группы: ");
2024-10-21 12:42:00 +00:00
if (int.TryParse(Console.ReadLine(), out var groupId))
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите начальную дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var startDate))
2024-10-21 12:42:00 +00:00
{
2024-10-25 08:47:11 +00:00
Console.Write("Введите конечную дату (гггг-мм-дд): ");
if (DateOnly.TryParse(Console.ReadLine(), out var endDate))
{
var attendances = _attendanceUseCase.GetAttendancesByGroupAndDateRange(groupId, startDate, endDate);
if (attendances.Any())
{
// Построение таблицы
Console.WriteLine($"\nПосещаемость для группы {groupId} с {startDate:yyyy-MM-dd} по {endDate:yyyy-MM-dd}:\n");
// Заголовок таблицы
Console.WriteLine("+------------+------------------------------------------+-----------+");
Console.WriteLine($"| {"Date",-10} | {"UserGuid",-40} | {"IsPresent",-9} |");
Console.WriteLine("+------------+------------------------------------------+-----------+");
// Данные таблицы
foreach (var attendance in attendances)
{
Console.WriteLine($"| {attendance.Date,-10} | {attendance.UserGuid,-40} | {attendance.IsPresent,-9} |");
Console.WriteLine("+------------+------------------------------------------+-----------+");
}
}
else
{
Console.WriteLine($"\nНет данных о посещаемости для группы {groupId} за период с {startDate:yyyy-MM-dd} по {endDate:yyyy-MM-dd}.");
}
}
else
{
Console.WriteLine("Некорректная конечная дата.");
}
2024-10-21 12:42:00 +00:00
}
else
{
2024-10-25 08:47:11 +00:00
Console.WriteLine("Некорректная начальная дата.");
2024-10-21 12:42:00 +00:00
}
}
else
{
2024-10-25 08:47:11 +00:00
Console.WriteLine("Некорректный ID группы.");
2024-10-21 12:42:00 +00:00
}
}
2024-10-25 08:47:11 +00:00
2024-10-21 12:42:00 +00:00
}
}