Add subcription feature 2
This commit is contained in:
@@ -41,6 +41,19 @@ export class AuthService {
|
||||
return apiClient.post<UserRegistrationWithSubscriptionResponse>(`${this.baseUrl}/register-with-subscription`, userData);
|
||||
}
|
||||
|
||||
async completeRegistrationAfterSetupIntent(completionData: {
|
||||
email: string;
|
||||
password: string;
|
||||
full_name: string;
|
||||
setup_intent_id: string;
|
||||
plan_id: string;
|
||||
payment_method_id: string;
|
||||
billing_interval: 'monthly' | 'yearly';
|
||||
coupon_code?: string;
|
||||
}): Promise<TokenResponse> {
|
||||
return apiClient.post<TokenResponse>(`${this.baseUrl}/complete-registration-after-setup-intent`, completionData);
|
||||
}
|
||||
|
||||
async login(loginData: UserLogin): Promise<TokenResponse> {
|
||||
return apiClient.post<TokenResponse>(`${this.baseUrl}/login`, loginData);
|
||||
}
|
||||
|
||||
@@ -402,6 +402,26 @@ export class SubscriptionService {
|
||||
return apiClient.get(`/subscriptions/${tenantId}/invoices`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current payment method for a subscription
|
||||
*/
|
||||
async getCurrentPaymentMethod(
|
||||
tenantId: string
|
||||
): Promise<{
|
||||
brand: string;
|
||||
last4: string;
|
||||
exp_month?: number;
|
||||
exp_year?: number;
|
||||
} | null> {
|
||||
try {
|
||||
const response = await apiClient.get(`/subscriptions/${tenantId}/payment-method`);
|
||||
return response;
|
||||
} catch (error) {
|
||||
console.error('Failed to get current payment method:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the default payment method for a subscription
|
||||
*/
|
||||
@@ -416,10 +436,55 @@ export class SubscriptionService {
|
||||
last4: string;
|
||||
exp_month?: number;
|
||||
exp_year?: number;
|
||||
requires_action?: boolean;
|
||||
client_secret?: string;
|
||||
payment_intent_status?: string;
|
||||
}> {
|
||||
return apiClient.post(`/subscriptions/${tenantId}/update-payment-method?payment_method_id=${paymentMethodId}`, {});
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete subscription creation after SetupIntent confirmation
|
||||
*
|
||||
* This method is called after the frontend successfully confirms a SetupIntent
|
||||
* (with or without 3DS authentication). It verifies the SetupIntent and creates
|
||||
* the subscription with the verified payment method.
|
||||
*
|
||||
* @param setupIntentId - The SetupIntent ID that was confirmed by Stripe
|
||||
* @param subscriptionData - Data needed to complete subscription creation
|
||||
* @returns Promise with subscription creation result
|
||||
*/
|
||||
async completeSubscriptionAfterSetupIntent(
|
||||
setupIntentId: string,
|
||||
subscriptionData: {
|
||||
customer_id: string;
|
||||
plan_id: string;
|
||||
payment_method_id: string;
|
||||
trial_period_days?: number;
|
||||
user_id: string;
|
||||
billing_interval: string;
|
||||
}
|
||||
): Promise<{
|
||||
success: boolean;
|
||||
message: string;
|
||||
data: {
|
||||
subscription_id: string;
|
||||
customer_id: string;
|
||||
status: string;
|
||||
plan: string;
|
||||
billing_cycle: string;
|
||||
trial_period_days?: number;
|
||||
current_period_end: string;
|
||||
user_id: string;
|
||||
setup_intent_id: string;
|
||||
};
|
||||
}> {
|
||||
return apiClient.post('/subscriptions/complete-after-setup-intent', {
|
||||
setup_intent_id: setupIntentId,
|
||||
...subscriptionData
|
||||
});
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// NEW METHODS - Usage Forecasting & Predictive Analytics
|
||||
// ============================================================================
|
||||
|
||||
@@ -75,6 +75,18 @@ export interface UserRegistration {
|
||||
*/
|
||||
export interface UserRegistrationWithSubscriptionResponse extends TokenResponse {
|
||||
subscription_id?: string | null; // ID of the created subscription (returned if subscription was created during registration)
|
||||
requires_action?: boolean | null; // Whether 3DS/SetupIntent authentication is required
|
||||
action_type?: string | null; // Type of action required (e.g., 'setup_intent_confirmation')
|
||||
client_secret?: string | null; // Client secret for SetupIntent/PaymentIntent authentication
|
||||
payment_intent_id?: string | null; // Payment intent ID (deprecated, use setup_intent_id)
|
||||
setup_intent_id?: string | null; // SetupIntent ID for 3DS authentication
|
||||
customer_id?: string | null; // Stripe customer ID (needed for completion)
|
||||
plan_id?: string | null; // Plan ID (needed for completion)
|
||||
payment_method_id?: string | null; // Payment method ID (needed for completion)
|
||||
trial_period_days?: number | null; // Trial period days (needed for completion)
|
||||
user_id?: string | null; // User ID (needed for completion)
|
||||
billing_interval?: string | null; // Billing interval (needed for completion)
|
||||
message?: string | null; // Message explaining what needs to be done
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user