Files
CRM_Montzar/apps/api/src/attendance/workday.interceptor.ts
T

28 lines
849 B
TypeScript

import {
CallHandler,
ExecutionContext,
Injectable,
NestInterceptor,
} from '@nestjs/common';
import type { Actor } from '../common/record-scope';
import { AttendanceService } from './attendance.service';
@Injectable()
export class WorkdayInterceptor implements NestInterceptor {
constructor(private readonly attendance: AttendanceService) {}
async intercept(context: ExecutionContext, next: CallHandler) {
if (context.getType() !== 'http') return next.handle();
const req = context.switchToHttp().getRequest<{
user?: Actor;
originalUrl?: string;
url?: string;
}>();
const actor = req.user;
const path = req.originalUrl || req.url || '';
if (!actor?.userId || path.includes('/auth/logout')) return next.handle();
await this.attendance.assertSession(actor);
return next.handle();
}
}