forked from Yara724/api
Block file create and review when the matching third-party or car-body code is missing, and override GEN.03/GEN.06 ClaimExpertId from those profiles instead of tenant defaults. Co-authored-by: Cursor <cursoragent@cursor.com>
91 lines
2.9 KiB
TypeScript
91 lines
2.9 KiB
TypeScript
import { BadRequestException } from "@nestjs/common";
|
|
import { BlameRequestType } from "src/Types&Enums/blame-request-management/blameRequestType.enum";
|
|
import { parseFanavaranId } from "src/lookups/fanavaran-last-car-policy";
|
|
|
|
export type FileMakerFanavaranExpertCodes = {
|
|
ThirdPartyClaimExpertId?: string;
|
|
CarBodyClaimExpertId?: string;
|
|
};
|
|
|
|
export type FileReviewerFanavaranExpertCodes = {
|
|
ThirdPartyExpertiseClaim?: string;
|
|
CarBodyExpertiseClaim?: string;
|
|
};
|
|
|
|
export function parseFanavaranExpertId(raw?: string | null): number | null {
|
|
if (raw == null) return null;
|
|
const trimmed = String(raw).trim();
|
|
if (!trimmed) return null;
|
|
return parseFanavaranId(trimmed) ?? parseFanavaranId(Number(trimmed));
|
|
}
|
|
|
|
export function fileMakerStageOneExpertCode(
|
|
fileMaker: FileMakerFanavaranExpertCodes,
|
|
blameType: BlameRequestType,
|
|
): string | undefined {
|
|
return blameType === BlameRequestType.CAR_BODY
|
|
? fileMaker.CarBodyClaimExpertId
|
|
: fileMaker.ThirdPartyClaimExpertId;
|
|
}
|
|
|
|
export function fileReviewerExpertiseExpertCode(
|
|
fileReviewer: FileReviewerFanavaranExpertCodes,
|
|
blameType: BlameRequestType,
|
|
): string | undefined {
|
|
return blameType === BlameRequestType.CAR_BODY
|
|
? fileReviewer.CarBodyExpertiseClaim
|
|
: fileReviewer.ThirdPartyExpertiseClaim;
|
|
}
|
|
|
|
function blameTypeLabel(blameType: BlameRequestType): string {
|
|
return blameType === BlameRequestType.CAR_BODY
|
|
? "car body (بدنه)"
|
|
: "third party (ثالث)";
|
|
}
|
|
|
|
export function assertFileMakerCanCreateBlameType(
|
|
fileMaker: FileMakerFanavaranExpertCodes,
|
|
blameType: BlameRequestType,
|
|
): void {
|
|
const raw = fileMakerStageOneExpertCode(fileMaker, blameType);
|
|
if (parseFanavaranExpertId(raw) != null) {
|
|
return;
|
|
}
|
|
throw new BadRequestException({
|
|
code: "FILE_MAKER_FANAVARAN_EXPERT_CODE_MISSING",
|
|
message: `Your FileMaker profile has no Fanavaran stage-1 claim expert id for ${blameTypeLabel(blameType)} files. You cannot create this file type.`,
|
|
});
|
|
}
|
|
|
|
export function assertFileReviewerCanReviewBlameType(
|
|
fileReviewer: FileReviewerFanavaranExpertCodes,
|
|
blameType: BlameRequestType,
|
|
): void {
|
|
const raw = fileReviewerExpertiseExpertCode(fileReviewer, blameType);
|
|
if (parseFanavaranExpertId(raw) != null) {
|
|
return;
|
|
}
|
|
throw new BadRequestException({
|
|
code: "FILE_REVIEWER_FANAVARAN_EXPERT_CODE_MISSING",
|
|
message: `Your FileReviewer profile has no Fanavaran expertise claim expert id for ${blameTypeLabel(blameType)} files. You cannot review this file type.`,
|
|
});
|
|
}
|
|
|
|
export function resolveFileMakerStageOneExpertId(
|
|
fileMaker: FileMakerFanavaranExpertCodes,
|
|
blameType: BlameRequestType,
|
|
): number | null {
|
|
return parseFanavaranExpertId(
|
|
fileMakerStageOneExpertCode(fileMaker, blameType),
|
|
);
|
|
}
|
|
|
|
export function resolveFileReviewerExpertiseExpertId(
|
|
fileReviewer: FileReviewerFanavaranExpertCodes,
|
|
blameType: BlameRequestType,
|
|
): number | null {
|
|
return parseFanavaranExpertId(
|
|
fileReviewerExpertiseExpertCode(fileReviewer, blameType),
|
|
);
|
|
}
|