mirror of
https://github.com/bitwarden/server
synced 2025-12-15 15:53:59 +00:00
* Replace SubscriberQueries with SubscriberService * Replace OrganizationBillingQueries with OrganizationBillingService * Replace ProviderBillingQueries with ProviderBillingService, move to Commercial * Replace AssignSeatsToClientOrganizationCommand with ProviderBillingService, move to commercial * Replace ScaleSeatsCommand with ProviderBillingService and move to Commercial * Replace CancelSubscriptionCommand with SubscriberService * Replace CreateCustomerCommand with ProviderBillingService and move to Commercial * Replace StartSubscriptionCommand with ProviderBillingService and moved to Commercial * Replaced RemovePaymentMethodCommand with SubscriberService * Formatting * Used dotnet format this time * Changing ProviderBillingService to scoped * Found circular dependency' * One more time with feeling * Formatting * Fix error in remove org from provider * Missed test fix in conflit * [AC-1937] Server: Implement endpoint to retrieve provider payment information (#4107) * Move the gettax and paymentmethod from stripepayment class Signed-off-by: Cy Okeke <cokeke@bitwarden.com> * Add the method to retrieve the tax and payment details Signed-off-by: Cy Okeke <cokeke@bitwarden.com> * Add unit tests for the paymentInformation method Signed-off-by: Cy Okeke <cokeke@bitwarden.com> * Add the endpoint to retrieve paymentinformation Signed-off-by: Cy Okeke <cokeke@bitwarden.com> * Add unit tests to the SubscriberService Signed-off-by: Cy Okeke <cokeke@bitwarden.com> * Remove the getTaxInfoAsync update reference Signed-off-by: Cy Okeke <cokeke@bitwarden.com> --------- Signed-off-by: Cy Okeke <cokeke@bitwarden.com> --------- Signed-off-by: Cy Okeke <cokeke@bitwarden.com> Co-authored-by: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
101 lines
7.0 KiB
C#
101 lines
7.0 KiB
C#
using Bit.Core.Billing.Models;
|
|
using Bit.Core.Entities;
|
|
using Bit.Core.Models.Business;
|
|
using Stripe;
|
|
|
|
namespace Bit.Core.Billing.Services;
|
|
|
|
public interface ISubscriberService
|
|
{
|
|
/// <summary>
|
|
/// Cancels a subscriber's subscription while including user-provided feedback via the <paramref name="offboardingSurveyResponse"/>.
|
|
/// If the <paramref name="cancelImmediately"/> flag is <see langword="false"/>,
|
|
/// this command sets the subscription's <b>"cancel_at_end_of_period"</b> property to <see langword="true"/>.
|
|
/// Otherwise, this command cancels the subscription immediately.
|
|
/// </summary>
|
|
/// <param name="subscriber">The subscriber with the subscription to cancel.</param>
|
|
/// <param name="offboardingSurveyResponse">An <see cref="OffboardingSurveyResponse"/> DTO containing user-provided feedback on why they are cancelling the subscription.</param>
|
|
/// <param name="cancelImmediately">A flag indicating whether to cancel the subscription immediately or at the end of the subscription period.</param>
|
|
Task CancelSubscription(
|
|
ISubscriber subscriber,
|
|
OffboardingSurveyResponse offboardingSurveyResponse,
|
|
bool cancelImmediately);
|
|
|
|
/// <summary>
|
|
/// Retrieves a Stripe <see cref="Customer"/> using the <paramref name="subscriber"/>'s <see cref="ISubscriber.GatewayCustomerId"/> property.
|
|
/// </summary>
|
|
/// <param name="subscriber">The subscriber to retrieve the Stripe customer for.</param>
|
|
/// <param name="customerGetOptions">Optional parameters that can be passed to Stripe to expand or modify the customer.</param>
|
|
/// <returns>A Stripe <see cref="Customer"/>.</returns>
|
|
/// <exception cref="ArgumentNullException">Thrown when the <paramref name="subscriber"/> is <see langword="null"/>.</exception>
|
|
/// <remarks>This method opts for returning <see langword="null"/> rather than throwing exceptions, making it ideal for surfacing data from API endpoints.</remarks>
|
|
Task<Customer> GetCustomer(
|
|
ISubscriber subscriber,
|
|
CustomerGetOptions customerGetOptions = null);
|
|
|
|
/// <summary>
|
|
/// Retrieves a Stripe <see cref="Customer"/> using the <paramref name="subscriber"/>'s <see cref="ISubscriber.GatewayCustomerId"/> property.
|
|
/// </summary>
|
|
/// <param name="subscriber">The subscriber to retrieve the Stripe customer for.</param>
|
|
/// <param name="customerGetOptions">Optional parameters that can be passed to Stripe to expand or modify the customer.</param>
|
|
/// <returns>A Stripe <see cref="Customer"/>.</returns>
|
|
/// <exception cref="ArgumentNullException">Thrown when the <paramref name="subscriber"/> is <see langword="null"/>.</exception>
|
|
/// <exception cref="BillingException">Thrown when the subscriber's <see cref="ISubscriber.GatewayCustomerId"/> is <see langword="null"/> or empty.</exception>
|
|
/// <exception cref="BillingException">Thrown when the <see cref="Customer"/> returned from Stripe's API is null.</exception>
|
|
Task<Customer> GetCustomerOrThrow(
|
|
ISubscriber subscriber,
|
|
CustomerGetOptions customerGetOptions = null);
|
|
|
|
/// <summary>
|
|
/// Retrieves a Stripe <see cref="Subscription"/> using the <paramref name="subscriber"/>'s <see cref="ISubscriber.GatewaySubscriptionId"/> property.
|
|
/// </summary>
|
|
/// <param name="subscriber">The subscriber to retrieve the Stripe subscription for.</param>
|
|
/// <param name="subscriptionGetOptions">Optional parameters that can be passed to Stripe to expand or modify the subscription.</param>
|
|
/// <returns>A Stripe <see cref="Subscription"/>.</returns>
|
|
/// <exception cref="ArgumentNullException">Thrown when the <paramref name="subscriber"/> is <see langword="null"/>.</exception>
|
|
/// <remarks>This method opts for returning <see langword="null"/> rather than throwing exceptions, making it ideal for surfacing data from API endpoints.</remarks>
|
|
Task<Subscription> GetSubscription(
|
|
ISubscriber subscriber,
|
|
SubscriptionGetOptions subscriptionGetOptions = null);
|
|
|
|
/// <summary>
|
|
/// Retrieves a Stripe <see cref="Subscription"/> using the <paramref name="subscriber"/>'s <see cref="ISubscriber.GatewaySubscriptionId"/> property.
|
|
/// </summary>
|
|
/// <param name="subscriber">The subscriber to retrieve the Stripe subscription for.</param>
|
|
/// <param name="subscriptionGetOptions">Optional parameters that can be passed to Stripe to expand or modify the subscription.</param>
|
|
/// <returns>A Stripe <see cref="Subscription"/>.</returns>
|
|
/// <exception cref="ArgumentNullException">Thrown when the <paramref name="subscriber"/> is <see langword="null"/>.</exception>
|
|
/// <exception cref="BillingException">Thrown when the subscriber's <see cref="ISubscriber.GatewaySubscriptionId"/> is <see langword="null"/> or empty.</exception>
|
|
/// <exception cref="BillingException">Thrown when the <see cref="Subscription"/> returned from Stripe's API is null.</exception>
|
|
Task<Subscription> GetSubscriptionOrThrow(
|
|
ISubscriber subscriber,
|
|
SubscriptionGetOptions subscriptionGetOptions = null);
|
|
|
|
/// <summary>
|
|
/// Attempts to remove a subscriber's saved payment method. If the Stripe <see cref="Stripe.Customer"/> representing the
|
|
/// <paramref name="subscriber"/> contains a valid <b>"btCustomerId"</b> key in its <see cref="Stripe.Customer.Metadata"/> property,
|
|
/// this command will attempt to remove the Braintree <see cref="Braintree.PaymentMethod"/>. Otherwise, it will attempt to remove the
|
|
/// Stripe <see cref="Stripe.PaymentMethod"/>.
|
|
/// </summary>
|
|
/// <param name="subscriber">The subscriber to remove the saved payment method for.</param>
|
|
Task RemovePaymentMethod(ISubscriber subscriber);
|
|
|
|
/// <summary>
|
|
/// Retrieves a Stripe <see cref="TaxInfo"/> using the <paramref name="subscriber"/>'s <see cref="ISubscriber.GatewayCustomerId"/> property.
|
|
/// </summary>
|
|
/// <param name="subscriber">The subscriber to retrieve the Stripe customer for.</param>
|
|
/// <returns>A Stripe <see cref="TaxInfo"/>.</returns>
|
|
/// <exception cref="ArgumentNullException">Thrown when the <paramref name="subscriber"/> is <see langword="null"/>.</exception>
|
|
/// <remarks>This method opts for returning <see langword="null"/> rather than throwing exceptions, making it ideal for surfacing data from API endpoints.</remarks>
|
|
Task<TaxInfo> GetTaxInformationAsync(ISubscriber subscriber);
|
|
|
|
/// <summary>
|
|
/// Retrieves a Stripe <see cref="BillingInfo.BillingSource"/> using the <paramref name="subscriber"/>'s <see cref="ISubscriber.GatewayCustomerId"/> property.
|
|
/// </summary>
|
|
/// <param name="subscriber">The subscriber to retrieve the Stripe customer for.</param>
|
|
/// <returns>A Stripe <see cref="BillingInfo.BillingSource"/>.</returns>
|
|
/// <exception cref="ArgumentNullException">Thrown when the <paramref name="subscriber"/> is <see langword="null"/>.</exception>
|
|
/// <remarks>This method opts for returning <see langword="null"/> rather than throwing exceptions, making it ideal for surfacing data from API endpoints.</remarks>
|
|
Task<BillingInfo.BillingSource> GetPaymentMethodAsync(ISubscriber subscriber);
|
|
}
|