示例#1
0
        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));
        }
示例#2
0
        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));
        }