postiz/apps/backend/src/services/auth/permissions/subscription.exception.ts

45 lines
1.5 KiB
TypeScript

import {ArgumentsHost, Catch, ExceptionFilter, HttpException, HttpStatus} from "@nestjs/common";
import {AuthorizationActions, Sections} from "@gitroom/backend/services/auth/permissions/permissions.service";
export class SubscriptionException extends HttpException {
constructor(message: {
section: Sections,
action: AuthorizationActions
}) {
super(message, HttpStatus.PAYMENT_REQUIRED);
}
}
@Catch(SubscriptionException)
export class SubscriptionExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const status = exception.getStatus();
const error: {section: Sections, action: AuthorizationActions} = exception.getResponse() as any;
const message = getErrorMessage(error);
response.status(status).json({
statusCode: status,
message,
url: process.env.FRONTEND_URL + '/billing',
});
}
}
const getErrorMessage = (error: {section: Sections, action: AuthorizationActions}) => {
switch (error.section) {
case Sections.POSTS_PER_MONTH:
switch (error.action) {
default:
return 'You have reached the maximum number of posts for your subscription. Please upgrade your subscription to add more posts.';
}
case Sections.CHANNEL:
switch (error.action) {
default:
return 'You have reached the maximum number of channels for your subscription. Please upgrade your subscription to add more channels.';
}
}
}