Пример #1
0
        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();
        }
Пример #2
0
 public CurriculumBlockModel(CurriculumBlock model) : base(model)
 {
     Code        = model.Code;
     Description = model.Description;
 }