Exemple #1
0
        public async Task <IActionResult> CreateCompany([FromBody] DtoCreateCompanyRequest request)
        {
            if (ModelState.ValidationState != ModelValidationState.Valid)
            {
                return(BadRequest());
            }

            return(await companies.CreateCompany(new Company
            {
                CompanyName = request.CompanyName,
                CompanyAddress = request.CompanyAddress,
                CompanyPostcode = request.CompanyPostcode,
                CompanyContact = request.CompanyContact,
                CompanyPhone = request.CompanyPhone,
                CompanyEmail = request.CompanyEmail
            })
                   .Ensure(companyId => companyId.HasValue, "Company created")
                   .OnSuccess(companyId => companies.FetchCompany(companyId.Value))
                   .Ensure(company => company.HasValue, "Company exists")
                   .OnSuccess(company => RegisterBillingAccount(company.Value, request))
                   .OnBoth(result => result.IsFailure ? StatusCode(500) : StatusCode(201))
                   .ConfigureAwait(false));
        }
Exemple #2
0
        private async Task <Result <Company> > RegisterBillingAccount(Company company, DtoCreateCompanyRequest request)
        {
            string accountId;

            try
            {
                accountId = await billingManager.RegisterBillingAccount(company, new BillingAccountDetails
                {
                    IsBusinessAccount = request.BankAccountIsBusiness,
                    AccountNumber     = request.AccountNumber,
                    SortCode          = request.SortCode,
                    NameOnAccount     = request.NameOnAccount
                }).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                return(Result.Fail <Company>($"Error occurred creating account: {ex}"));
            }

            company.ExternalAccountId = accountId;

            return(await companies.UpdateCompany(new CompanyPatch
            {
                ResourceId = company.CompanyId,
                ExternalAccountId = new PatchOperation <string> {
                    Operation = OperationKind.Update, Value = accountId
                }
            })
                   .OnSuccess(() => company)
                   .ConfigureAwait(false));
        }