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

79 lines
3.6 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.DAO;
using Demo.domain.Models;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo.Data.Repository
{
public class PresenceRepositoryImpl : IPresenceRepository
{
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);
}
// Метод получения записей о присутствии по id группы
public List<PresenceLocalEntity> GetPresenceByGroup(int groupId)
{
// Фильтруем записи по id группы и возвращаем их в виде списка
return _presences.Where(p => p.GroupId == groupId).ToList();
}
// Метод получения записей о присутствии по id группы и дате
public List<PresenceLocalEntity> GetPresenceByGroupAndDate(int groupId, DateTime date)
{
// Фильтруем записи по id группы и дате, возвращая их в список
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;
}
}
}
}
}