import { Router, Request, Response, NextFunction } from 'express'; import { Container, Service, Inject } from 'typedi'; import JWTAuth from '@/api/middleware/jwtAuth'; import TenancyMiddleware from '@/api/middleware/TenancyMiddleware'; import AttachCurrentTenantUser from '@/api/middleware/AttachCurrentTenantUser'; import PaymentViaLicenseController from '@/api/controllers/Subscription/PaymentViaLicense'; import SubscriptionService from '@/services/Subscription/SubscriptionService'; import asyncMiddleware from '@/api/middleware/asyncMiddleware'; @Service() export default class SubscriptionController { @Inject() subscriptionService: SubscriptionService; /** * Router constructor. */ router() { const router = Router(); router.use(JWTAuth); router.use(AttachCurrentTenantUser); router.use(TenancyMiddleware); router.use('/license', Container.get(PaymentViaLicenseController).router()); router.get('/', asyncMiddleware(this.getSubscriptions.bind(this))); return router; } /** * Retrieve all subscriptions of the authenticated user's tenant. * @param {Request} req * @param {Response} res * @param {NextFunction} next */ async getSubscriptions(req: Request, res: Response, next: NextFunction) { const { tenantId } = req; try { const subscriptions = await this.subscriptionService.getSubscriptions( tenantId ); return res.status(200).send({ subscriptions }); } catch (error) { next(error); } } }