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 { 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 { if (!insurer?.clientKey) { throw new UnauthorizedException("Insurer client key is missing."); } return this.clientService.updatePanelSettings(insurer.clientKey, body); } }