public async Task <ActionResult <LocomotiveModel> > Update(int id, LocomotiveModel model) { var locomotive = await _locomotiveRepository.GetByIdAsync(id); if (locomotive == null) { return(NotFound()); } // TODO: Validate locomotive type and parent if (!ModelState.IsValid) { return(BadRequest(ModelState)); } // Road, road number and slug cannot be updated - create new locomotive record locomotive.Notes = model.Notes; locomotive.ModelNumber = model.ModelNumber; locomotive.SerialNumber = model.SerialNumber; locomotive.FrameNumber = model.FrameNumber; locomotive.BuiltAs = model.BuiltAs; locomotive.BuildMonth = model.BuildMonth; locomotive.BuildYear = model.BuildYear; await _locomotiveRepository.UpdateAsync(locomotive); return(Ok(model)); }
public async Task <ActionResult <LocomotiveModel> > Create(LocomotiveModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var road = await _roadService.GetById(model.RoadId); if (road == null) { ModelState.AddModelError(nameof(model.RoadId), "Road is not valid"); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } // TODO: Validate road number (numbers only) road + road number combo var locomotive = new Locomotive { RoadId = road.Id, RoadNumber = model.RoadNumber, ReportingMarks = $"{road.ReportingMarks} {model.RoadNumber}", Notes = model.Notes, // Slug is generated below ModelNumber = model.ModelNumber, SerialNumber = model.SerialNumber, FrameNumber = model.FrameNumber, BuiltAs = model.BuiltAs, BuildMonth = model.BuildMonth, BuildYear = model.BuildYear }; locomotive.Slug = locomotive.ReportingMarks.Slugify(); await _locomotiveRepository.CreateAsync(locomotive); // Re-fetch the locomotive to make sure the model is fully hydrated locomotive = await _locomotiveRepository.GetByIdAsync(locomotive.Id); model = _mapper.Map <LocomotiveModel>(locomotive); return(CreatedAtAction(nameof(GetById), new { id = locomotive.Id }, model)); }