Gitee

by normal-coder
Verified
  • operations
import { z } from "zod"; import { giteeRequest, validateOwnerName, getGiteeApiBaseUrl } from "../common/utils.js"; import { GiteeUserSchema } from "../common/types.js"; // Schema definitions export const GetUserSchema = z.object({ // 用户名 username: z.string().describe("Username"), }); export const SearchUsersSchema = z.object({ // 搜索关键词 q: z.string().describe("Search keyword"), // 当前的页码 page: z.number().int().min(1).default(1).optional().describe("Page number"), // 每页的数量,最大为 100 per_page: z.number().int().min(1).max(100).default(30).optional().describe("Number of items per page, maximum 100"), // 排序字段 sort: z.enum(["followers", "repositories", "joined"]).default("followers").optional().describe("Sort field"), // 排序方式 order: z.enum(["desc", "asc"]).default("desc").optional().describe("Sort direction"), }); // Type exports export type GetUserOptions = z.infer<typeof GetUserSchema>; export type SearchUsersOptions = z.infer<typeof SearchUsersSchema>; // Function implementations export async function getUser(username: string) { username = validateOwnerName(username); const url = `/users/${username}`; const response = await giteeRequest(url, "GET"); return GiteeUserSchema.parse(response); } export async function getCurrentUser() { const url = "/user"; const response = await giteeRequest(url, "GET"); return GiteeUserSchema.parse(response); } export async function searchUsers(options: SearchUsersOptions) { const { q, page, per_page, sort, order } = options; const url = new URL(`${getGiteeApiBaseUrl()}/search/users`); url.searchParams.append("q", q); if (page !== undefined) { url.searchParams.append("page", page.toString()); } if (per_page !== undefined) { url.searchParams.append("per_page", per_page.toString()); } if (sort) { url.searchParams.append("sort", sort); } if (order) { url.searchParams.append("order", order); } const response = await giteeRequest(url.toString(), "GET"); return { total_count: (response as any).total_count || 0, items: z.array(GiteeUserSchema).parse((response as any).items || []), }; }