@Controller
@Controller(path) 设置基础路由。插件名会自动作为前缀(例如 /reward-point → /<plugin>/reward-point)。
TSXcontroller
1import {
2 AuthenticatedUserOnly,
3 CheckAPIPermission,
4 Controller,
5 Get,
6 ResponseDto,
7} from "@quan-erp/shared-backend-core";
8
9@Controller("/reward-point")
10export class RewardPointController {
11 @Get("/")
12 @AuthenticatedUserOnly()
13 @CheckAPIPermission()
14 async list() {
15 return ResponseDto.ok(/* … */);
16 }
17}HTTP 方法
- @Get / @Post / @Put / @Delete — path 必须以 "/" 开头
- 可按需组合安全、@APIInfo、缓存与工作流装饰器
路由参数
- @Param(name) — 路径参数
- @Query(name) — 查询参数
- @Body() — 通常为 RequestDto<T>
- @User() — RequestedUser
TSXparams
1import {
2 Body,
3 Controller,
4 Param,
5 Put,
6 RequestDto,
7 RequestedUser,
8 User,
9} from "@quan-erp/shared-backend-core";
10import type { UpdateDto } from "./update.dto.js";
11
12@Controller("/order")
13export class OrderController {
14 @Put("/:id")
15 async update(
16 @Param("id") id: number,
17 @Body() body: RequestDto<UpdateDto>,
18 @User() user: RequestedUser,
19 ) { /* … */ }
20}@APIInfo
用于 Doc 与系统集成的元数据:shortDescription、description、isPublic、contentType、requestDto、responseDto、queryParams、pathParams、headers。
TSXapi-info
1import {
2 APIInfo,
3 Controller,
4 Get,
5 JsonContentType,
6 JWTAuthorizationHeader,
7 ResponseDto,
8 SkipLimitQueryParam,
9} from "@quan-erp/shared-backend-core";
10
11@Controller("/branch")
12export class BranchController {
13 @Get("/")
14 @APIInfo({
15 shortDescription: "Get all branches",
16 contentType: JsonContentType,
17 responseDto: ResponseDto,
18 queryParams: SkipLimitQueryParam,
19 headers: JWTAuthorizationHeader,
20 })
21 async list() { /* … */ }
22}请求与响应 DTO
用 RequestDto / ResponseDto 包装载荷,使前端始终收到一致形状(payload、errors、meta)。
Service CRUD 模式
- 创建:repo.insert(...) → 从 identifiers 返回 { id }(不要插入后再 findOne)
- 更新:repo.update({ id }, { ...data, updateDate }) 并检查 affected
- 删除:repo.softDelete + 检查 affected