public async Task CreateBlock(params CreateCurriculumBlockModel[] blockModels) { foreach (var blockModel in blockModels) { if (!blockModel.BandIds.Any()) { throw new InvalidDataException("Curriculum block must be assigned to at least one band."); } var block = new CurriculumBlock { Code = blockModel.BlockModel.Code, Description = blockModel.BlockModel.Description }; Guid academicYearId = Guid.Empty; for (var i = 0; i < blockModel.BandIds.Length; i++) { var band = await _bandRepository.GetById(blockModel.BandIds[i]); if (band == null) { throw new NotFoundException($"Curriculum band not found: {blockModel.BandIds[i]}."); } if (i == 0) { academicYearId = band.AcademicYearId; } else if (band.AcademicYearId != academicYearId) { throw new InvalidDataException("Curriculum blocks cannot span multiple academic years."); } block.BandAssignments.Add(new CurriculumBandBlockAssignment { BlockId = blockModel.BlockModel.Id, BandId = blockModel.BandIds[i] }); } if (!await _blockRepository.CheckUniqueCode(academicYearId, blockModel.BlockModel.Code)) { throw new InvalidDataException($"Curriculum block with code {blockModel.BlockModel.Code} already exists."); } _blockRepository.Create(block); } await _blockRepository.SaveChanges(); }
public CurriculumBlockModel(CurriculumBlock model) : base(model) { Code = model.Code; Description = model.Description; }