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) )); }
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()); }