feat(nestjs): migrate to NestJS

This commit is contained in:
Ahmed Bouhuolia
2025-04-07 11:51:24 +02:00
parent f068218a16
commit 55fcc908ef
3779 changed files with 631 additions and 195332 deletions

View File

@@ -0,0 +1,49 @@
import {
CanActivate,
ExecutionContext,
Injectable,
SetMetadata,
UnauthorizedException,
} from '@nestjs/common';
import { TenancyContext } from './TenancyContext.service';
import { Reflector } from '@nestjs/core';
import { IS_PUBLIC_ROUTE } from '../Auth/Auth.constants';
export const IS_IGNORE_TENANT_INITIALIZED = 'IS_IGNORE_TENANT_INITIALIZED';
export const IgnoreTenantInitializedRoute = () => SetMetadata(IS_IGNORE_TENANT_INITIALIZED, true);
@Injectable()
export class EnsureTenantIsInitializedGuard implements CanActivate {
constructor(private readonly tenancyContext: TenancyContext, private reflector: Reflector) {}
/**
* Validate the tenant of the current request is initialized..
* @param {ExecutionContext} context
* @returns {Promise<boolean>}
*/
async canActivate(context: ExecutionContext): Promise<boolean> {
const isIgnoreEnsureTenantInitialized = this.reflector.getAllAndOverride<boolean>(
IS_IGNORE_TENANT_INITIALIZED,
[context.getHandler(), context.getClass()],
);
const isPublic = this.reflector.getAllAndOverride<boolean>(
IS_PUBLIC_ROUTE,
[context.getHandler(), context.getClass()],
);
// Skip the guard early if the route marked as public or ignored.
if (isPublic || isIgnoreEnsureTenantInitialized) {
return true;
}
const tenant = await this.tenancyContext.getTenant();
if (!tenant?.initializedAt) {
throw new UnauthorizedException({
statusCode: 400,
error: 'Bad Request',
message: 'Tenant database is not migrated with application schema yet.',
errors: [{ type: 'TENANT.DATABASE.NOT.INITALIZED' }],
});
}
return true;
}
}