import { CanActivate, ExecutionContext, ForbiddenException, Injectable } from "@nestjs/common"; import { FastifyRequest } from "fastify"; import { AuthMessage } from "../../../common/enums/message.enum"; import { Reflector } from "@nestjs/core"; import { RESELLER_ROUTE } from "../../../common/decorators/reseller.decorator"; @Injectable() export class ResellerRouteGuard implements CanActivate { constructor(private reflector: Reflector) {} canActivate(context: ExecutionContext): boolean { const requiredReseller = this.reflector.getAllAndOverride(RESELLER_ROUTE, [context.getHandler(), context.getClass()]); if (!requiredReseller) return true; const req = context.switchToHttp().getRequest(); const user = req.user; if (!user) throw new ForbiddenException(AuthMessage.UNAUTHORIZED_ACCESS); if (!user.isReseller) throw new ForbiddenException(AuthMessage.UNAUTHORIZED_ACCESS); return true; } }