Add SKIP_GPS_VALIDATION feature for attendance and visit services
- Introduced SKIP_GPS_VALIDATION environment variable to control GPS validation during check-ins and check-outs. - Updated loadEnv function to parse SKIP_GPS_VALIDATION and enforce its rules based on NODE_ENV. - Enhanced attendance and visit services to utilize the new configuration, allowing GPS validation to be skipped in development environments. - Added unit tests to verify the behavior of SKIP_GPS_VALIDATION in various scenarios, ensuring proper handling in both production and development contexts. - Updated check-in verification logic to respect the SKIP_GPS_VALIDATION option, improving flexibility in location checks.
This commit is contained in:
@@ -4,6 +4,7 @@ import {
|
||||
Injectable,
|
||||
NotFoundException,
|
||||
} from '@nestjs/common';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import type { PaginationResponse } from '../../../common/http/response';
|
||||
import {
|
||||
pickRelation,
|
||||
@@ -21,6 +22,7 @@ import {
|
||||
isCheckInMethod,
|
||||
verifyCustomerCheckIn,
|
||||
type CheckInPayload,
|
||||
type CheckInVerificationOptions,
|
||||
} from '../shared/check-in-verification';
|
||||
import { FIELD_VISIT_PRIVILEGE_KEY } from '../shared/field-purpose';
|
||||
import { TimelineActivitiesService } from '../timeline/timeline-activities.service';
|
||||
@@ -42,6 +44,7 @@ export class VisitsService {
|
||||
private readonly employeesService: EmployeesService,
|
||||
private readonly companySettingsService: CompanySettingsService,
|
||||
private readonly timelineActivitiesService: TimelineActivitiesService,
|
||||
private readonly config: ConfigService,
|
||||
) {}
|
||||
|
||||
async list(query: ListVisitsQueryDto): Promise<PaginationResponse<VisitDto>> {
|
||||
@@ -107,6 +110,7 @@ export class VisitsService {
|
||||
},
|
||||
payload,
|
||||
radiusMeters,
|
||||
this.gpsVerificationOptions(),
|
||||
);
|
||||
|
||||
let planDestinationId: string | null = null;
|
||||
@@ -177,6 +181,7 @@ export class VisitsService {
|
||||
},
|
||||
payload,
|
||||
radiusMeters,
|
||||
this.gpsVerificationOptions(),
|
||||
);
|
||||
|
||||
const updated = await this.visitsRepository.checkOut(id, {
|
||||
@@ -272,6 +277,13 @@ export class VisitsService {
|
||||
};
|
||||
}
|
||||
|
||||
private gpsVerificationOptions(): CheckInVerificationOptions {
|
||||
return {
|
||||
skipGpsValidation:
|
||||
this.config.get<boolean>('SKIP_GPS_VALIDATION') === true,
|
||||
};
|
||||
}
|
||||
|
||||
private toPayload(dto: VisitCheckInDto | VisitCheckOutDto): CheckInPayload {
|
||||
if (!isCheckInMethod(dto.method)) {
|
||||
throw new BadRequestException('Invalid check-in method');
|
||||
|
||||
Reference in New Issue
Block a user