forked from Yara724/api
Initial commit after migration to gitea
This commit is contained in:
154
src/expert-insurer/expert-insurer.controller.ts
Normal file
154
src/expert-insurer/expert-insurer.controller.ts
Normal file
@@ -0,0 +1,154 @@
|
||||
import {
|
||||
BadRequestException,
|
||||
Body,
|
||||
Controller,
|
||||
Get,
|
||||
Param,
|
||||
Post,
|
||||
Put,
|
||||
Query,
|
||||
UnauthorizedException,
|
||||
UseGuards,
|
||||
} from "@nestjs/common";
|
||||
import {
|
||||
ApiBearerAuth,
|
||||
ApiBody,
|
||||
ApiParam,
|
||||
ApiQuery,
|
||||
ApiTags,
|
||||
} from "@nestjs/swagger";
|
||||
import { Types } from "mongoose";
|
||||
import { LocalActorAuthGuard } from "src/auth/guards/actor-local.guard";
|
||||
import { RolesGuard } from "src/auth/guards/role.guard";
|
||||
import { Roles } from "src/decorators/roles.decorator";
|
||||
import { CurrentUser } from "src/decorators/user.decorator";
|
||||
import { FileRating } from "src/request-management/entities/schema/request-management.schema";
|
||||
import { RoleEnum } from "src/Types&Enums/role.enum";
|
||||
import { ExpertInsurerService } from "./expert-insurer.service";
|
||||
import { CreateBranchDto } from "src/client/dto/create-branch.dto";
|
||||
|
||||
@Controller("expert-insurer")
|
||||
@ApiTags("expert-insurer-panel")
|
||||
@ApiBearerAuth()
|
||||
@UseGuards(LocalActorAuthGuard, RolesGuard)
|
||||
@Roles(RoleEnum.COMPANY)
|
||||
export class ExpertInsurerController {
|
||||
constructor(private readonly expertInsurerService: ExpertInsurerService) {}
|
||||
|
||||
@Get("files")
|
||||
async getAllFiles(@CurrentUser() insurer) {
|
||||
return await this.expertInsurerService.retrieveAllFilesOfClient(
|
||||
insurer.clientKey,
|
||||
);
|
||||
}
|
||||
|
||||
@ApiQuery({ name: "page", type: Number })
|
||||
@ApiQuery({ name: "response_count", type: Number })
|
||||
@Get("list")
|
||||
async getAllExperts(
|
||||
@Query("page") page: number,
|
||||
@Query("response_count") count: number,
|
||||
@CurrentUser() actor,
|
||||
) {
|
||||
return await this.expertInsurerService.retrieveAllExpertsOfClient(
|
||||
actor,
|
||||
page,
|
||||
count,
|
||||
);
|
||||
}
|
||||
|
||||
@ApiParam({ name: "expertId" })
|
||||
@ApiQuery({ name: "role", enum: ["claim", "blame"] })
|
||||
@Get("/:expertId")
|
||||
async requestDetail(
|
||||
@Param("expertId") id: string,
|
||||
@Query("role") role: "claim" | "blame",
|
||||
) {
|
||||
if (!Types.ObjectId.isValid(new Types.ObjectId(id))) {
|
||||
throw new BadRequestException("Invalid expert ID");
|
||||
}
|
||||
|
||||
if (!["claim", "blame"].includes(role)) {
|
||||
throw new BadRequestException("Invalid role");
|
||||
}
|
||||
|
||||
return await this.expertInsurerService.getAllFilesByExpertAndRole(id, role);
|
||||
}
|
||||
|
||||
@ApiBody({
|
||||
description: "Detailed expert rating",
|
||||
schema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
collisionMethodAccuracy: {
|
||||
type: "number",
|
||||
minimum: 0,
|
||||
maximum: 5,
|
||||
example: 4,
|
||||
description: "تشخیص درست نحوه برخورد",
|
||||
},
|
||||
evaluationTimeliness: {
|
||||
type: "number",
|
||||
minimum: 0,
|
||||
maximum: 5,
|
||||
example: 3,
|
||||
description: "زمان ارزیابی",
|
||||
},
|
||||
accidentCauseAccuracy: {
|
||||
type: "number",
|
||||
minimum: 0,
|
||||
maximum: 5,
|
||||
example: 5,
|
||||
description: "تشخیص درست علت تصادف",
|
||||
},
|
||||
guiltyVehicleIdentification: {
|
||||
type: "number",
|
||||
minimum: 0,
|
||||
maximum: 5,
|
||||
example: 4,
|
||||
description: "تشخیص درست وسیله نقلیه مقصر",
|
||||
},
|
||||
},
|
||||
required: [
|
||||
"collisionMethodAccuracy",
|
||||
"evaluationTimeliness",
|
||||
"accidentCauseAccuracy",
|
||||
"guiltyVehicleIdentification",
|
||||
],
|
||||
},
|
||||
})
|
||||
@ApiParam({ name: "requestId" })
|
||||
@ApiQuery({ name: "role", enum: ["claim", "blame"] })
|
||||
@Put("/:requestId/rating")
|
||||
async rateExperts(
|
||||
@Param("requestId") requestId: string,
|
||||
@Body() rating: FileRating,
|
||||
@Query("role") role: "claim" | "blame",
|
||||
) {
|
||||
if (!["claim", "blame"].includes(role)) {
|
||||
throw new BadRequestException("Invalid role");
|
||||
}
|
||||
|
||||
return await this.expertInsurerService.rateExpertOnFile(
|
||||
requestId,
|
||||
rating,
|
||||
role,
|
||||
);
|
||||
}
|
||||
|
||||
@Post("branches")
|
||||
@ApiBody({ type: CreateBranchDto })
|
||||
async addBranch(
|
||||
@CurrentUser() insurer,
|
||||
@Body() createBranchDto: CreateBranchDto,
|
||||
) {
|
||||
if (!insurer) {
|
||||
throw new UnauthorizedException("Could not identify the current user.");
|
||||
}
|
||||
|
||||
return await this.expertInsurerService.addBranch(
|
||||
insurer.clientKey,
|
||||
createBranchDto,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user