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