Presence_Desktop/data/Repository/SQLGroupRepositoryImpl.cs
2024-12-23 14:26:41 +03:00

168 lines
7.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using data.Exception;
using data.RemoteData;
using data.RemoteData.DAO;
using data.Repository;
using domain.Models;
using Microsoft.EntityFrameworkCore;
// Реализация интерфейса IGroupRepository для работы с группами в базе данных
public class SQLGroupRepositoryImpl : IGroupRepository
{
private readonly RemoteDatabaseContext _remoteDatabaseContext;
// Конструктор, принимающий контекст базы данных
public SQLGroupRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
{
_remoteDatabaseContext = remoteDatabaseContext;
}
// Добавление новой группы
public int AddGroup(GroupDao group)
{
// Проверка на существование группы с таким именем
if (_remoteDatabaseContext.Groups.Any(g => g.Name == group.Name))
return -1; // Возвращаем -1, если группа уже существует
_remoteDatabaseContext.Groups.Add(group);
_remoteDatabaseContext.SaveChanges();
return group.Id; // Возвращаем ID добавленной группы
}
// Обновление информации о группе по её ID
public bool UpdateGroupById(int groupID, GroupLocalEntity updatedGroup)
{
var existingGroup = _remoteDatabaseContext.Groups.FirstOrDefault(g => g.Id == groupID);
if (existingGroup == null)
return false; // Возвращаем false, если группа не найдена
existingGroup.Name = updatedGroup.Name; // Обновляем имя группы
_remoteDatabaseContext.SaveChanges();
return true; // Возвращаем true, если обновление прошло успешно
}
// Удаление группы по её ID
public bool RemoveGroupById(int groupID)
{
var existingGroup = _remoteDatabaseContext.Groups.FirstOrDefault(g => g.Id == groupID);
if (existingGroup == null)
return false; // Возвращаем false, если группа не найдена
_remoteDatabaseContext.Groups.Remove(existingGroup);
_remoteDatabaseContext.SaveChanges();
return true; // Возвращаем true, если удаление прошло успешно
}
// Получение группы по её ID
public GroupLocalEntity? GetGroupById(int groupId)
{
var groupDao = _remoteDatabaseContext.Groups.FirstOrDefault(g => g.Id == groupId);
return groupDao != null ? new GroupLocalEntity { Id = groupDao.Id, Name = groupDao.Name } : null;
}
// Получение всех групп
public List<GroupLocalEntity> GetAllGroup()
{
return _remoteDatabaseContext.Groups
.Select(g => new GroupLocalEntity { Id = g.Id, Name = g.Name })
.ToList();
}
// Получение всех групп с их студентами
public List<GroupDao> GetAllGroupWithStident()
{
// Загружаем группы вместе с пользователями
return _remoteDatabaseContext.Groups
.Include(g => g.Users) // Загружаем пользователей вместе с группами
.ToList();
}
// Удаление всех студентов из группы
public void RemoveAllStudentsFromGroup(int groupId)
{
var group = _remoteDatabaseContext.Groups.Include(g => g.Users).FirstOrDefault(g => g.Id == groupId);
if (group != null)
{
// Удаляем всех студентов из группы
var userList = group.Users.ToList();
foreach (var user in userList)
{
_remoteDatabaseContext.Entry(user).State = EntityState.Deleted; // Удаляем каждого студента
}
_remoteDatabaseContext.SaveChanges();
}
else
{
throw new ArgumentException($"Группа с ID {groupId} не найдена."); // Генерируем исключение, если группа не найдена
}
}
// Добавление студента в группу
public void AddStudentToGroup(int groupId, UserDao student)
{
var group = _remoteDatabaseContext.Groups.Include(g => g.Users).FirstOrDefault(g => g.Id == groupId);
if (group != null)
{
// Проверка на уникальность студента
if (group.Users.Any(u => u.Guid == student.Guid))
{
throw new ArgumentException($"Студент с GUID {student.Guid} уже добавлен в эту группу."); // Генерируем исключение, если студент уже в группе
}
// Создаём нового студента и добавляем его в контекст
_remoteDatabaseContext.Users.Add(student); // Добавляем нового студента в Users
// Привязываем студента к группе
student.GroupID = group.Id; // Устанавливаем внешний ключ (или ссылку на группу)
// Сохраняем изменения в контексте
_remoteDatabaseContext.SaveChanges();
}
else
{
throw new ArgumentException($"Группа с ID {groupId} не найдена."); // Генерируем исключение, если группа не найдена
}
}
// Метод для обновления группы
public void UpdateGroup(GroupDao group)
{
var existingGroup = _remoteDatabaseContext.Groups.FirstOrDefault(g => g.Id == group.Id);
if (existingGroup != null)
{
existingGroup.Name = group.Name; // Обновляем имя группы
// Обновите другие свойства группы, если нужно
_remoteDatabaseContext.SaveChanges();
}
else
{
throw new ArgumentException("Group not found"); // Генерируем исключение, если группа не найдена
}
}
// Удаление пользователя по его GUID
public bool RemoveUserByGuid(Guid userGuid)
{
var user = _remoteDatabaseContext.Users.FirstOrDefault(u => u.Guid == userGuid);
if (user == null) throw new UserNotFoundException(userGuid); // Генерируем исключение, если пользователь не найден
_remoteDatabaseContext.Users.Remove(user);
_remoteDatabaseContext.SaveChanges();
return true; // Возвращаем true, если удаление прошло успешно
}
// Обновление информации о пользователе
public UserDao UpdateUser(Guid userGuid, string newFio, int groupId)
{
var existingUser = _remoteDatabaseContext.Users.FirstOrDefault(u => u.Guid == userGuid);
if (existingUser == null) throw new UserNotFoundException(userGuid); // Генерируем исключение, если пользователь не найден
// Обновляем поля существующего пользователя
existingUser.FIO = newFio; // Обновляем ФИО пользователя
existingUser.GroupID = groupId; // Обновляем ID группы
_remoteDatabaseContext.SaveChanges();
return existingUser; // Возвращаем обновленного пользователя
}
}