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;
     }
 }