Marketplace móvil para negocios locales mexicanos. Estructura inicial: - apps/backend (NestJS API) - apps/frontend (React Web) - apps/mobile (Expo/React Native) - apps/mcp-server (Claude MCP Server) - apps/whatsapp-service (WhatsApp Business API) - database/ (PostgreSQL DDL) - docs/ (Documentación) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
48 lines
2.3 KiB
TypeScript
48 lines
2.3 KiB
TypeScript
import { Repository } from 'typeorm';
|
|
import { StripeService } from './stripe.service';
|
|
import { Subscription } from '../subscriptions/entities/subscription.entity';
|
|
import { Plan } from '../subscriptions/entities/plan.entity';
|
|
import { TokenBalance } from '../subscriptions/entities/token-balance.entity';
|
|
import { TokenUsage } from '../subscriptions/entities/token-usage.entity';
|
|
export interface TokenPackage {
|
|
code: string;
|
|
name: string;
|
|
tokens: number;
|
|
priceMxn: number;
|
|
stripePriceId?: string;
|
|
}
|
|
export declare class BillingService {
|
|
private stripeService;
|
|
private subscriptionRepo;
|
|
private planRepo;
|
|
private tokenBalanceRepo;
|
|
private tokenUsageRepo;
|
|
private readonly logger;
|
|
private readonly tokenPackages;
|
|
constructor(stripeService: StripeService, subscriptionRepo: Repository<Subscription>, planRepo: Repository<Plan>, tokenBalanceRepo: Repository<TokenBalance>, tokenUsageRepo: Repository<TokenUsage>);
|
|
getPlans(): Promise<Plan[]>;
|
|
getTokenPackages(): TokenPackage[];
|
|
createSubscriptionCheckout(tenantId: string, planCode: string, successUrl: string, cancelUrl: string): Promise<{
|
|
checkoutUrl: string;
|
|
}>;
|
|
createTokenPurchaseCheckout(tenantId: string, packageCode: string, successUrl: string, cancelUrl: string): Promise<{
|
|
checkoutUrl: string;
|
|
}>;
|
|
createPortalSession(tenantId: string, returnUrl: string): Promise<{
|
|
portalUrl: string;
|
|
}>;
|
|
handleSubscriptionCreated(stripeSubscriptionId: string, stripeCustomerId: string, stripePriceId: string): Promise<void>;
|
|
handleSubscriptionCancelled(stripeSubscriptionId: string): Promise<void>;
|
|
handleTokenPurchase(tenantId: string, packageCode: string, tokens: number): Promise<void>;
|
|
getTokenBalance(tenantId: string): Promise<TokenBalance | null>;
|
|
addTokensToBalance(tenantId: string, tokens: number, source: 'subscription' | 'purchase' | 'bonus'): Promise<TokenBalance>;
|
|
consumeTokens(tenantId: string, tokens: number, action: string, description?: string): Promise<boolean>;
|
|
getTokenUsageHistory(tenantId: string, limit?: number): Promise<TokenUsage[]>;
|
|
getBillingSummary(tenantId: string): Promise<{
|
|
subscription: Subscription | null;
|
|
plan: Plan | null;
|
|
tokenBalance: TokenBalance | null;
|
|
invoices: any[];
|
|
}>;
|
|
}
|