new_presence/data/Repository/PresenceRepositoryImpl.cs
2024-11-16 11:29:24 +03:00

73 lines
3.4 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 data.RemoteData.DAO;
using domain.Models;
namespace data.Repository
{
public class PresenceRepositoryImpl
{
// Коллекция для хранения данных о посещаемости.
private readonly List<PresenceLocalEntity> _presences = new List<PresenceLocalEntity>();
// Метод для сохранения списка посещаемости.
public void SavePresence(List<PresenceLocalEntity> presences)
{
foreach (var presence in presences)
{
// Проверяем, существует ли уже запись о посещении для этого пользователя, урока и даты.
var existing = _presences.FirstOrDefault(p =>
p.Date == presence.Date &&
p.UserGuid == presence.UserGuid &&
p.LessonNumber == presence.LessonNumber);
if (existing == null)
{
// Если записи нет, добавляем новую.
_presences.Add(presence);
}
else
{
// Если запись уже существует, обновляем информацию о посещении.
existing.IsAttedance = presence.IsAttedance;
}
}
}
// Метод для добавления нового присутствия.
public void AddPresence(PresenceLocalEntity presence)
{
// Если передан null, выбрасываем исключение.
if (presence == null) throw new ArgumentNullException(nameof(presence));
// Добавляем новое присутствие в коллекцию.
_presences.Add(presence);
}
// Метод для получения списка посещаемости по группе.
public List<PresenceLocalEntity> GetPresenceByGroup(int groupId)
{
return _presences.Where(p => p.GroupId == groupId).ToList();
}
// Метод для получения посещаемости по группе и дате.
public List<PresenceLocalEntity> GetPresenceByGroupAndDate(int groupId, DateTime date)
{
return _presences.Where(p => p.GroupId == groupId && p.Date.Date == date.Date).ToList();
}
// Метод для пометки пользователя как отсутствующего на определённом интервале уроков.
public void MarkUserAsAbsent(Guid userGuid, int firstLessonNumber, int lastLessonNumber)
{
foreach (var lesson in Enumerable.Range(firstLessonNumber, lastLessonNumber - firstLessonNumber + 1))
{
// Находим присутствие для данного пользователя и урока.
var presence = _presences.FirstOrDefault(p => p.UserGuid == userGuid && p.LessonNumber == lesson);
if (presence != null)
{
// Если присутствие найдено, помечаем пользователя как отсутствующего.
presence.IsAttedance = false;
}
}
}
}
}