Files
edr-platform/apps/edr-freight-api/src/modules/contract-templates/contract-templates.controller.ts
2026-07-09 21:13:07 +00:00

98 lines
2.8 KiB
TypeScript

import {
Body,
Controller,
Delete,
Get,
Param,
Patch,
Post,
Put,
} from "@nestjs/common";
import { ApiOperation, ApiTags } from "@nestjs/swagger";
import { FreightAdmin } from "../../common/booking-guards";
import { ContractTemplatesService } from "./contract-templates.service";
import {
CreateArticleDto,
PreviewContractTemplateDto,
ReplaceArticlesDto,
UpdateArticleDto,
UpdateContractTemplateDto,
} from "./dto/contract-template.dto";
@ApiTags("contract-templates")
@Controller("contract-templates")
export class ContractTemplatesController {
constructor(private readonly service: ContractTemplatesService) {}
// Reads stay open to authenticated staff (the backoffice Templates tab);
// writes are admin-guarded like other freight configuration resources.
@Get()
@ApiOperation({ summary: "List the six contract document templates" })
list() {
return this.service.list();
}
@Get(":code")
@ApiOperation({ summary: "Get one contract template by code" })
getByCode(@Param("code") code: string) {
return this.service.getByCode(code);
}
@Patch(":code")
@FreightAdmin()
@ApiOperation({ summary: "Update template metadata (name, title, recitals, active flag)" })
update(@Param("code") code: string, @Body() dto: UpdateContractTemplateDto) {
return this.service.update(code, dto);
}
@Post(":code/preview")
@ApiOperation({
summary: "Render an HTML preview of the template against mock contract data",
})
preview(
@Param("code") code: string,
@Body() dto: PreviewContractTemplateDto,
) {
return this.service.preview(code, dto);
}
/* ------------------------- article routes ------------------------- */
@Put(":code/articles")
@FreightAdmin()
@ApiOperation({ summary: "Replace the full ordered article list (used for reorder)" })
replaceArticles(@Param("code") code: string, @Body() dto: ReplaceArticlesDto) {
return this.service.replaceArticles(code, dto.articles);
}
@Post(":code/articles")
@FreightAdmin()
@ApiOperation({ summary: "Add an article to the template" })
addArticle(@Param("code") code: string, @Body() dto: CreateArticleDto) {
return this.service.addArticle(code, dto);
}
@Patch(":code/articles/:articleId")
@FreightAdmin()
@ApiOperation({ summary: "Update an article's title or body" })
updateArticle(
@Param("code") code: string,
@Param("articleId") articleId: string,
@Body() dto: UpdateArticleDto,
) {
return this.service.updateArticle(code, articleId, dto);
}
@Delete(":code/articles/:articleId")
@FreightAdmin()
@ApiOperation({ summary: "Remove an article from the template" })
removeArticle(
@Param("code") code: string,
@Param("articleId") articleId: string,
) {
return this.service.removeArticle(code, articleId);
}
}