/** * Subscription Service - Mirror backend subscription endpoints */ import { apiClient } from '../client'; import { SubscriptionLimits, FeatureCheckRequest, FeatureCheckResponse, UsageCheckRequest, UsageCheckResponse } from '../types/subscription'; export class SubscriptionService { private readonly baseUrl = '/subscriptions'; async getSubscriptionLimits(tenantId: string): Promise { return apiClient.get(`${this.baseUrl}/${tenantId}/limits`); } async checkFeatureAccess( tenantId: string, featureName: string ): Promise { return apiClient.get( `${this.baseUrl}/${tenantId}/features/${featureName}/check` ); } async checkUsageLimit( tenantId: string, resourceType: 'users' | 'sales_records' | 'inventory_items' | 'api_requests', requestedAmount?: number ): Promise { const queryParams = new URLSearchParams(); if (requestedAmount !== undefined) { queryParams.append('requested_amount', requestedAmount.toString()); } const url = queryParams.toString() ? `${this.baseUrl}/${tenantId}/usage/${resourceType}/check?${queryParams.toString()}` : `${this.baseUrl}/${tenantId}/usage/${resourceType}/check`; return apiClient.get(url); } async recordUsage( tenantId: string, resourceType: 'users' | 'sales_records' | 'inventory_items' | 'api_requests', amount: number = 1 ): Promise<{ success: boolean; message: string }> { return apiClient.post<{ success: boolean; message: string }>( `${this.baseUrl}/${tenantId}/usage/${resourceType}/record`, { amount } ); } async getCurrentUsage(tenantId: string): Promise<{ users: number; sales_records: number; inventory_items: number; api_requests_this_hour: number; }> { return apiClient.get(`${this.baseUrl}/${tenantId}/usage/current`); } } export const subscriptionService = new SubscriptionService();