压缩历史至 95081aff

This commit is contained in:
ryan
2026-06-08 20:34:27 +08:00
commit 8a782525de
435 changed files with 71146 additions and 0 deletions
@@ -0,0 +1,26 @@
/**
* Leaderboard 服务模块
*
* @description
* 提供排行榜相关的服务,基于 available_balance 排序
*
* @example
* ```typescript
* import { LeaderboardService } from '@/lib/services/leaderboard';
*
* // 获取排行榜
* const list = await LeaderboardService.getList({ page: 1, page_size: 20 });
*
* // 获取当前用户排名
* const myRank = await LeaderboardService.getMyRank();
* ```
*/
export { LeaderboardService } from "./leaderboard.service";
export type {
LeaderboardEntry,
LeaderboardListRequest,
LeaderboardListResponse,
UserRankInfo,
UserRankResponse,
} from "./types";
@@ -0,0 +1,42 @@
import { BaseService } from "../core/base.service";
import type {
LeaderboardListRequest,
LeaderboardListResponse,
UserRankResponse,
} from "./types";
/**
* 排行榜服务
* 基于 available_balance 排序
*/
export class LeaderboardService extends BaseService {
protected static readonly basePath = "/api/v1/leaderboard";
/**
* 获取排行榜列表
* @param params - 分页参数
* @returns 排行榜列表响应
*/
static async getList(
params?: LeaderboardListRequest,
): Promise<LeaderboardListResponse> {
return this.get<LeaderboardListResponse>("", params);
}
/**
* 获取当前用户排名
* @returns 用户排名响应
*/
static async getMyRank(): Promise<UserRankResponse> {
return this.get<UserRankResponse>("/me");
}
/**
* 获取指定用户排名
* @param userId - 用户 ID
* @returns 用户排名响应
*/
static async getUserRankById(userId: number): Promise<UserRankResponse> {
return this.get<UserRankResponse>(`/users/${ userId }`);
}
}
@@ -0,0 +1,68 @@
/**
* Leaderboard 服务类型定义
* 使用 available_balance 排序
*/
/**
* 排行榜条目
*/
export interface LeaderboardEntry {
/** 用户ID */
user_id: number;
/** 用户名 */
username: string;
/** 头像URL */
avatar_url: string;
/** 可用余额 */
available_balance: string;
}
/**
* 排行榜请求参数
*/
export interface LeaderboardListRequest {
/** 页码 */
page: number;
/** 每页数量 */
page_size: number;
/** 索引签名 */
[key: string]: unknown;
}
/**
* 排行榜列表响应
*/
export interface LeaderboardListResponse {
/** 排序字段 */
sort_by: string;
/** 排序方向 */
order: string;
/** 当前页码 */
page: number;
/** 每页数量 */
page_size: number;
/** 总数 */
total: number;
/** 排行榜条目列表 */
items: LeaderboardEntry[];
}
/**
* 用户排名信息
*/
export interface UserRankInfo {
/** 用户ID */
user_id: number;
/** 排名 */
rank: number;
/** 可用余额 */
available_balance: string;
}
/**
* 用户排名响应
*/
export interface UserRankResponse {
/** 用户排名信息 */
user: UserRankInfo;
}