Пример #1
0
        public void Run(APIGatewayProxyRequest request, APIGatewayProxyResponse response, FinanceUser user)
        {
            var model = JsonConvert.DeserializeObject <SignupModel>(request.Body);

            if (!model.AgreedToLicense)
            {
                throw new Exception("agreedToLicense must be true");
            }
            var provider = new AmazonCognitoIdentityProviderClient(new AnonymousAWSCredentials(), RegionEndpoint.USEast1);
            var userPool = new CognitoUserPool(Configuration.FINANCE_API_COGNITO_USER_POOL_ID, Configuration.FINANCE_API_COGNITO_CLIENT_ID, provider);
            var result   = userPool.SignUpAsync(
                model.Email.ToLower(),
                model.Password,
                new Dictionary <string, string>(),
                new Dictionary <string, string>());

            result.Wait();
            var userService = new UserService();

            userService.CreateUser(model.Email, model.AgreedToLicense, IpLookup.GetIp(request));
            var json = new JObject
            {
                { "status", "Your user has successfully been created. " +
                  $"Your user name is {model.Email}. " +
                  "A confirmation link has been sent to your email from [email protected]. " +
                  "You need to click the verification link in the email before you can login." }
            };

            response.Body = json.ToString();
        }
Пример #2
0
        public void Run(APIGatewayProxyRequest request, APIGatewayProxyResponse response, FinanceUser user)
        {
            var model = JsonConvert.DeserializeObject <PurchaseModel>(request.Body);

            if (!model.AgreedToBillingTerms)
            {
                throw new Exception("Must agree to billing terms");
            }
            Subscription subscription;

            try
            {
                subscription = Purchase(
                    user.Email,
                    model.CardCvc,
                    model.CardNumber,
                    model.CardExpirationMonth,
                    model.CardExpirationYear);
            }
            catch (StripeException stripeException)
            {
                response.Body = new JObject
                {
                    { "status", stripeException.Message }
                }.ToString();
                response.StatusCode = 400;
                return;
            }
            response.Body = JsonConvert.SerializeObject(subscription);
            var jsonPatch = new JObject
            {
                ["billingAgreement"] = JObject.FromObject(new BillingAgreement
                {
                    AgreedToBillingTerms = model.AgreedToBillingTerms,
                    Date      = DateTime.UtcNow.ToString("O"),
                    IpAddress = IpLookup.GetIp(request)
                })
            };

            new UserService().UpdateUser(user.Email, jsonPatch);
        }
Пример #3
0
        public void Run(APIGatewayProxyRequest request, APIGatewayProxyResponse response, FinanceUser user)
        {
            var receipt                 = JsonConvert.DeserializeObject <Receipt>(request.Body);
            var dbClient                = new AmazonDynamoDBClient();
            var logger                  = new ConsoleLogger();
            var receiptDbClient         = new DatabaseClient <ReceiptSaveResult>(dbClient, logger);
            var spotReservationDbClient = new DatabaseClient <SpotReservation>(dbClient, logger);
            var vendorDbClient          = new DatabaseClient <Vendor>(dbClient, logger);
            var qboClient               = new QuickBooksOnlineClient(PrivateAccounting.Constants.LakelandMiPuebloRealmId, new DatabaseClient <QuickBooksOnlineConnection>(dbClient, logger), logger);

            var allActiveCustomers = qboClient
                                     .QueryAll <Customer>("select * from customer")
                                     .ToDictionary(x => x.Id);
            var activeVendors = new ActiveVendorSearch()
                                .GetActiveVendors(allActiveCustomers, vendorDbClient)
                                .ToList();
            var spotClient           = new DatabaseClient <Spot>(dbClient, logger);
            var spotReservationCheck = new SpotReservationCheck(spotClient, spotReservationDbClient, activeVendors, allActiveCustomers);
            var validation           = new ReceiptValidation(spotReservationCheck).Validate(receipt).Result;

            if (validation.Any())
            {
                response.StatusCode = 400;
                response.Body       = new JObject {
                    { "error", JArray.FromObject(validation) }
                }.ToString();
                return;
            }
            var    taxRate        = new Tax().GetTaxRate(qboClient, PropertyRentalManagement.Constants.QUICKBOOKS_RENTAL_TAX_RATE);
            var    cardPayment    = new CardPayment(logger, Configuration.CLOVER_MI_PUEBLO_PRIVATE_TOKEN);
            var    receiptService = new ReceiptSave(receiptDbClient, qboClient, taxRate, spotReservationDbClient, logger, cardPayment);
            string customerId     = receipt.Customer.Id;

            if (string.IsNullOrWhiteSpace(customerId))
            {
                var customer = new Customer {
                    DisplayName = receipt.Customer.Name
                };
                customer   = qboClient.Create(customer);
                customerId = customer.Id.ToString();
            }
            var vendor = activeVendors.FirstOrDefault(x => x.QuickBooksOnlineId.GetValueOrDefault().ToString() == customerId)
                         ?? vendorDbClient.Create(VendorService.CreateModel(int.Parse(customerId), null, null, null));

            receipt.Id = string.IsNullOrWhiteSpace(receipt.Id) ? Guid.NewGuid().ToString() : receipt.Id; // Needed until UI is deployed.
            var receiptResult = receiptService.SaveReceipt(receipt, customerId, user.FirstName, user.LastName, user.Email, vendor, IpLookup.GetIp(request));

            response.Body = JsonConvert.SerializeObject(receiptResult);
        }