コード例 #1
0
        public async Task <Result <string> > Handle(
            SetupBillingCommand command,
            CancellationToken cancellationToken)
        {
            var restaurant = await unitOfWork
                             .Restaurants
                             .GetById(new RestaurantId(command.RestaurantId));

            if (restaurant.ManagerId != authenticator.UserId)
            {
                return(Error.Unauthorised());
            }

            var billingAccount = restaurant.HasBillingAccount()
                ? await unitOfWork.BillingAccounts.GetById(restaurant.BillingAccountId)
                : null;

            if (billingAccount is null)
            {
                var billingAccountId = await billingService.CreateAccount(restaurant);

                billingAccount = new BillingAccount(new BillingAccountId(billingAccountId));
                restaurant.AddBillingAccount(billingAccount.Id);

                await unitOfWork.BillingAccounts.Add(billingAccount);

                await unitOfWork.Commit();
            }

            var link = await billingService.GenerateOnboardingLink(
                billingAccount.Id,
                restaurant.Id
                );

            return(Result.Ok(link));
        }