forked from Yara724/api
Added API for externalAPI, added env for clients
This commit is contained in:
@@ -1,17 +1,24 @@
|
||||
import { Body, Controller, Get, Post, UseGuards } from "@nestjs/common";
|
||||
import { ApiBearerAuth, ApiTags } from "@nestjs/swagger";
|
||||
import { GlobalGuard } from "src/auth/guards/global.guard";
|
||||
import { RolesGuard } from "src/auth/guards/role.guard";
|
||||
import { Roles } from "src/decorators/roles.decorator";
|
||||
import { Body, Controller, Get, Patch, Post } from "@nestjs/common";
|
||||
import {
|
||||
ApiBody,
|
||||
ApiOperation,
|
||||
ApiResponse,
|
||||
ApiTags,
|
||||
} from "@nestjs/swagger";
|
||||
import { CurrentUser } from "src/decorators/user.decorator";
|
||||
import { RoleEnum } from "src/Types&Enums/role.enum";
|
||||
import { SystemSettingsResponseDto } from "src/system-settings/dto/system-settings.dto";
|
||||
import { SystemSettingsService } from "src/system-settings/system-settings.service";
|
||||
import { ClientService } from "./client.service";
|
||||
import { ClientDto } from "./dto/create-client.dto";
|
||||
import { SetExternalInquiriesLiveDto } from "./dto/external-inquiries-live.dto";
|
||||
|
||||
@Controller("client")
|
||||
@ApiTags("client-management")
|
||||
export class ClientController {
|
||||
constructor(private readonly clientService: ClientService) {}
|
||||
constructor(
|
||||
private readonly clientService: ClientService,
|
||||
private readonly systemSettingsService: SystemSettingsService,
|
||||
) {}
|
||||
|
||||
@Post()
|
||||
async addClient(@Body() client: ClientDto) {
|
||||
@@ -27,4 +34,33 @@ export class ClientController {
|
||||
async getClientList(@CurrentUser() user) {
|
||||
return await this.clientService.getClientList();
|
||||
}
|
||||
|
||||
/** Toggle SandHub/Tejarat live HTTP vs mock inquiries (`system_settings.externalApis.sandHubUseLiveApi`). */
|
||||
@Patch("external-inquiries-live")
|
||||
@ApiOperation({
|
||||
summary: "Enable or disable live external inquiries",
|
||||
description:
|
||||
"Updates `system_settings.externalApis.sandHubUseLiveApi`. No auth required. Use the request examples below to switch between live Tejarat/SandHub HTTP and offline mock mode.",
|
||||
})
|
||||
@ApiBody({
|
||||
type: SetExternalInquiriesLiveDto,
|
||||
examples: {
|
||||
enableLive: {
|
||||
summary: "Enable live inquiries",
|
||||
description: "Call real SandHub/Tejarat HTTP APIs.",
|
||||
value: { enabled: true },
|
||||
},
|
||||
disableLive: {
|
||||
summary: "Disable live inquiries (mock mode)",
|
||||
description: "Use mocked inquiry responses; flows continue without external connectivity.",
|
||||
value: { enabled: false },
|
||||
},
|
||||
},
|
||||
})
|
||||
@ApiResponse({ status: 200, type: SystemSettingsResponseDto })
|
||||
async setExternalInquiriesLive(@Body() body?: SetExternalInquiriesLiveDto) {
|
||||
return this.systemSettingsService.updateSettings({
|
||||
externalApis: { sandHubUseLiveApi: body?.enabled === true },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Module } from "@nestjs/common";
|
||||
import { MongooseModule } from "@nestjs/mongoose";
|
||||
import { SystemSettingsModule } from "src/system-settings/system-settings.module";
|
||||
import { ClientController } from "./client.controller";
|
||||
import { ClientPanelController } from "./client-panel.controller";
|
||||
import { ClientService } from "./client.service";
|
||||
@@ -10,6 +11,7 @@ import { ClientDbSchema, ClientModel } from "./entities/schema/client.schema";
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
SystemSettingsModule,
|
||||
MongooseModule.forFeature([
|
||||
{ name: ClientModel.name, schema: ClientDbSchema },
|
||||
{
|
||||
|
||||
@@ -142,6 +142,38 @@ export class ClientService {
|
||||
return await this.clientDbService.find({ clientCode: companyCode });
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve a client by insurer company code from an external inquiry.
|
||||
* Creates the client when missing so inquiry flows don't fail on unknown codes.
|
||||
*/
|
||||
async findOrCreateClientByCompanyCode(
|
||||
companyCode: number | string | null | undefined,
|
||||
companyName: string | null | undefined,
|
||||
) {
|
||||
const name = typeof companyName === "string" ? companyName.trim() : "";
|
||||
const code = Number(companyCode);
|
||||
if (!name || !Number.isFinite(code)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let client = await this.clientDbService.find({ clientCode: code });
|
||||
if (client) return client;
|
||||
|
||||
try {
|
||||
await this.addClient({
|
||||
clientName: { persian: name, english: null },
|
||||
clientCode: code,
|
||||
useExpertMode: "legal",
|
||||
});
|
||||
} catch (err) {
|
||||
client = await this.clientDbService.find({ clientCode: code });
|
||||
if (client) return client;
|
||||
throw err;
|
||||
}
|
||||
|
||||
return this.clientDbService.find({ clientCode: code });
|
||||
}
|
||||
|
||||
async getClients(): Promise<ClientDtoRs[]> {
|
||||
const clients = await this.clientDbService.findAll();
|
||||
const show = clients.map((c) => new ClientDtoRs(c));
|
||||
|
||||
10
src/client/dto/external-inquiries-live.dto.ts
Normal file
10
src/client/dto/external-inquiries-live.dto.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { ApiProperty } from "@nestjs/swagger";
|
||||
|
||||
export class SetExternalInquiriesLiveDto {
|
||||
@ApiProperty({
|
||||
description:
|
||||
"When true, SandHub/Tejarat live HTTP inquiries run. When false, mocked inquiry data is used.",
|
||||
example: true,
|
||||
})
|
||||
enabled: boolean;
|
||||
}
|
||||
Reference in New Issue
Block a user