public async Task <ActionResult <FilmModel> > UpdateFilm(string filmName, FilmModel model) { try { var directorModelValidationResult = ModelsValidator.ValidateDirectorModel(model); if (!directorModelValidationResult.Item1) { return(BadRequest(directorModelValidationResult.Item2)); } var actorsModelValidationResult = ModelsValidator.ValidateActorModels(model); if (!actorsModelValidationResult.Item1) { return(BadRequest(actorsModelValidationResult.Item2)); } var film = await _repository.GetFilmByTitleAsync(filmName); if (film == null) { return(BadRequest("Film doesn't exist in db please add film with post method /api/films")); } _mapper.Map(model, film); var updateDirectorResult = await UpdateDirectorAsync(film); if (!updateDirectorResult.Item1) { return(BadRequest(updateDirectorResult.Item2)); } var updateCastResult = await UpdateCastAsync(film); if (!updateCastResult.Item1) { return(BadRequest(updateCastResult.Item2)); } if (await _repository.SaveChangesAsync()) { film = await _repository.GetFilmByTitleAsync(film.Title, true, true); return(_mapper.Map <FilmModel>(film)); } return(StatusCode(StatusCodes.Status500InternalServerError, "It looks like no changes were made")); } catch (Exception) { return(StatusCode(StatusCodes.Status500InternalServerError, "Database failure")); } }
public async Task <ActionResult <FilmModel> > Post(FilmModel model) { try { if (model.Cast != null && model.Cast.Count() > 0) { return(BadRequest("Please add film first. Update films cast with updatefilm method")); } var directorModelValidationResult = ModelsValidator.ValidateDirectorModel(model); if (!directorModelValidationResult.Item1) { return(BadRequest(directorModelValidationResult.Item2)); } var actorsModelValidationResult = ModelsValidator.ValidateActorModels(model); if (!actorsModelValidationResult.Item1) { return(BadRequest(actorsModelValidationResult.Item2)); } var film = await _repository.GetFilmByTitleAsync(model.Title); if (film != null) { return(BadRequest("There is a film with same name")); } film = _mapper.Map <Film>(model); var updateDirectorResult = await UpdateDirectorAsync(film); if (!updateDirectorResult.Item1) { return(BadRequest(updateDirectorResult.Item2)); } var updateCastResult = await UpdateCastAsync(film); if (!updateCastResult.Item1) { return(BadRequest(updateCastResult.Item2)); } _repository.Add(film); if (await _repository.SaveChangesAsync()) { film = await _repository.GetFilmByTitleAsync(model.Title, true, true); return(Created($"/api/films/{model.Title}", _mapper.Map <FilmModel>(film))); } return(StatusCode(StatusCodes.Status500InternalServerError, "It looks like no changes were made")); } catch (Exception) { return(StatusCode(StatusCodes.Status500InternalServerError, "Database failure")); } }