pr1/Demo/Data/Repository/SQLPresenceRepositoryImpl.cs
2024-11-17 19:24:01 +03:00

107 lines
5.5 KiB
C#
Raw Permalink 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 Demo.Data.RemoteData.RemoteDataBase;
using Demo.Data.RemoteData.RemoteDataBase.DAO;
using Demo.domain.Models;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo.Data.Repository
{
public class SQLPresenceRepositoryImpl : IPresenceRepository
{
private readonly RemoteDatabaseContext _remoteDatabaseContext;
public SQLPresenceRepositoryImpl(RemoteDatabaseContext remoteDatabaseContext)
{
_remoteDatabaseContext = remoteDatabaseContext;
}
public void SavePresence(List<PresenceLocalEntity> presences)
{
_remoteDatabaseContext.PresenceDaos.AddRange(presences.Select(it => new PresenceDao
{
Date = DateOnly.FromDateTime(it.Date), // преобразуем в DateOnly
IsAttedance = it.IsAttedance, // статус посещаемости
LessonNumber = it.LessonNumber, // номер урока
UserGuid = it.UserGuid // уникальный id пользователя
}));
// Сохраняем изменения в бд
_remoteDatabaseContext.SaveChanges();
}
// Метод добавления присутствия в бд
public void AddPresence(PresenceLocalEntity presence)
{
// Проверяем, что переданный объект не равен null
if (presence == null) throw new ArgumentNullException(nameof(presence));
// Создаем новый объект PresenceDao и заполняем его данными
var newPresence = new PresenceDao
{
Date = DateOnly.FromDateTime(presence.Date), // преобразуем в DateOnly
UserGuid = presence.UserGuid, // уникальный id пользователя
LessonNumber = presence.LessonNumber, // номер урока
IsAttedance = presence.IsAttedance // статус посещаемости
};
// Добавляем новое присутствие
_remoteDatabaseContext.PresenceDaos.Add(newPresence);
// Сохраняем изменения в бд
_remoteDatabaseContext.SaveChanges();
}
// Метод получения списка присутствий по id группы
public List<PresenceLocalEntity> GetPresenceByGroup(int groupId)
{
return _remoteDatabaseContext.PresenceDaos
.Where(p => p.UserDao != null && p.UserDao.GroupID == groupId) // Проверка на null
.Select(p => new PresenceLocalEntity
{
Date = p.Date.ToDateTime(TimeOnly.MinValue), //преобразуем обратно в DateTime
UserGuid = p.UserGuid, // уникальный id пользователя
LessonNumber = p.LessonNumber, // номер урока
IsAttedance = p.IsAttedance // статус посещаемости
})
.ToList(); // Преобразуем результат в список
}
// Метод получения присутствий по id группы и дате
public List<PresenceLocalEntity> GetPresenceByGroupAndDate(int groupId, DateTime date)
{
return _remoteDatabaseContext.PresenceDaos
.Where(p => p.UserDao != null && p.UserDao.GroupID == groupId && p.Date == DateOnly.FromDateTime(date))
.Select(p => new PresenceLocalEntity
{
Date = p.Date.ToDateTime(TimeOnly.MinValue), // преобразуем в DateTime
UserGuid = p.UserGuid, // уникальный id пользователя
LessonNumber = p.LessonNumber, // номер урока
IsAttedance = p.IsAttedance // статус посещаемости
})
.ToList(); // Преобразуем результат в список
}
// Метод пометки пользователя как отсутствующего
public void MarkUserAsAbsent(Guid userGuid, int groupId, int firstLessonNumber, int lastLessonNumber)
{
// Проходим по всем номерам уроков
foreach (var lesson in Enumerable.Range(firstLessonNumber, lastLessonNumber - firstLessonNumber + 1))
{
// Ищем присутствие пользователя по его id и номеру урока
var presence = _remoteDatabaseContext.PresenceDaos.FirstOrDefault(p =>
p.UserGuid == userGuid &&
p.UserDao != null && p.UserDao.GroupID == groupId && // Проверка на null
p.LessonNumber == lesson);
// Если присутствие не найдено, помечаем его как отсутствующее
if (presence != null)
{
presence.IsAttedance = false;
}
}
// Сохраняем изменения в базе данных после обновления статуса присутствия
_remoteDatabaseContext.SaveChanges();
}
}
}