예제 #1
0
        public ActionResult PatchSite(Guid terminalId, Guid dispenserId, Guid fuelTypeId, Guid tankId, [FromBody] JsonPatchDocument <TankForUpdateDto> patchDocument)
        {
            TankResourceParameters tankResourceParameters = new TankResourceParameters();

            if (terminalId == Guid.Empty || dispenserId == Guid.Empty || fuelTypeId == Guid.Empty || tankId == Guid.Empty)
            {
                return(BadRequest());
            }

            if (patchDocument == null)
            {
                return(BadRequest());
            }

            if (!_tankRepository.TankExists(tankId))
            {
                return(NotFound());
            }

            tankResourceParameters.TermimalId  = terminalId;
            tankResourceParameters.DispenserId = dispenserId;
            tankResourceParameters.FuelTypeId  = fuelTypeId;

            var siteFromRepo = _tankRepository.GetTank(tankResourceParameters, tankId);

            if (siteFromRepo == null)
            {
                var tankDto = new TankForUpdateDto();
                patchDocument.ApplyTo(tankDto, ModelState);

                if (!TryValidateModel(tankDto))
                {
                    return(ValidationProblem(ModelState));
                }

                var tankToAdd = _mapper.Map <Entities.Tank>(tankDto);
                tankToAdd.TerminalId  = terminalId;
                tankToAdd.DispenserId = dispenserId;
                tankToAdd.FuelTypeId  = fuelTypeId;


                _tankRepository.AddTank(tankToAdd, tankId);

                _tankRepository.Save();

                var siteToReturn = _mapper.Map <SiteDto>(siteToAdd);

                return(CreatedAtRoute("GetSite",
                                      new { siteId }, siteToReturn));
            }

            var siteToPatch = _mapper.Map <SiteForUpdateDto>(siteFromRepo);

            patchDocument.ApplyTo(siteToPatch);

            if (!TryValidateModel(siteToPatch))
            {
                return(ValidationProblem(ModelState));
            }

            _mapper.Map(siteToPatch, siteFromRepo);

            _siteRepository.UpdateSite(siteFromRepo);

            _siteRepository.Save();

            return(NoContent());
        }