import { Controller, Get, Post, Patch, Query, Param, Body, UseGuards } from '@nestjs/common'; import { SubscriptionService, SubscriptionQuery } from './subscription.service'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; @Controller('api/v1/subscriptions') @UseGuards(JwtAuthGuard) export class SubscriptionController { constructor(private readonly subscriptionService: SubscriptionService) {} // Subscription Plans @Get('plans') async getAllPlans() { return await this.subscriptionService.getAllPlans(); } @Get('plans/stats') async getPlanStats() { return await this.subscriptionService.getPlanStats(); } @Get('plans/:id') async getPlan(@Param('id') id: string) { return await this.subscriptionService.getPlan(id); } @Get('plans/by-plan-id/:planId') async getPlanByPlanId(@Param('planId') planId: string) { return await this.subscriptionService.getPlanByPlanId(planId); } // User Subscriptions @Get('users') async getUserSubscriptions(@Query() query: SubscriptionQuery) { return await this.subscriptionService.getUserSubscriptions(query); } @Get('users/:userId') async getUserSubscription(@Param('userId') userId: string) { return await this.subscriptionService.getUserSubscription(userId); } @Post('users/:userId') async createSubscription( @Param('userId') userId: string, @Body('planId') planId: string, @Body() subscriptionData: any, ) { return await this.subscriptionService.createSubscription(userId, planId, subscriptionData); } @Patch(':id/status') async updateSubscriptionStatus( @Param('id') id: string, @Body('status') status: string, @Body('metadata') metadata?: any, ) { return await this.subscriptionService.updateSubscriptionStatus(id, status, metadata); } // Subscription History @Get(':id/history') async getSubscriptionHistory(@Param('id') id: string) { return await this.subscriptionService.getSubscriptionHistory(id); } // Payment Records @Get(':id/payments') async getPaymentRecords(@Param('id') id: string) { return await this.subscriptionService.getPaymentRecords(id); } @Post(':id/payments') async createPaymentRecord( @Param('id') id: string, @Body() paymentData: any, ) { return await this.subscriptionService.createPaymentRecord(id, paymentData); } // Statistics @Get('stats') async getSubscriptionStats() { return await this.subscriptionService.getSubscriptionStats(); } }