diff --git a/presence_new/Data/Repository/IPresenceRepository.cs b/presence_new/Data/Repository/IPresenceRepository.cs index 8221a39..4af9fbc 100644 --- a/presence_new/Data/Repository/IPresenceRepository.cs +++ b/presence_new/Data/Repository/IPresenceRepository.cs @@ -12,7 +12,8 @@ namespace Demo.Data.Repository List GetPresenceByGroupAndDate(int groupId, DateTime date); DateOnly? GetLastDateByGroupId(int groupId); public GroupPresenceSummary GetGeneralPresenceForGroup(int groupId); - void UpdateAtt(Guid UserGuid, int groupId, int firstLesson, int lastLesson, DateOnly date, bool isAttendance); + bool UpdateAtt(Guid UserGuid, int groupId, int firstLesson, int lastLesson, DateOnly date, bool isAttendance); + void MarkUserAsAbsent(Guid userGuid, int firstLessonNumber, int lastLessonNumber); void AddPresence(PresenceLocalEntity presence); List GetAttendanceByGroup(int groupId); diff --git a/presence_new/Data/Repository/SQLPresenceRepositoryImpl.cs b/presence_new/Data/Repository/SQLPresenceRepositoryImpl.cs index 92bc1fd..42c49df 100644 --- a/presence_new/Data/Repository/SQLPresenceRepositoryImpl.cs +++ b/presence_new/Data/Repository/SQLPresenceRepositoryImpl.cs @@ -174,32 +174,23 @@ namespace Demo.Data.Repository - public void UpdateAtt(Guid UserGuid, int groupId, int firstLesson, int lastLesson, DateOnly date, bool isAttendance) + public bool UpdateAtt(Guid UserGuid, int groupId, int firstLesson, int lastLesson, DateOnly date, bool isAttendance) { - // Находим все записи по UserId, GroupId, LessonNumber (в диапазоне) и дате var presences = _remoteDatabaseContext.PresenceDaos - .Where(p => p.UserGuid == UserGuid - && p.UserDao.GroupID == groupId - && p.LessonNumber >= firstLesson - && p.LessonNumber <= lastLesson - && p.Date == date) + .Where(p => p.UserGuid == UserGuid && p.UserDao.GroupID == groupId && + p.LessonNumber >= firstLesson && p.LessonNumber <= lastLesson && p.Date == date) .ToList(); if (presences.Any()) { - // Обновляем значение IsAttendance для всех найденных записей foreach (var presence in presences) { presence.IsAttedance = isAttendance; } - - _remoteDatabaseContext.SaveChanges(); // Сохраняем изменения в базе данных - Console.WriteLine($"Статус посещаемости для пользователя {UserGuid} с {firstLesson} по {lastLesson} урок обновлён."); - } - else - { - Console.WriteLine($"Посещаемость для пользователя ID: {UserGuid} на дату {date.ToShortDateString()} с {firstLesson} по {lastLesson} уроки не найдена."); + _remoteDatabaseContext.SaveChanges(); + return true; // Успех } + return false; // Данные не найдены } public List GetAttendanceByGroup(int groupId) { diff --git a/presence_new/Domain/UseCase/GroupUseCase.cs b/presence_new/Domain/UseCase/GroupUseCase.cs index 4d5eca4..0e897b2 100644 --- a/presence_new/Domain/UseCase/GroupUseCase.cs +++ b/presence_new/Domain/UseCase/GroupUseCase.cs @@ -2,6 +2,7 @@ using Demo.Data.Repository; using Demo.domain.Models; + namespace Demo.Domain.UseCase { public class GroupUseCase @@ -14,21 +15,7 @@ namespace Demo.Domain.UseCase } // Приватный метод для валидации имени группы - private void ValidateGroupName(string groupName) - { - if (string.IsNullOrWhiteSpace(groupName)) - { - throw new ArgumentException("Имя группы не может быть пустым."); - } - } - - private void ValidateGroupId(int GroupId) - { - if (GroupId < 1) - { - throw new ArgumentException("Введите корректный ID группы."); - } - } + // Приватный метод для валидации существования группы по ID private GroupLocalEntity ValidateGroupExistence(int groupId) @@ -53,32 +40,23 @@ namespace Demo.Domain.UseCase } - public void FindGroupById(int IdGroup) + public Group FindGroupById(int groupId) { - List GetAllGroups() + var group = GetAllGroups().FirstOrDefault(g => g.Id == groupId); + + if (group == null) { - return [.. _repositoryGroupImpl - .GetAllGroup() - .Select( - it => new Group - { Id = it.Id, Name = it.Name } - ) - ]; - } - foreach (var group in GetAllGroups()) - { - if (IdGroup == group.Id) - { - Console.WriteLine($"ID группы: {group.Id} Название группы: {group.Name}"); - } + throw new ArgumentException("Группа не найдена."); } + + return group; } // Метод для добавления новой группы public void AddGroup(string groupName) { - ValidateGroupName(groupName); + var newId = _repositoryGroupImpl.GetAllGroup().Any() ? _repositoryGroupImpl.GetAllGroup().Max(g => g.Id) + 1 @@ -95,7 +73,7 @@ namespace Demo.Domain.UseCase public void RemoveGroupById(int groupId) { - ValidateGroupId(groupId); + var existingGroup = ValidateGroupExistence(groupId); List _groups = GetAllGroups(); @@ -117,7 +95,7 @@ namespace Demo.Domain.UseCase // Метод для изменения названия группы public void UpdateGroup(int groupId, string newGroupName) { - ValidateGroupName(newGroupName); + var existingGroup = ValidateGroupExistence(groupId); existingGroup.Name = newGroupName; diff --git a/presence_new/Domain/UseCase/UserUseCase.cs b/presence_new/Domain/UseCase/UserUseCase.cs index de74fe9..0ea2115 100644 --- a/presence_new/Domain/UseCase/UserUseCase.cs +++ b/presence_new/Domain/UseCase/UserUseCase.cs @@ -15,43 +15,6 @@ namespace Demo.Domain.UseCase _repositoryGroupImpl = repositoryGroupImpl; } - // Приватный метод для валидации ФИО пользователя - private void ValidateUserFIO(string fio) - { - if (string.IsNullOrWhiteSpace(fio)) - { - throw new ArgumentException("ФИО не может быть пустым."); - } - } - - // Приватный метод для валидации существования пользователя по ID - private UserLocalEnity ValidateUserExistence(Guid userGuid) - { - var user = _repositoryUserImpl.GetAllUsers - .FirstOrDefault(u => u.Guid == userGuid); - - if (user == null) - { - throw new Exception("Пользователь не найден."); - } - - return user; - } - - // Приватный метод для валидации существования группы по ID - private GroupLocalEntity ValidateGroupExistence(int groupId) - { - var group = _repositoryGroupImpl.GetAllGroup() - .FirstOrDefault(g => g.Id == groupId); - - if (group == null) - { - throw new Exception("Группа не найдена."); - } - - return group; - } - // Вывести всех пользователей public List GetAllUsers() => _repositoryUserImpl.GetAllUsers .Join(_repositoryGroupImpl.GetAllGroup(), @@ -72,14 +35,12 @@ namespace Demo.Domain.UseCase { return _repositoryUserImpl.RemoveUserById(userGuid); } - catch (UserNotFoundException ex) + catch (UserNotFoundException) { - Console.WriteLine($"Ошибка: {ex.Message}"); return false; } - catch (RepositoryException ex) + catch (RepositoryException) { - Console.WriteLine($"Ошибка в репозитории: {ex.Message}"); return false; } } @@ -87,9 +48,6 @@ namespace Demo.Domain.UseCase // Обновить пользователя по guid public User UpdateUser(User user) { - ValidateUserFIO(user.FIO); - ValidateGroupExistence(user.Group.Id); - UserLocalEnity userLocalEnity = new UserLocalEnity { FIO = user.FIO, @@ -104,7 +62,12 @@ namespace Demo.Domain.UseCase throw new Exception("Ошибка при обновлении пользователя."); } - var groupEntity = ValidateGroupExistence(result.GroupID); + var groupEntity = _repositoryGroupImpl.GetAllGroup().FirstOrDefault(g => g.Id == result.GroupID); + + if (groupEntity == null) + { + throw new Exception("Группа не найдена."); + } return new User { @@ -121,8 +84,21 @@ namespace Demo.Domain.UseCase // Найти пользователя по id public User FindUserById(Guid userGuid) { - var user = ValidateUserExistence(userGuid); - var group = ValidateGroupExistence(user.GroupID); + var user = _repositoryUserImpl.GetAllUsers + .FirstOrDefault(u => u.Guid == userGuid); + + if (user == null) + { + throw new Exception("Пользователь не найден."); + } + + var group = _repositoryGroupImpl.GetAllGroup() + .FirstOrDefault(g => g.Id == user.GroupID); + + if (group == null) + { + throw new Exception("Группа не найдена."); + } return new User { diff --git a/presence_new/UI/GroupConsole.cs b/presence_new/UI/GroupConsole.cs index dab1660..e7baf29 100644 --- a/presence_new/UI/GroupConsole.cs +++ b/presence_new/UI/GroupConsole.cs @@ -13,9 +13,17 @@ namespace Demo.UI _groupUseCase = groupUseCase; } - public void FindGroupById(int IdGroup) + public void FindGroupById(int groupId) { - _groupUseCase.FindGroupById(IdGroup); + try + { + var group = _groupUseCase.FindGroupById(groupId); + Console.WriteLine($"ID группы: {group.Id} Название группы: {group.Name}"); + } + catch (Exception ex) + { + Console.WriteLine($"Ошибка: {ex.Message}"); + } } // Метод для отображения всех групп @@ -38,6 +46,7 @@ namespace Demo.UI { try { + ValidateGroupName(groupName); // Валидация в интерфейсе _groupUseCase.AddGroup(groupName); Console.WriteLine($"\nГруппа {groupName} добавлена.\n"); } @@ -49,9 +58,17 @@ namespace Demo.UI public void RemoveGroup(string groupIdStr) { - int groupId = int.Parse(groupIdStr); - _groupUseCase.RemoveGroupById(groupId); - Console.WriteLine($"Группа с ID: {groupId} удалена"); + try + { + int groupId = int.Parse(groupIdStr); + ValidateGroupId(groupId); // Валидация в интерфейсе + _groupUseCase.RemoveGroupById(groupId); + Console.WriteLine($"Группа с ID: {groupId} удалена"); + } + catch (Exception ex) + { + Console.WriteLine($"Ошибка: {ex.Message}\n"); + } } // Метод для обновления названия группы @@ -60,5 +77,21 @@ namespace Demo.UI _groupUseCase.UpdateGroup(groupId, newGroupName); Console.WriteLine($"\nНазвание группы с ID {groupId} изменено на {newGroupName}.\n"); } + + private void ValidateGroupName(string groupName) + { + if (string.IsNullOrWhiteSpace(groupName)) + { + throw new ArgumentException("Имя группы не может быть пустым."); + } + } + + private void ValidateGroupId(int GroupId) + { + if (GroupId < 1) + { + throw new ArgumentException("Введите корректный ID группы."); + } + } } } diff --git a/presence_new/UI/PresenceConsole.cs b/presence_new/UI/PresenceConsole.cs index 2a8a2cc..db6e631 100644 --- a/presence_new/UI/PresenceConsole.cs +++ b/presence_new/UI/PresenceConsole.cs @@ -181,7 +181,26 @@ namespace Demo.UI } } + public void UpdateUserAttendance(Guid userGuid, int groupId, int firstLesson, int lastLesson, DateOnly date, bool isAttendance) + { + try + { + bool result = _presenceRepository.UpdateAtt(userGuid, groupId, firstLesson, lastLesson, date, isAttendance); + if (result) + { + Console.WriteLine($"Статус посещаемости для пользователя {userGuid} обновлён."); + } + else + { + Console.WriteLine($"Данные о посещаемости для пользователя ID: {userGuid} не найдены."); + } + } + catch (Exception ex) + { + Console.WriteLine($"Ошибка при обновлении посещаемости: {ex.Message}"); + } + } } diff --git a/presence_new/UI/UserConsole.cs b/presence_new/UI/UserConsole.cs index 31c2d19..d8ee417 100644 --- a/presence_new/UI/UserConsole.cs +++ b/presence_new/UI/UserConsole.cs @@ -1,5 +1,7 @@ -using Demo.Domain.UseCase; +using Demo.domain.Models; +using Demo.Domain.UseCase; using System; +using System.Linq; using System.Text; namespace Demo.UI @@ -41,14 +43,11 @@ namespace Demo.UI try { var user = _userUseCase.FindUserById(userGuid); - Console.WriteLine($"Текущие данные: {user.FIO}, {user.Group.Name}"); Console.Write("\nВведите новое ФИО: "); string newFIO = Console.ReadLine(); - user.FIO = newFIO; _userUseCase.UpdateUser(user); - Console.WriteLine("\nПользователь обновлен.\n"); } catch (Exception ex) @@ -60,15 +59,40 @@ namespace Demo.UI // Метод для поиска пользователя по ID public void FindUserById(Guid userGuid) { - var user = _userUseCase.FindUserById(userGuid); - if (user != null) + try { + var user = _userUseCase.FindUserById(userGuid); Console.WriteLine($"\nПользователь найден: {user.Guid}, {user.FIO}, {user.Group.Name}\n"); } - else + catch (Exception ex) { - Console.WriteLine("\nПользователь не найден.\n"); + Console.WriteLine($"Ошибка: {ex.Message}\n"); } } + + private void ValidateUserFIO(string fio) + { + if (string.IsNullOrWhiteSpace(fio)) + { + throw new ArgumentException("ФИО не может быть пустым."); + } + } + + // Приватный метод для валидации существования группы по ID + private GroupLocalEntity ValidateGroupExistence(int groupId) + { + var group = _userUseCase.GetAllUsers().FirstOrDefault(u => u.Group.Id == groupId)?.Group; + if (group == null) + { + throw new Exception("Группа не найдена."); + } + + // Возвращаем правильный объект типа GroupLocalEntity + return new GroupLocalEntity + { + Id = group.Id, + Name = group.Name + }; + } } } diff --git a/presence_new/bin/Debug/net8.0/Demo.dll b/presence_new/bin/Debug/net8.0/Demo.dll index e183bd9..ce37443 100644 Binary files a/presence_new/bin/Debug/net8.0/Demo.dll and b/presence_new/bin/Debug/net8.0/Demo.dll differ diff --git a/presence_new/bin/Debug/net8.0/Demo.exe b/presence_new/bin/Debug/net8.0/Demo.exe index 29f6e5a..34d49bd 100644 Binary files a/presence_new/bin/Debug/net8.0/Demo.exe and b/presence_new/bin/Debug/net8.0/Demo.exe differ diff --git a/presence_new/bin/Debug/net8.0/Demo.pdb b/presence_new/bin/Debug/net8.0/Demo.pdb index c36d382..8bc3d05 100644 Binary files a/presence_new/bin/Debug/net8.0/Demo.pdb and b/presence_new/bin/Debug/net8.0/Demo.pdb differ diff --git a/presence_new/obj/Debug/net8.0/Demo.AssemblyInfo.cs b/presence_new/obj/Debug/net8.0/Demo.AssemblyInfo.cs index 6b02f59..fbc17e7 100644 --- a/presence_new/obj/Debug/net8.0/Demo.AssemblyInfo.cs +++ b/presence_new/obj/Debug/net8.0/Demo.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Demo")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f0f13fd99020ad4382d88f0d7ac71fd127a217f9")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f738e1e578b17341ba8674b1131b2eb0c5983d65")] [assembly: System.Reflection.AssemblyProductAttribute("Demo")] [assembly: System.Reflection.AssemblyTitleAttribute("Demo")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/presence_new/obj/Debug/net8.0/Demo.AssemblyInfoInputs.cache b/presence_new/obj/Debug/net8.0/Demo.AssemblyInfoInputs.cache index ed7cb88..6ebc66d 100644 --- a/presence_new/obj/Debug/net8.0/Demo.AssemblyInfoInputs.cache +++ b/presence_new/obj/Debug/net8.0/Demo.AssemblyInfoInputs.cache @@ -1 +1 @@ -926ddea3ff12cb8f4f0ca8122c04de8f5c0b00ba69e9b8f0048baf56e27cb1cf +e3996d2dddca87caa150d4842b58d23480fdea40b73351e3e6bfd178b184e71f diff --git a/presence_new/obj/Debug/net8.0/Demo.dll b/presence_new/obj/Debug/net8.0/Demo.dll index e183bd9..ce37443 100644 Binary files a/presence_new/obj/Debug/net8.0/Demo.dll and b/presence_new/obj/Debug/net8.0/Demo.dll differ diff --git a/presence_new/obj/Debug/net8.0/Demo.pdb b/presence_new/obj/Debug/net8.0/Demo.pdb index c36d382..8bc3d05 100644 Binary files a/presence_new/obj/Debug/net8.0/Demo.pdb and b/presence_new/obj/Debug/net8.0/Demo.pdb differ diff --git a/presence_new/obj/Debug/net8.0/apphost.exe b/presence_new/obj/Debug/net8.0/apphost.exe index 29f6e5a..34d49bd 100644 Binary files a/presence_new/obj/Debug/net8.0/apphost.exe and b/presence_new/obj/Debug/net8.0/apphost.exe differ diff --git a/presence_new/obj/Debug/net8.0/ref/Demo.dll b/presence_new/obj/Debug/net8.0/ref/Demo.dll index 581da9e..35178b1 100644 Binary files a/presence_new/obj/Debug/net8.0/ref/Demo.dll and b/presence_new/obj/Debug/net8.0/ref/Demo.dll differ diff --git a/presence_new/obj/Debug/net8.0/refint/Demo.dll b/presence_new/obj/Debug/net8.0/refint/Demo.dll index 581da9e..35178b1 100644 Binary files a/presence_new/obj/Debug/net8.0/refint/Demo.dll and b/presence_new/obj/Debug/net8.0/refint/Demo.dll differ