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; } public void SavePresence(List presences) { foreach (var presence in presences) { var existing = _remoteDatabaseContext.PresenceDaos.FirstOrDefault(p => p.Date == DateOnly.FromDateTime(presence.Date) && p.UserGuid == presence.UserGuid && p.LessonNumber == presence.LessonNumber); if (existing == null) { var newPresence = new PresenceDao { Date = DateOnly.FromDateTime(presence.Date), UserGuid = presence.UserGuid, LessonNumber = presence.LessonNumber, IsAttedance = presence.IsAttedance, GroupId = presence.GroupId }; _remoteDatabaseContext.PresenceDaos.Add(newPresence); } else { existing.IsAttedance = presence.IsAttedance; } } } public void AddPresence(PresenceLocalEntity presence) { if (presence == null) throw new ArgumentNullException(nameof(presence)); var newPresence = new PresenceDao { Date = DateOnly.FromDateTime(presence.Date), UserGuid = presence.UserGuid, LessonNumber = presence.LessonNumber, IsAttedance = presence.IsAttedance, GroupId = presence.GroupId // Если у вас есть это свойство }; _remoteDatabaseContext.PresenceDaos.Add(newPresence); } public List GetPresenceByGroup(int groupId) { return _remoteDatabaseContext.PresenceDaos .Where(p => p.GroupId == groupId) .Select(p => new PresenceLocalEntity { Date = p.Date.ToDateTime(TimeOnly.MinValue), UserGuid = p.UserGuid, LessonNumber = p.LessonNumber, IsAttedance = p.IsAttedance, GroupId = p.GroupId }) .ToList(); } public List GetPresenceByGroupAndDate(int groupId, DateTime date) { return _remoteDatabaseContext.PresenceDaos .Where(p => p.GroupId == groupId && p.Date == DateOnly.FromDateTime(date)) .Select(p => new PresenceLocalEntity { Date = p.Date.ToDateTime(TimeOnly.MinValue), UserGuid = p.UserGuid, LessonNumber = p.LessonNumber, IsAttedance = p.IsAttedance, GroupId = p.GroupId }) .ToList(); } public void MarkUserAsAbsent(Guid userGuid, int groupId, int firstLessonNumber, int lastLessonNumber) { foreach (var lesson in Enumerable.Range(firstLessonNumber, lastLessonNumber - firstLessonNumber + 1)) { var presence = _remoteDatabaseContext.PresenceDaos.FirstOrDefault(p => p.UserGuid == userGuid && p.GroupId == groupId && p.LessonNumber == lesson); if (presence != null) { presence.IsAttedance = false; // Помечаем как отсутствующего } } } } }