new_presence/data/Repository/PresenceRepositoryImpl.cs

73 lines
3.4 KiB
C#
Raw Normal View History

2024-11-16 08:29:24 +00:00
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;
}
}
}
}
}