presence/data/Repository/SQLGroupRepositoryImpl.cs
2024-12-18 09:39:51 +03:00

162 lines
5.8 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.RemoteDataBase;
using data.RemoteData.RemoteDataBase.DAO;
using data.Repository;
using domain.Models;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
public class SQLGroupRepositoryImpl : IGroupRepository
{
private readonly RemoteDatabaseContext _remoteDatabaseContext;
public SQLGroupRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
{
_remoteDatabaseContext = remoteDatabaseContext;
}
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.Include(g => g.Users)
.Select(g => new GroupLocalEntity { Id = g.Id, Name = g.Name , Users = g.Users.Select(user=> new UserLocalEnity{ Guid = user.Guid, FIO = user.FIO, GroupID = g.Id }).ToList()})
.ToList();
}
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 добавленной группы
}
public bool UpdateGroupById(int groupID, GroupLocalEntity updatedGroup)
{
var existingGroup = _remoteDatabaseContext.Groups.FirstOrDefault(g => g.Id == groupID);
if (existingGroup == null)
return false;
existingGroup.Name = updatedGroup.Name;
_remoteDatabaseContext.SaveChanges();
return true;
}
public bool RemoveGroupById(int groupID)
{
var existingGroup = _remoteDatabaseContext.Groups.FirstOrDefault(g => g.Id == groupID);
if (existingGroup == null)
return false;
_remoteDatabaseContext.Groups.Remove(existingGroup);
_remoteDatabaseContext.SaveChanges();
return true;
}
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");
}
}
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;
_remoteDatabaseContext.SaveChanges();
return existingUser;
}
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;
}
}