public async Task <IActionResult> PartialUpdateProgrammeAsync(string id,
                                                                      [FromBody] JsonPatchDocument <ProgrammeDto> patchProgramme)
        {
            try
            {
                var programmeFromDb = await _programmeRepository.FindByIdAsync(id);

                if (programmeFromDb == null)
                {
                    return(NotFound($"Programme {id} not found"));
                }

                var programmeToPatch = new ProgrammeDto
                {
                    Name        = programmeFromDb.Name,
                    Description = programmeFromDb.Description
                };

                patchProgramme.ApplyTo(programmeToPatch, ModelState);

                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                if (!TryValidateModel(patchProgramme))
                {
                    return(BadRequest(ModelState));
                }

                // Map all properties except Id
                programmeFromDb.Name        = programmeToPatch.Name;
                programmeFromDb.Description = programmeToPatch.Description;

                var result = _programmeRepository.Update(programmeFromDb);
                if (result == null)
                {
                    _logger.LogError($"Programme ${programmeFromDb.ProgrammeId} update failed.");
                    return(NotFound());
                }
                await _programmeRepository.SaveChangesAsync();
            }
            catch (DataAccessException e)
            {
                _logger.LogCritical(e, "Partial update failed.");
                return(BadRequest($"Update of programme {id} failed."));
            }
            return(NoContent());
        }
Example #2
0
        public IHttpActionResult CreateProgramme(ProgrammeDto programmeDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var programme = Mapper.Map <ProgrammeDto, Programme>(programmeDto);

            _context.Programmes.Add(programme);
            _context.SaveChanges();

            programmeDto.Id = programme.Id;

            return(Created(new Uri(Request.RequestUri + "/" + programme.Id), programmeDto));
        }
Example #3
0
        public void Put(int id, [FromBody] ProgrammeDto programmeDto)
        {
            if (!ModelState.IsValid)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            var programmeInDb = _context.Programmes.SingleOrDefault(p => p.Id == id);

            if (programmeInDb == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }

            Mapper.Map(programmeDto, programmeInDb);

            _context.SaveChanges();
        }
        public async Task <IActionResult> PutProgrammeAsync(string id,
                                                            [FromBody] ProgrammeDto programme)
        {
            if (id != programme.ProgrammeId)
            {
                _logger.LogWarning($"Put programme. Id {id} does not match {programme.ProgrammeId}.");
                return(BadRequest());
            }

            try
            {
                var programmeFromDb = await _programmeRepository.FindByIdAsync(id);

                if (programmeFromDb == null)
                {
                    _logger.LogWarning($"Get programme. Id {id} not found.");
                    return(NotFound($"Programme {id} not found"));
                }

                // Map all properties except Id
                programmeFromDb.Name        = programme.Name;
                programmeFromDb.Description = programme.Description;

                var result = _programmeRepository.Update(programmeFromDb);
                if (result == null)
                {
                    _logger.LogWarning($"Put programme. Id {id} not found.");
                    return(NotFound());
                }
                await _programmeRepository.SaveChangesAsync();
            }
            catch (DataAccessException e)
            {
                _logger.LogCritical(e, "Update failed.");
                return(BadRequest($"Update of programme {id} failed."));
            }
            return(NoContent());
        }
        public async Task <ActionResult <ProgrammeDto> > PostProgrammeAsync([FromBody] ProgrammeDto programme)
        {
            if (programme.Description == programme.Name)
            {
                // Business rule - Name and Description must be different
                ModelState.AddModelError(programme.Description,
                                         $"Name: {programme.Name} and description: {programme.Description} should be different.");
            }
            if (!ModelState.IsValid)
            {
                _logger.LogError("Partial update failed.");
                return(BadRequest(ModelState));
            }

            var programmeToDb = _mapper.Map <Programme>(programme);

            try
            {
                var addedProgramme = await _programmeRepository.AddAsync(programmeToDb);

                await _programmeRepository.SaveChangesAsync();

                var programmeToReturn = _mapper.Map <ProgrammeDto>(addedProgramme);

                return(CreatedAtAction("GetProgramme", new { id = addedProgramme.ProgrammeId }, programmeToReturn));
            }
            catch (DataAccessException e)
            {
                _logger.LogError(e, "Post programme failed.");
                return(BadRequest("Post programme failed."));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Post programme failed.");
                return(BadRequest("Post programme failed."));
            }
        }