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