forked from Yara724/api
72 lines
2.4 KiB
TypeScript
72 lines
2.4 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Get,
|
|
Patch,
|
|
UnauthorizedException,
|
|
UseGuards,
|
|
} from "@nestjs/common";
|
|
import {
|
|
ApiBearerAuth,
|
|
ApiOperation,
|
|
ApiResponse,
|
|
ApiTags,
|
|
} from "@nestjs/swagger";
|
|
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 { RoleEnum } from "src/Types&Enums/role.enum";
|
|
import { ClientService } from "./client.service";
|
|
import {
|
|
ClientSettingsPanelResponseDto,
|
|
UpdateClientSettingsDto,
|
|
} from "./dto/client-settings.dto";
|
|
|
|
/**
|
|
* Insurer (company) panel: per-tenant upload limits and CAR_BODY accident window.
|
|
* Scoped to the JWT `clientKey` — tenants cannot edit other clients.
|
|
*/
|
|
@Controller("client-panel")
|
|
@ApiTags("insurer-client-panel")
|
|
@ApiBearerAuth()
|
|
@UseGuards(LocalActorAuthGuard, RolesGuard)
|
|
@Roles(RoleEnum.COMPANY)
|
|
export class ClientPanelController {
|
|
constructor(private readonly clientService: ClientService) {}
|
|
|
|
@Get("settings")
|
|
@ApiOperation({
|
|
summary: "Get tenant settings (media limits & CAR_BODY accident window)",
|
|
description:
|
|
"Returns configured overrides, effective values (with system defaults), and route upload ceilings for the authenticated insurer's client.",
|
|
})
|
|
@ApiResponse({ status: 200, type: ClientSettingsPanelResponseDto })
|
|
async getSettings(
|
|
@CurrentUser() insurer: { clientKey?: string },
|
|
): Promise<ClientSettingsPanelResponseDto> {
|
|
if (!insurer?.clientKey) {
|
|
throw new UnauthorizedException("Insurer client key is missing.");
|
|
}
|
|
return this.clientService.getPanelSettings(insurer.clientKey);
|
|
}
|
|
|
|
@Patch("settings")
|
|
@ApiOperation({
|
|
summary: "Update tenant settings",
|
|
description:
|
|
"Partial update of `settings.carBodyAccidentMaxAgeDays` and/or `settings.media` (video, image, voice). " +
|
|
"Only fields sent in the body are changed. `maxBytes` cannot exceed the route ceiling returned by GET.",
|
|
})
|
|
@ApiResponse({ status: 200, type: ClientSettingsPanelResponseDto })
|
|
async updateSettings(
|
|
@CurrentUser() insurer: { clientKey?: string },
|
|
@Body() body: UpdateClientSettingsDto,
|
|
): Promise<ClientSettingsPanelResponseDto> {
|
|
if (!insurer?.clientKey) {
|
|
throw new UnauthorizedException("Insurer client key is missing.");
|
|
}
|
|
return this.clientService.updatePanelSettings(insurer.clientKey, body);
|
|
}
|
|
}
|