public async Task <ActionResult <CourseDefinitionDTO> > PostCourseDefinition(CourseDefinitionDTO courseDefinition)
        {
            var year = await _context.AcademicYears.FirstAsync(y => y.Id == courseDefinition.Year);

            if (year is null)
            {
                ModelState.AddModelError("year", "Invalid course year provided.");
                return(BadRequest(ModelState));
            }

            var courseDef = courseMapper.MapDefinitionDTO(courseDefinition, year);

            courseDef.Slug = slugService.TransformText(courseDef.Name);

            var existingDef = await _context.CourseDefinitions.FirstOrDefaultAsync(c => c.Slug == courseDef.Slug);

            if (!(existingDef is null))
            {
                ModelState.AddModelError("name", $"Failed to generate unique url slug. The generated slug ({courseDef.Slug}) is used by another course.");
                return(BadRequest(ModelState));
            }

            _context.CourseDefinitions.Add(courseDef);
            await _context.SaveChangesAsync();

            await cache.ClearCoursesRefCacheAsync();

            return(CreatedAtAction("GetCourseDefinition",
                                   new { id = courseDef.Id },
                                   courseMapper.MapDefinition(courseDef)
                                   ));
        }
Пример #2
0
        public CourseDefinition MapDefinitionDTO(CourseDefinitionDTO dto, AcademicYear year)
        {
            if (dto == null)
            {
                throw new ArgumentNullException(nameof(dto));
            }

            return(new CourseDefinition {
                Id = dto.Id ?? Guid.Empty,
                Year = year,
                Semester = dto.Semester,
                Name = dto.Name,
                Acronym = dto.Acronym
            });
        }
        public async Task <IActionResult> PutCourseDefinition(Guid id, CourseDefinitionDTO courseDefinition)
        {
            if (id != courseDefinition.Id)
            {
                return(BadRequest());
            }

            var year = await _context.AcademicYears.FirstAsync(y => y.Id == courseDefinition.Year);

            if (year is null)
            {
                ModelState.AddModelError("year", "Invalid course year provided.");
                return(BadRequest(ModelState));
            }

            var courseDef = courseMapper.MapDefinitionDTO(courseDefinition, year);

            courseDef.Slug = slugService.TransformText(courseDef.Name);

            var existingDef = await _context.CourseDefinitions.FirstOrDefaultAsync(c => c.Id != courseDef.Id && c.Slug == courseDef.Slug);

            if (!(existingDef is null))
            {
                ModelState.AddModelError("name", $"Failed to generate unique url slug from the course name. The generated slug ({courseDef.Slug}) is used by another course.");
                return(BadRequest(ModelState));
            }

            _context.Entry(courseDef).State = EntityState.Modified;

            try {
                await _context.SaveChangesAsync();

                await cache.ClearCourseDefinitionCacheAsync(id);
            } catch (DbUpdateConcurrencyException) {
                if (!CourseDefinitionExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }