Beispiel #1
0
        public async Task <bool> Handle(MigratePetRequest message, IOutboundPort <BlankResponse> outputPort)
        {
            // load user - verify they have access to both env and pet specified.
            var user = await _userStore.GetUserById(message.UserId);

            if (user == null)
            {
                return(false);
            }

            await _userStore.LoadEnvironments(user);

            await _userStore.LoadPets(user);

            var canProceed =
                user.Pets.Select(p => p.Id).Contains(message.PetId) &&
                user.Environments.Select(e => e.Id).Contains(message.EnvId);

            if (!canProceed)
            {
                return(false);
            }

            var pet       = user.Pets.First(p => p.Id == message.PetId);
            var targetEnv = user.Environments.First(env => env.Id == message.EnvId);
            await _petStore.MigratePet(pet, targetEnv);

            return(true);
        }
Beispiel #2
0
        public async Task <IActionResult> MigratePet(int id, Guid toEnv)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var request = new MigratePetRequest
            {
                UserId = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                PetId  = id,
                EnvId  = toEnv
            };

            var port   = new BasicPresenter <BlankResponse>();
            var result = await _migratePetUseCase.Handle(request, port);

            return((result) ? Ok() : BadRequest());
        }