| | 1 | | namespace Syki.Back.Features.Academic.CreateEnrollmentPeriod; |
| | 2 | |
|
| 144 | 3 | | public class CreateEnrollmentPeriodService(SykiDbContext ctx, HybridCache cache) : IAcademicService |
| | 4 | | { |
| | 5 | | public async Task<OneOf<EnrollmentPeriodOut, SykiError>> Create(Guid institutionId, CreateEnrollmentPeriodIn data) |
| | 6 | | { |
| 144 | 7 | | var academicPeriodExists = await ctx.AcademicPeriodExists(institutionId, data.Id); |
| 146 | 8 | | if (!academicPeriodExists) return new AcademicPeriodNotFound(); |
| | 9 | |
|
| 142 | 10 | | var enrollmentPeriodExists = await ctx.EnrollmentPeriods.AnyAsync(x => x.InstitutionId == institutionId && x.Id |
| 144 | 11 | | if (enrollmentPeriodExists) return new EnrollmentPeriodAlreadyExists(); |
| | 12 | |
|
| 140 | 13 | | var result = EnrollmentPeriod.New(data.Id, institutionId, data.StartAt, data.EndAt); |
| | 14 | |
|
| 144 | 15 | | if (result.IsError) return result.Error; |
| | 16 | |
|
| 136 | 17 | | var period = result.Success; |
| 136 | 18 | | ctx.Add(period); |
| 136 | 19 | | await ctx.SaveChangesAsync(); |
| | 20 | |
|
| 136 | 21 | | await cache.RemoveAsync($"enrollmentPeriods:{institutionId}"); |
| | 22 | |
|
| 136 | 23 | | return period.ToOut(); |
| 144 | 24 | | } |
| | 25 | |
|
| | 26 | | public async Task CreateWithThrowOnError(Guid institutionId, CreateEnrollmentPeriodIn data) |
| | 27 | | { |
| 0 | 28 | | (await Create(institutionId, data)).ThrowOnError(); |
| 0 | 29 | | } |
| | 30 | | } |