using Demo.Data.LocalData; using Demo.Data.RemoteData.RemoteDataBase; using Demo.Data.RemoteData.RemoteDataBase.DAO; using Demo.Domain.Models; namespace Demo.Data.Repository { public class SQLPresenceRepositoryImpl : IPresenceRepository { private readonly RemoteDatabaseContext _remoteDatabaseContext; public SQLPresenceRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext){ _remoteDatabaseContext = remoteDatabaseContext; GetAllPresence = _remoteDatabaseContext.PresenceDaos.Select(x => new PresenceLocalEntity{UserGuid = x.UserGuid, Date = x.Date, LessonNumber = x.LessonNumber, IsAttedance = x.IsAttedance}).ToList(); } public List GetAllPresence = new List{}; public List GetAllPresences(){ return _remoteDatabaseContext.PresenceDaos.Select(x => new PresenceLocalEntity{UserGuid = x.UserGuid, Date = x.Date, LessonNumber = x.LessonNumber, IsAttedance = x.IsAttedance}).ToList(); } public bool DeletePresence(){ var allRecords = _remoteDatabaseContext.PresenceDaos.ToList(); _remoteDatabaseContext.PresenceDaos.RemoveRange(allRecords); _remoteDatabaseContext.SaveChanges(); if (allRecords.Count == 0) { return false; } return true; } public bool DeletePresenceByGroup(int groupID){ var allRecords = _remoteDatabaseContext.PresenceDaos.Where(x => x.userDAO.GroupID == groupID).ToList(); _remoteDatabaseContext.PresenceDaos.RemoveRange(allRecords); _remoteDatabaseContext.SaveChanges(); if (allRecords.Count == 0) { return false; } return true; } public bool DeletePresenceByRange(DateOnly start, DateOnly end) { var allRecords = _remoteDatabaseContext.PresenceDaos.Where(x => x.Date >= start && x.Date <= end).ToList(); _remoteDatabaseContext.PresenceDaos.RemoveRange(allRecords); _remoteDatabaseContext.SaveChanges(); if (allRecords.Count == 0) { return false; } return true; } public bool DeletePresenceByUser(Guid userGuid){ var allRecords = _remoteDatabaseContext.PresenceDaos.Where(x => x.userDAO.Guid == userGuid).ToList(); _remoteDatabaseContext.PresenceDaos.RemoveRange(allRecords); _remoteDatabaseContext.SaveChanges(); if (allRecords.Count == 0) { return false; } return true; } public List GeneratePresence(List presenceLocalEntities) { var presences = presenceLocalEntities.Select(x => new PresenceDAO { UserGuid = x.UserGuid, IsAttedance = x.IsAttedance, LessonNumber = x.LessonNumber, Date = x.Date, userDAO = _remoteDatabaseContext.Users.FirstOrDefault(u => u.Guid == x.UserGuid) }).ToList(); _remoteDatabaseContext.PresenceDaos.AddRange(presences); _remoteDatabaseContext.SaveChanges(); return presenceLocalEntities; } public void IsAttedance(int firstLesson, int lastLesson, DateOnly date, Guid UserGuid){ var presencesToUpdate = _remoteDatabaseContext.PresenceDaos .Where(x => x.LessonNumber >= firstLesson && x.LessonNumber <= lastLesson && x.Date == date && x.UserGuid == UserGuid) .ToList(); foreach(var presence in presencesToUpdate){ presence.IsAttedance = false; } _remoteDatabaseContext.SaveChanges(); } } }