using Jiaowu.Api.Domain.Academic; using Jiaowu.Api.Infrastructure.Persistence; using Microsoft.EntityFrameworkCore; namespace Jiaowu.Api.Infrastructure.Experiments; internal static class CentralizedExperimentConflictQuery { public static IQueryable TaskIdsForTeachers( AppDbContext db, IReadOnlyCollection teacherIds) => db.TeachingTaskTeachers.AsNoTracking() .WhereIn(teacherIds, x => x.TeacherId) .Select(x => x.TeachingTaskId); public static IQueryable TaskIdsForClasses( AppDbContext db, IReadOnlyCollection classIds) => db.TeachingTaskClasses.AsNoTracking() .WhereIn(classIds, x => x.AdministrativeClassId) .Select(x => x.TeachingTaskId); public static IQueryable ScheduleEntries( AppDbContext db, IReadOnlyCollection relatedTaskIds, Guid academicTermId, int dayOfWeek, int week, int startPeriod, int periodCount) => db.ScheduleEntries.AsNoTracking() .Where(x => x.SchedulePlan!.Status == SchedulePlanStatus.Published && x.SchedulePlan.AcademicTermId == academicTermId && x.DayOfWeek == dayOfWeek && x.StartWeek <= week && x.EndWeek >= week && x.StartPeriod < startPeriod + periodCount && startPeriod < x.StartPeriod + x.PeriodCount) .WhereIn(relatedTaskIds, x => x.TeachingTaskId); public static IQueryable ExperimentSessions( AppDbContext db, IReadOnlyCollection relatedTaskIds, DateOnly date, int startPeriod, int periodCount) => db.ExperimentSessions.AsNoTracking() .Where(x => x.Status == ExperimentSessionStatus.Scheduled && x.SessionDate == date && x.StartPeriod < startPeriod + periodCount && startPeriod < x.StartPeriod + x.PeriodCount && x.ExperimentProject!.ArrangementMode == ExperimentArrangementMode.Centralized) .WhereIn( relatedTaskIds, x => x.ExperimentProject!.TeachingTaskId); }