diff --git a/Fabric.Backend.Center/src/nodes/nodes.controller.ts b/Fabric.Backend.Center/src/nodes/nodes.controller.ts index 77577e6..89523e6 100644 --- a/Fabric.Backend.Center/src/nodes/nodes.controller.ts +++ b/Fabric.Backend.Center/src/nodes/nodes.controller.ts @@ -2,9 +2,12 @@ import { Body, ConflictException, Controller, + DefaultValuePipe, ForbiddenException, Get, + ParseIntPipe, Post, + Query, } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; @@ -59,10 +62,25 @@ export class NodesController { } @Get() - async list() { - const items = await this.nodeRepo.find({ + async list( + @Query('page', new DefaultValuePipe(1), ParseIntPipe) page: number, + @Query('pageSize', new DefaultValuePipe(20), ParseIntPipe) pageSize: number, + ) { + const safePage = page < 1 ? 1 : page; + const safePageSize = pageSize < 1 ? 20 : Math.min(pageSize, 100); + + const [items, total] = await this.nodeRepo.findAndCount({ order: { createdAt: 'DESC' }, + skip: (safePage - 1) * safePageSize, + take: safePageSize, }); - return { items }; + + return { + items, + page: safePage, + pageSize: safePageSize, + total, + totalPages: Math.max(1, Math.ceil(total / safePageSize)), + }; } } diff --git a/docs/TODO-backend-center-guild.md b/docs/TODO-backend-center-guild.md index c197bcb..992740e 100644 --- a/docs/TODO-backend-center-guild.md +++ b/docs/TODO-backend-center-guild.md @@ -26,7 +26,7 @@ - [x] `POST /nodes/register` shared-secret 校验 - [x] node 唯一性校验(nodeId/endpoint) - [ ] node 状态模型(active/offline/revoked) -- [ ] `GET /nodes` 列表 + 分页 +- [x] `GET /nodes` 列表 + 分页 - [ ] node 心跳接口(可选) ### 1.3 Center 运维能力