fix: project center — Gitea API wraps responses in {ok,data}, extract data field
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 44s
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 44s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
b81b7fba92
commit
e36f9c9785
@ -20,18 +20,30 @@ export class GiteaService {
|
||||
}
|
||||
}
|
||||
|
||||
private extractData<T>(response: any): T | null {
|
||||
if (!response) return null;
|
||||
// Gitea API wraps responses in {ok: true, data: ...}
|
||||
if (response.ok && Array.isArray(response.data)) return response.data as T;
|
||||
// Direct array response (standard REST API)
|
||||
if (Array.isArray(response)) return response as T;
|
||||
return null;
|
||||
}
|
||||
|
||||
async getRepos() {
|
||||
// Try search with wildcard first, fall back to user repos
|
||||
let repos = await this.giteaGet<any[]>('/repos/search?q=&limit=50');
|
||||
let repos: any[] | null = null;
|
||||
|
||||
const searchResult = await this.giteaGet<any>('/repos/search?q=&limit=50');
|
||||
repos = this.extractData<any[]>(searchResult);
|
||||
|
||||
if (!repos || repos.length === 0) {
|
||||
repos = await this.giteaGet<any[]>('/user/repos?limit=50');
|
||||
const userResult = await this.giteaGet<any>('/user/repos?limit=50');
|
||||
repos = this.extractData<any[]>(userResult);
|
||||
}
|
||||
if (!repos) return [];
|
||||
|
||||
const enriched: any[] = [];
|
||||
for (const r of repos) {
|
||||
const fullName = r.full_name;
|
||||
// Just use open_issues_count from the search result; skip extra API calls
|
||||
enriched.push({
|
||||
id: r.id, name: r.name, fullName, description: r.description,
|
||||
owner: r.owner?.login, stars: r.stars_count ?? 0, forks: r.forks_count ?? 0,
|
||||
@ -43,20 +55,24 @@ export class GiteaService {
|
||||
}
|
||||
|
||||
async getMilestones(owner: string, repo: string) {
|
||||
return this.giteaGet<any[]>(`/repos/${owner}/${repo}/milestones?state=all`) ?? [];
|
||||
const result = await this.giteaGet<any>(`/repos/${owner}/${repo}/milestones?state=all`);
|
||||
return this.extractData<any[]>(result) ?? [];
|
||||
}
|
||||
|
||||
async getIssues(owner: string, repo: string, milestone?: string, state = 'open') {
|
||||
let path = `/repos/${owner}/${repo}/issues?state=${state}&limit=50`;
|
||||
if (milestone) path += `&milestone=${milestone}`;
|
||||
return this.giteaGet<any[]>(path) ?? [];
|
||||
const result = await this.giteaGet<any>(path);
|
||||
return this.extractData<any[]>(result) ?? [];
|
||||
}
|
||||
|
||||
async getRunners() {
|
||||
return this.giteaGet<any[]>('/admin/runners') ?? [];
|
||||
const result = await this.giteaGet<any>('/admin/runners');
|
||||
return this.extractData<any[]>(result) ?? [];
|
||||
}
|
||||
|
||||
async getReleases(owner: string, repo: string) {
|
||||
return this.giteaGet<any[]>(`/repos/${owner}/${repo}/releases?limit=20`) ?? [];
|
||||
const result = await this.giteaGet<any>(`/repos/${owner}/${repo}/releases?limit=20`);
|
||||
return this.extractData<any[]>(result) ?? [];
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user