Presence.Desktop/data/Repository/SQLGroupRepositoryImpl.cs
2024-12-20 11:49:17 +03:00

159 lines
5.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.RemoteData.RemoteDataBase;
using data.RemoteData.RemoteDataBase.DAO;
using DocumentFormat.OpenXml.Spreadsheet;
using Microsoft.EntityFrameworkCore;
namespace data.Repository
{
public class SQLGroupRepositoryImpl : IGroupRepository
{
private readonly RemoteDatabaseContext _remoteDatabaseContext;
public SQLGroupRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
{
_remoteDatabaseContext = remoteDatabaseContext;
}
// Метод для добавления новой группы
public bool AddGroup(GroupDao newGroup)
{
var groupDao = new GroupDao
{
Name = newGroup.Name
};
_remoteDatabaseContext.Groups.Add(groupDao);
_remoteDatabaseContext.SaveChanges();
return true;
}
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.UserId == student.UserId))
{
throw new ArgumentException($"Студент с GUID {student.UserId} уже добавлен в эту группу.");
}
// Создаём нового студента и добавляем его в контекст
_remoteDatabaseContext.Users.Add(student); // Добавляем нового студента в Users
// Привязываем студента к группе
student.GroupId = group.Id; // Устанавливаем внешний ключ (или ссылку на группу)
// Сохраняем изменения в контексте
_remoteDatabaseContext.SaveChanges();
}
else
{
throw new ArgumentException($"Группа с ID {groupId} не найдена.");
}
}
// Метод для получения группы по ID
public GroupDao GetGroupById(int groupId)
{
var groupDao = _remoteDatabaseContext.Groups
.Include(g => g.Users)
.FirstOrDefault(g => g.Id == groupId);
if (groupDao == null) return null;
return new GroupDao
{
Id = groupDao.Id,
Name = groupDao.Name,
Users = groupDao.Users.Select(u => new UserDao
{
UserId = u.UserId,
FIO = u.FIO
}).ToList()
};
}
// Метод для получения всех групп
public List<GroupDao> GetAllGroups()
{
return _remoteDatabaseContext.Groups
.Include(g => g.Users)
.Select(g => new GroupDao
{
Id = g.Id,
Name = g.Name,
Users = g.Users.Select(u => new UserDao
{
UserId = u.UserId,
FIO = u.FIO,
GroupId = g.Id // Указываем только Id группы, чтобы избежать вложенной рекурсии
}).ToList()
})
.ToList();
}
// Метод для обновления группы по ID
public bool UpdateGroupById(int groupId, GroupDao updatedGroup)
{
var groupDao = _remoteDatabaseContext.Groups
.Include(g => g.Users)
.FirstOrDefault(g => g.Id == groupId);
if (groupDao == null) return false;
groupDao.Name = updatedGroup.Name;
// Пример обновления списка пользователей
groupDao.Users = updatedGroup.Users.Select(user => new UserDao
{
UserId = user.UserId,
FIO = user.FIO,
GroupId = user.GroupId
}).ToList();
_remoteDatabaseContext.SaveChanges();
return true;
}
// Метод для удаления группы по ID
public bool RemoveGroupById(int groupId)
{
var groupDao = _remoteDatabaseContext.Groups.Find(groupId);
if (groupDao == null) return false;
_remoteDatabaseContext.Groups.Remove(groupDao);
_remoteDatabaseContext.SaveChanges();
return true;
}
public bool AddGroup(string Name)
{
var groupDao = new GroupDao
{
Name = Name
};
_remoteDatabaseContext.Groups.Add(groupDao);
_remoteDatabaseContext.SaveChanges();
return true;
}
}
}