This commit is contained in:
Class_Student 2024-11-08 10:56:52 +03:00
parent f738e1e578
commit 141d9dd6a1
17 changed files with 134 additions and 112 deletions

View File

@ -12,7 +12,8 @@ namespace Demo.Data.Repository
List<PresenceLocalEntity> GetPresenceByGroupAndDate(int groupId, DateTime date); List<PresenceLocalEntity> GetPresenceByGroupAndDate(int groupId, DateTime date);
DateOnly? GetLastDateByGroupId(int groupId); DateOnly? GetLastDateByGroupId(int groupId);
public GroupPresenceSummary GetGeneralPresenceForGroup(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 MarkUserAsAbsent(Guid userGuid, int firstLessonNumber, int lastLessonNumber);
void AddPresence(PresenceLocalEntity presence); void AddPresence(PresenceLocalEntity presence);
List<PresenceDao> GetAttendanceByGroup(int groupId); List<PresenceDao> GetAttendanceByGroup(int groupId);

View File

@ -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 var presences = _remoteDatabaseContext.PresenceDaos
.Where(p => p.UserGuid == UserGuid .Where(p => p.UserGuid == UserGuid && p.UserDao.GroupID == groupId &&
&& p.UserDao.GroupID == groupId p.LessonNumber >= firstLesson && p.LessonNumber <= lastLesson && p.Date == date)
&& p.LessonNumber >= firstLesson
&& p.LessonNumber <= lastLesson
&& p.Date == date)
.ToList(); .ToList();
if (presences.Any()) if (presences.Any())
{ {
// Обновляем значение IsAttendance для всех найденных записей
foreach (var presence in presences) foreach (var presence in presences)
{ {
presence.IsAttedance = isAttendance; presence.IsAttedance = isAttendance;
} }
_remoteDatabaseContext.SaveChanges();
_remoteDatabaseContext.SaveChanges(); // Сохраняем изменения в базе данных return true; // Успех
Console.WriteLine($"Статус посещаемости для пользователя {UserGuid} с {firstLesson} по {lastLesson} урок обновлён.");
}
else
{
Console.WriteLine($"Посещаемость для пользователя ID: {UserGuid} на дату {date.ToShortDateString()} с {firstLesson} по {lastLesson} уроки не найдена.");
} }
return false; // Данные не найдены
} }
public List<PresenceDao> GetAttendanceByGroup(int groupId) public List<PresenceDao> GetAttendanceByGroup(int groupId)
{ {

View File

@ -2,6 +2,7 @@
using Demo.Data.Repository; using Demo.Data.Repository;
using Demo.domain.Models; using Demo.domain.Models;
namespace Demo.Domain.UseCase namespace Demo.Domain.UseCase
{ {
public class GroupUseCase 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 // Приватный метод для валидации существования группы по ID
private GroupLocalEntity ValidateGroupExistence(int groupId) private GroupLocalEntity ValidateGroupExistence(int groupId)
@ -53,32 +40,23 @@ namespace Demo.Domain.UseCase
} }
public void FindGroupById(int IdGroup) public Group FindGroupById(int groupId)
{ {
List<Group> GetAllGroups() var group = GetAllGroups().FirstOrDefault(g => g.Id == groupId);
if (group == null)
{ {
return [.. _repositoryGroupImpl throw new ArgumentException("Группа не найдена.");
.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}");
}
} }
return group;
} }
// Метод для добавления новой группы // Метод для добавления новой группы
public void AddGroup(string groupName) public void AddGroup(string groupName)
{ {
ValidateGroupName(groupName);
var newId = _repositoryGroupImpl.GetAllGroup().Any() var newId = _repositoryGroupImpl.GetAllGroup().Any()
? _repositoryGroupImpl.GetAllGroup().Max(g => g.Id) + 1 ? _repositoryGroupImpl.GetAllGroup().Max(g => g.Id) + 1
@ -95,7 +73,7 @@ namespace Demo.Domain.UseCase
public void RemoveGroupById(int groupId) public void RemoveGroupById(int groupId)
{ {
ValidateGroupId(groupId);
var existingGroup = ValidateGroupExistence(groupId); var existingGroup = ValidateGroupExistence(groupId);
List<Group> _groups = GetAllGroups(); List<Group> _groups = GetAllGroups();
@ -117,7 +95,7 @@ namespace Demo.Domain.UseCase
// Метод для изменения названия группы // Метод для изменения названия группы
public void UpdateGroup(int groupId, string newGroupName) public void UpdateGroup(int groupId, string newGroupName)
{ {
ValidateGroupName(newGroupName);
var existingGroup = ValidateGroupExistence(groupId); var existingGroup = ValidateGroupExistence(groupId);
existingGroup.Name = newGroupName; existingGroup.Name = newGroupName;

View File

@ -15,43 +15,6 @@ namespace Demo.Domain.UseCase
_repositoryGroupImpl = repositoryGroupImpl; _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<User> GetAllUsers() => _repositoryUserImpl.GetAllUsers public List<User> GetAllUsers() => _repositoryUserImpl.GetAllUsers
.Join(_repositoryGroupImpl.GetAllGroup(), .Join(_repositoryGroupImpl.GetAllGroup(),
@ -72,14 +35,12 @@ namespace Demo.Domain.UseCase
{ {
return _repositoryUserImpl.RemoveUserById(userGuid); return _repositoryUserImpl.RemoveUserById(userGuid);
} }
catch (UserNotFoundException ex) catch (UserNotFoundException)
{ {
Console.WriteLine($"Ошибка: {ex.Message}");
return false; return false;
} }
catch (RepositoryException ex) catch (RepositoryException)
{ {
Console.WriteLine($"Ошибка в репозитории: {ex.Message}");
return false; return false;
} }
} }
@ -87,9 +48,6 @@ namespace Demo.Domain.UseCase
// Обновить пользователя по guid // Обновить пользователя по guid
public User UpdateUser(User user) public User UpdateUser(User user)
{ {
ValidateUserFIO(user.FIO);
ValidateGroupExistence(user.Group.Id);
UserLocalEnity userLocalEnity = new UserLocalEnity UserLocalEnity userLocalEnity = new UserLocalEnity
{ {
FIO = user.FIO, FIO = user.FIO,
@ -104,7 +62,12 @@ namespace Demo.Domain.UseCase
throw new Exception("Ошибка при обновлении пользователя."); 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 return new User
{ {
@ -121,8 +84,21 @@ namespace Demo.Domain.UseCase
// Найти пользователя по id // Найти пользователя по id
public User FindUserById(Guid userGuid) public User FindUserById(Guid userGuid)
{ {
var user = ValidateUserExistence(userGuid); var user = _repositoryUserImpl.GetAllUsers
var group = ValidateGroupExistence(user.GroupID); .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 return new User
{ {

View File

@ -13,9 +13,17 @@ namespace Demo.UI
_groupUseCase = groupUseCase; _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 try
{ {
ValidateGroupName(groupName); // Валидация в интерфейсе
_groupUseCase.AddGroup(groupName); _groupUseCase.AddGroup(groupName);
Console.WriteLine($"\nГруппа {groupName} добавлена.\n"); Console.WriteLine($"\nГруппа {groupName} добавлена.\n");
} }
@ -48,11 +57,19 @@ namespace Demo.UI
} }
public void RemoveGroup(string groupIdStr) public void RemoveGroup(string groupIdStr)
{
try
{ {
int groupId = int.Parse(groupIdStr); int groupId = int.Parse(groupIdStr);
ValidateGroupId(groupId); // Валидация в интерфейсе
_groupUseCase.RemoveGroupById(groupId); _groupUseCase.RemoveGroupById(groupId);
Console.WriteLine($"Группа с ID: {groupId} удалена"); Console.WriteLine($"Группа с ID: {groupId} удалена");
} }
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}\n");
}
}
// Метод для обновления названия группы // Метод для обновления названия группы
public void UpdateGroupName(int groupId, string newGroupName) public void UpdateGroupName(int groupId, string newGroupName)
@ -60,5 +77,21 @@ namespace Demo.UI
_groupUseCase.UpdateGroup(groupId, newGroupName); _groupUseCase.UpdateGroup(groupId, newGroupName);
Console.WriteLine($"\nНазвание группы с ID {groupId} изменено на {newGroupName}.\n"); 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 группы.");
}
}
} }
} }

View File

@ -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}");
}
}
} }

View File

@ -1,5 +1,7 @@
using Demo.Domain.UseCase; using Demo.domain.Models;
using Demo.Domain.UseCase;
using System; using System;
using System.Linq;
using System.Text; using System.Text;
namespace Demo.UI namespace Demo.UI
@ -41,14 +43,11 @@ namespace Demo.UI
try try
{ {
var user = _userUseCase.FindUserById(userGuid); var user = _userUseCase.FindUserById(userGuid);
Console.WriteLine($"Текущие данные: {user.FIO}, {user.Group.Name}"); Console.WriteLine($"Текущие данные: {user.FIO}, {user.Group.Name}");
Console.Write("\nВведите новое ФИО: "); Console.Write("\nВведите новое ФИО: ");
string newFIO = Console.ReadLine(); string newFIO = Console.ReadLine();
user.FIO = newFIO; user.FIO = newFIO;
_userUseCase.UpdateUser(user); _userUseCase.UpdateUser(user);
Console.WriteLine("\nПользователь обновлен.\n"); Console.WriteLine("\nПользователь обновлен.\n");
} }
catch (Exception ex) catch (Exception ex)
@ -60,15 +59,40 @@ namespace Demo.UI
// Метод для поиска пользователя по ID // Метод для поиска пользователя по ID
public void FindUserById(Guid userGuid) public void FindUserById(Guid userGuid)
{ {
var user = _userUseCase.FindUserById(userGuid); try
if (user != null)
{ {
var user = _userUseCase.FindUserById(userGuid);
Console.WriteLine($"\nПользователь найден: {user.Guid}, {user.FIO}, {user.Group.Name}\n"); 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
};
}
} }
} }

View File

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Demo")] [assembly: System.Reflection.AssemblyCompanyAttribute("Demo")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [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.AssemblyProductAttribute("Demo")]
[assembly: System.Reflection.AssemblyTitleAttribute("Demo")] [assembly: System.Reflection.AssemblyTitleAttribute("Demo")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
926ddea3ff12cb8f4f0ca8122c04de8f5c0b00ba69e9b8f0048baf56e27cb1cf e3996d2dddca87caa150d4842b58d23480fdea40b73351e3e6bfd178b184e71f