public async Task <ActionResult <MammalDTO> > PutMammal(int mammalId, MammalDTO mammalDTO) { try { var oldMammal = await _repository.GetMammalById(mammalId); if (oldMammal == null) { return(NotFound($"Mammal with ID: {mammalId} does not exist")); } var newMammal = _mapper.Map(mammalDTO, oldMammal); _repository.Update(newMammal); if (await _repository.Save()) { return(NoContent()); } } catch (Exception e) { return(this.StatusCode(StatusCodes.Status500InternalServerError, $"Database failure: {e.Message}")); } return(BadRequest()); }
/// <summary> /// Overload 1, Use this method for your mainlinks. Eg CRUD, just add /// more links to your CRUD methods inside /// Wollter /// </summary> /// <param name="mammal"></param> /// <returns></returns> internal MammalDTO HateoasMainLinks(MammalDTO mammal) { MammalDTO mammalDto = mammal; mammalDto.Links.Add(UrlLink("all", "GetAll", null)); mammalDto.Links.Add(UrlLink("_self", "GetMammalAsync", new { id = mammalDto.MammalID })); mammalDto.Links.Add(UrlLink("_self", "GetMammalName", new { mammalName = mammalDto.Name })); return(mammalDto); }
public async void PostMammal_Should_SaveOneMammal() { // Arrange var profile = new MammalAPI.Configuration.Mapper(); var configuration = new MapperConfiguration(cfg => cfg.AddProfile(profile)); IMapper mapper = new Mapper(configuration); List <Mammal> mammals = new List <Mammal>(); //Mock Repo var mammalRepo = new Mock <IMammalRepository>(); mammalRepo.Setup(r => r.Add <Mammal>(It.IsAny <Mammal>())); mammalRepo.Setup(r => r.GetAllMammals(It.IsAny <Boolean>(), It.IsAny <Boolean>())).Returns(Task.FromResult(mammals)); mammalRepo.Setup(r => r.Save()).Returns(Task.FromResult(true)); //Mock IActionDescriptorCollectionProvider var actions = new List <ActionDescriptor> { new ActionDescriptor { AttributeRouteInfo = new AttributeRouteInfo() { Template = "/test", }, RouteValues = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase) { { "action", "Test" }, { "controller", "Test" }, }, }, }; var mockDescriptorProvider = new Mock <IActionDescriptorCollectionProvider>(); mockDescriptorProvider.Setup(m => m.ActionDescriptors).Returns(new ActionDescriptorCollection(actions, 0)); //Setup new controller based on mocks var controller = new MammalsController(mammalRepo.Object, mapper, mockDescriptorProvider.Object); //Create new DTO var dto = new MammalDTO { Name = "test", MammalID = 1 }; // Act var result = await controller.PostMammal(dto); // Assert var r = result.Result as CreatedResult; var dtoResult = (MammalDTO)r.Value; Assert.Equal("test", dtoResult.Name); }
public async Task <ActionResult <MammalDTO> > PostMammal(MammalDTO mammalDTO) { try { var mappedEntity = _mapper.Map <Mammal>(mammalDTO); _repository.Add(mappedEntity); if (await _repository.Save()) { return(Created($"api/v1.0/mammals/{mappedEntity.MammalId}", _mapper.Map <MammalDTO>(mappedEntity))); } } catch (Exception e) { return(StatusCode(StatusCodes.Status500InternalServerError, $"Database Failure : {e.Message}")); } return(BadRequest()); }
public AnimalDTO ToAnimalDTO(Animal animal) { try { if (animal == null || !(animal is Mammal)) { throw new ArgumentException("Пустой объект или не подходящего типа!!!"); } var animalDTO = new MammalDTO(); animalDTO.Detachment = (animal as Mammal).Detachment; animalDTO.Family = animal.Family; animalDTO.Genus = animal.Genus; animalDTO.Species = animal.Species; return(animalDTO); } catch (ArgumentException) { throw; } }