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 GetAllGroup() { return _remoteDatabaseContext.Groups .Select(g => new GroupLocalEntity { Id = g.Id, Name = g.Name }) .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 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; } }