public async Task <BuyIntentResult> RegisterBuyIntent(BuyIntentRequest request)
        {
            request.DateIntent = DateTime.UtcNow;

            BuyIntentResult response = await AppRepository.Purchase.InsertBuyIntent(request);

            return(response);
        }
        public async Task <IHttpActionResult> InsertBuyIntent(BuyIntentApiRequest request)
        {
            request.UserId = (await GetUser()).Id;

            BuyIntentRequest buyIntentRequest = Mapper.Map <BuyIntentRequest>(request);

            BuyIntentResult buyIntentResult = await AppBusiness.Purchase.RegisterBuyIntent(buyIntentRequest);

            BuyIntentApiResult response = Mapper.Map <BuyIntentApiResult>(buyIntentResult);

            return(Ok(response));
        }
        public async Task <UserResult> ConfirmBuyIntent(BuyIntentRequest request)
        {
            UserResult response = null;

            BuyIntentResult actualIntent = await AppRepository.Purchase.GetById(request.Id);

            if (actualIntent != null)
            {
                request = Mapper.Map <BuyIntentRequest>(actualIntent);

                await AppRepository.Purchase.ConfirmBuyIntent(request);

                response = await AppBusiness.User.GetById(actualIntent.UserId);

                if (response != null)
                {
                    AvailableTrapResult availableTrap = await AppBusiness.Purchase.GetAvailableTrapById(actualIntent.AvailableTrapId);

                    if (availableTrap != null)
                    {
                        TrapResult trap = await AppBusiness.Trap.GetByNameKey(availableTrap.NameKey);

                        UserTrapRequest userTrap = new UserTrapRequest();

                        userTrap.TrapId = trap.Id.ToString();
                        userTrap.Amount = availableTrap.Amount;

                        UserRequest userRequest = Mapper.Map <UserRequest>(response);

                        AppBusiness.User.AddTrap(userRequest, userTrap);

                        await AppRepository.User.UpdateTraps(userRequest.Id, userRequest.Traps);

                        response = await AppBusiness.User.GetById(userRequest.Id);
                    }
                }
            }

            return(response);
        }
        private BuyIntentResult Parse(BuyIntent request)
        {
            if (request != null)
            {
                BuyIntentResult response = new BuyIntentResult();

                response.Id = request.Id.ToString();
                response.AvailableTrapId = request.AvailableTrap.Id.ToString();
                response.DateIntent      = request.DateIntent;
                response.DateResult      = request.DateResult;
                response.Processed       = request.Processed;
                response.Realized        = request.Realized;
                response.StoreKey        = request.StoreKey;
                response.UserId          = request.User.Id.ToString();

                return(response);
            }
            else
            {
                return(null);
            }
        }