public async Task <IActionResult> Edit(int id)
        {
            var userId = await _identityService.GetUserIdByNameAsync(User.Identity.Name);

            var animalCommand = new GetAnimalQuery
            {
                Id          = id,
                UserId      = userId,
                AnotherUser = false
            };

            var model = await _mediator.Send(animalCommand);

            if (model == null)
            {
                return(RedirectToAction("Index", "Profile"));
            }

            var animalViewModel = new AnimalViewModel
            {
                Id       = model.Id,
                UserId   = model.UserId,
                Nickname = model.Nickname,
                Passport = model.Passport,
                Kind     = model.Kind,
                Breed    = model.Breed,
                Features = model.Features,
                IsPublic = model.IsPublic
            };

            return(View(animalViewModel));
        }
        /// <summary>
        /// Страница для получения информации о выбранном животном.
        /// </summary>
        /// <param name="id">Идентификатор.</param>
        /// <returns>Определенное представление.</returns>
        public async Task <IActionResult> Info(int id)
        {
            var userId = await _identityService.GetUserIdByNameAsync(User.Identity.Name);

            var animalQuery = new GetAnimalQuery
            {
                Id          = id,
                UserId      = userId,
                AnotherUser = false
            };

            var userAnimal = await _mediator.Send(animalQuery);

            if (userAnimal == null)
            {
                return(RedirectToAction("Index", "Profile"));
            }

            var qrQuery = new GetQRCodeQuery
            {
                AnimalId = userAnimal.Id
            };

            QRCodeDTO qrCode = await _mediator.Send(qrQuery);

            var code = _QRCodeGeneratorService.CreateQRCode(qrCode.Code);

            var animalViewModel = new AnimalViewModel
            {
                Id        = userAnimal.Id,
                UserId    = userAnimal.UserId,
                Kind      = userAnimal.Kind,
                Breed     = userAnimal.Breed,
                Gender    = userAnimal.Gender.ToString(),
                Passport  = userAnimal.Passport,
                BirthDate = userAnimal.BirthDate,
                Nickname  = userAnimal.Nickname,
                Features  = userAnimal.Features,
                IsPublic  = userAnimal.IsPublic,
                Link      = qrCode.Code,
                Code      = code
            };

            _logger.LogInformation($"For {User.Identity.Name} successfully showed animal with id: {userAnimal.Id}.");

            return(View(animalViewModel));
        }
        public async Task Handle_WhenIsNotAnotherUser_ReturnsCorrectAnimalDTO()
        {
            // Arrange
            var animal = new AnimalDTO
            {
                Id        = 1,
                UserId    = "QWERTY1234567890_One",
                Kind      = "Kind_One",
                Breed     = "Breed_One",
                Gender    = GenderTypes.None,
                Passport  = "1234567890QWERTY_One",
                BirthDate = new DateTime(2001, 01, 01),
                Nickname  = "Nickname_One",
                Features  = "Features_One",
                IsPublic  = true
            };

            var query = new GetAnimalQuery
            {
                Id          = 1,
                UserId      = string.Empty,
                AnotherUser = true
            };

            // Act
            var handler = new GetAnimalQuery.GetAnimalQueryHandler(Context, Mapper);

            var result = await handler.Handle(query, CancellationToken.None);

            // Assert
            result.ShouldBeOfType <AnimalDTO>();

            result.ShouldNotBeNull();

            result.Id.ShouldBe(animal.Id);
            result.UserId.ShouldBe(animal.UserId);
            result.Kind.ShouldBe(animal.Kind);
            result.Breed.ShouldBe(animal.Breed);
            result.Gender.ShouldBe(animal.Gender);
            result.Passport.ShouldBe(animal.Passport);
            result.BirthDate.ShouldBe(animal.BirthDate);
            result.Nickname.ShouldBe(animal.Nickname);
            result.Features.ShouldBe(animal.Features);
            result.IsPublic.ShouldBe(animal.IsPublic);
        }
        public async Task Handle_GivenInvalidId_ReturnsCorrectAnimalDTO()
        {
            // Arrange
            var query = new GetAnimalQuery
            {
                Id          = 99,
                UserId      = string.Empty,
                AnotherUser = true
            };

            // Act
            var handler = new GetAnimalQuery.GetAnimalQueryHandler(Context, Mapper);

            var result = await handler.Handle(query, CancellationToken.None);

            // Assert
            result.ShouldBeNull();
        }
        public async Task <IActionResult> Public(int id)
        {
            var animalQuery = new GetAnimalQuery
            {
                Id          = id,
                AnotherUser = true
            };

            var userAnimal = await _mediator.Send(animalQuery);

            if (userAnimal == null || !userAnimal.IsPublic)
            {
                return(View("PermissionDenied"));
            }

            var qrQuery = new GetQRCodeQuery
            {
                AnimalId = userAnimal.Id
            };

            QRCodeDTO qrCodeText = await _mediator.Send(qrQuery);

            var code = _QRCodeGeneratorService.CreateQRCode(qrCodeText.Code);

            var animalViewModel = new AnimalViewModel
            {
                Id        = userAnimal.Id,
                UserId    = userAnimal.UserId,
                Kind      = userAnimal.Kind,
                Breed     = userAnimal.Breed,
                Gender    = userAnimal.Gender.ToString(),
                Passport  = userAnimal.Passport,
                BirthDate = userAnimal.BirthDate,
                Nickname  = userAnimal.Nickname,
                Features  = userAnimal.Features,
                IsPublic  = userAnimal.IsPublic,
                Code      = code
            };

            _logger.LogInformation($"Animal with id: {userAnimal.Id}, successfully showed on public request.");

            return(View(animalViewModel));
        }
        public async Task Animal_GetQuery_Success()
        {
            //Arrange
            GetAnimalQuery query = new GetAnimalQuery();

            _animalRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <Animal, bool> > >()))
            .ReturnsAsync(new Animal()
            {
                AnimalId   = 1,
                AnimalName = "Test"
            });

            GetAnimalQueryHandler handler = new GetAnimalQueryHandler(_animalRepository.Object);

            //Act
            var x = await handler.Handle(query, new System.Threading.CancellationToken());

            //Asset
            Assert.That(x.Success, Is.True);
            Assert.That(x.Data.AnimalId, Is.EqualTo(1));
        }
        public async Task <GetAnimalByIdResponse> Handle(GetAnimalByIdRequest request, CancellationToken cancellationToken)
        {
            var query = new GetAnimalQuery()
            {
                Id = request.AnimalId
            };
            var animal = await _queryExecutor.Execute(query);

            if (animal == null)
            {
                return(new GetAnimalByIdResponse()
                {
                    Error = new ErrorModel(ErrorType.NotFound)
                });
            }

            var mappedAnimal = _mapper.Map <Domain.Models.Animal>(animal);

            return(new GetAnimalByIdResponse()
            {
                Data = mappedAnimal
            });
        }
Exemple #8
0
 public async Task <Animal> GetAnimal(
     [FromRoute] GetAnimalQuery query)
 {
     return(await Mediator.Send(query));
 }