Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Xopabyteh committed Apr 10, 2024
1 parent ae40c4d commit 5aba870
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ public Task<List<StudentSubjectRegistration>> GetBySubjectAsync(

//public Task<List<StudentSubjectRegistration>> GetByStudentAndTimeAsync(int studentId, DayOfWeek day, ScheduleSlotInDay slot, CancellationToken cancellationToken = default);
Task<List<StudentSubjectRegistration>> GetRegistrationsByStudent(int studentId);
Task<int> CountMainRegistrationsForSubjectAsync(int subjectId);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using MensaGymnazium.IntranetGen3.Model;
using MensaGymnazium.IntranetGen3.Primitives;

namespace MensaGymnazium.IntranetGen3.DataLayer.Repositories;

Expand All @@ -13,4 +14,11 @@ public Task<List<StudentSubjectRegistration>> GetRegistrationsByStudent(int stud
{
return Data.Where(ssr => ssr.StudentId == studentId).ToListAsync();
}

public async Task<int> CountMainRegistrationsForSubjectAsync(int subjectId)
{
return await Data.CountAsync(
ssr => ssr.SubjectId == subjectId
&& ssr.RegistrationType == StudentRegistrationType.Main);
}
}
7 changes: 7 additions & 0 deletions Facades/SubjectRegistrationsManagerFacade.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,13 @@ public async Task CreateRegistrationAsync(StudentSubjectRegistrationCreateDto st
"Přihlášku není možné vytvořit. Je před, nebo již po termínu přihlašování");
}

// Verify subject isn't full
if (await subjectRegistrationsManagerService
.IsSubjectCapacityFullAsync(studentSubjectRegistrationCreateDto.SubjectId.Value))
{
throw new OperationFailedException("Předmět je již plný");
}

// Create registration
var currentUser = applicationAuthenticationService.GetCurrentUser();
Contract.Requires<SecurityException>(currentUser.StudentId is not null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,7 @@ public StudentSubjectRegistration CreateNewSubjectRegistration(
/// <param name="cancellationToken"></param>
/// <returns></returns>
public Task CancelRegistrationAsync(int registrationId, int callerStudentId, CancellationToken cancellationToken = default);

/// <returns>True, if the number of registrations for this subject reached the subject's capacity</returns>
Task<bool> IsSubjectCapacityFullAsync(int subjectId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,20 @@ internal sealed class SubjectRegistrationsManagerService : ISubjectRegistrations
private readonly IApplicationSettingsEntries applicationSettingsEntries;
private readonly IUnitOfWork unitOfWork;
private readonly IStudentSubjectRegistrationRepository studentSubjectRegistrationRepository;
private readonly ISubjectRepository subjectRepository;

public SubjectRegistrationsManagerService(
ITimeService timeService,
IApplicationSettingsEntries applicationSettingsEntries,
IUnitOfWork unitOfWork,
IStudentSubjectRegistrationRepository studentSubjectRegistrationRepository)
IStudentSubjectRegistrationRepository studentSubjectRegistrationRepository,
ISubjectRepository subjectRepository)
{
this.timeService = timeService;
this.applicationSettingsEntries = applicationSettingsEntries;
this.unitOfWork = unitOfWork;
this.studentSubjectRegistrationRepository = studentSubjectRegistrationRepository;
this.subjectRepository = subjectRepository;
}
public bool IsRegistrationPeriodActive()
{
Expand Down Expand Up @@ -70,4 +73,17 @@ public async Task CancelRegistrationAsync(int registrationId, int callerStudentI

unitOfWork.AddForDelete(studentSubjectRegistration);
}

public async Task<bool> IsSubjectCapacityFullAsync(int subjectId)
{
var subject = await subjectRepository.GetObjectAsync(subjectId);
if (subject.Capacity is null)
{
return false; // No capacity => no limit
}

var registrationsForSubject = await studentSubjectRegistrationRepository.CountMainRegistrationsForSubjectAsync(subjectId);

return registrationsForSubject >= subject.Capacity.Value;
}
}

0 comments on commit 5aba870

Please sign in to comment.