api-server/src/modules/project-center/project-center.controller.ts
WangDL 8abf94872a
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 41s
feat: M4-06 — project center with Gitea API integration
- GiteaService: query repos, milestones, issues, releases, runners
- ProjectCenterController: 5 AAPI endpoints
- Replace iframe-only GiteaEmbed with full ProjectCenter page
  (repos table, issues, milestones cards, releases, runners, Gitea embed tab)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:06:19 +08:00

49 lines
1.7 KiB
TypeScript

import { Controller, Get, Param, Query, UseGuards } from '@nestjs/common';
import { ApiTags, ApiBearerAuth, ApiOperation, ApiQuery } from '@nestjs/swagger';
import { GiteaService } from './gitea.service';
import { AdminAuthGuard } from '../../common/guards/admin-auth.guard';
import { AdminRolesGuard } from '../../common/guards/admin-roles.guard';
@ApiTags('admin-project-center')
@ApiBearerAuth()
@Controller('admin-api/projects')
@UseGuards(AdminAuthGuard, AdminRolesGuard)
export class ProjectCenterController {
constructor(private readonly gitea: GiteaService) {}
@Get('repos')
@ApiOperation({ summary: 'Gitea 仓库列表' })
async getRepos() {
return this.gitea.getRepos();
}
@Get('repos/:owner/:repo/milestones')
@ApiOperation({ summary: '仓库里程碑' })
async getMilestones(@Param('owner') owner: string, @Param('repo') repo: string) {
return this.gitea.getMilestones(owner, repo);
}
@Get('repos/:owner/:repo/issues')
@ApiOperation({ summary: '仓库 Issue 列表' })
@ApiQuery({ name: 'milestone', required: false })
@ApiQuery({ name: 'state', required: false })
async getIssues(
@Param('owner') owner: string, @Param('repo') repo: string,
@Query('milestone') milestone?: string, @Query('state') state?: string,
) {
return this.gitea.getIssues(owner, repo, milestone, state);
}
@Get('repos/:owner/:repo/releases')
@ApiOperation({ summary: '仓库 Release 列表' })
async getReleases(@Param('owner') owner: string, @Param('repo') repo: string) {
return this.gitea.getReleases(owner, repo);
}
@Get('runners')
@ApiOperation({ summary: 'Gitea Runner 状态' })
async getRunners() {
return this.gitea.getRunners();
}
}