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