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);
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<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
.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<PresenceDao> GetAttendanceByGroup(int groupId)
{

View File

@ -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<Group> 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<Group> _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;

View File

@ -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<User> 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
{

View File

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

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.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
};
}
}
}

View File

@ -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")]

View File

@ -1 +1 @@
926ddea3ff12cb8f4f0ca8122c04de8f5c0b00ba69e9b8f0048baf56e27cb1cf
e3996d2dddca87caa150d4842b58d23480fdea40b73351e3e6bfd178b184e71f