refactor(data): add I*Repository interfaces and depend on them in stores

为 /src/data/repositories/ 下每个仓库类增加对应的接口契约,
接口文件存放在独立的 interfaces/ 子目录中。

改动:
- 新建 4 个接口文件 (iauth_repository / ichat_repository /
  imetrics_repository / iuser_repository),纯 type-only,方法签名
  与实现类完全一致
- 4 个实现类加 implements I{Name}Repository 子句,编译器自动校验契约
- 3 个 stores 文件 (auth / chat / user state machines) 改为依赖接口
  类型:通过 `const xxxRepo: I{Name}Repository = xxxRepository` 局部别名,
  actor 内部调用全部走别名
- barrelsby.json 加入 interfaces/ 目录,让自动 barrel 能覆盖
- Auto-regenerated repositories/index.ts 与 interfaces/index.ts

参照 storage 层已有的 IAuthStorage / IChatStorage / IUserStorage 模式。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-11 17:00:47 +08:00
parent 1151a9a61b
commit 982d9ba790
14 changed files with 232 additions and 15 deletions
@@ -0,0 +1,37 @@
"use client";
/**
* IUserRepository 接口
*
* 对齐 Dart 端 `UserRepository` 抽象(lib/data/repositories/user_repository.dart):
* - 纯远程调用,不直接写本地 storage(持久化由 AuthRepository 在登录流程中处理)
*
* 原始 Dart: lib/data/repositories/user_repository_impl.dart
*/
import type { Result } from "@/utils/result";
import type { CreditsData } from "@/data/dto/user/credits_data";
import type { CreditsHistoryData } from "@/data/dto/user/credits_history_data";
import type { UpdateProfileRequest } from "@/data/dto/user/update_profile_request";
import type { User } from "@/data/dto/user/user";
import type { UserStatsResponse } from "@/data/dto/user/user_stats_response";
export interface IUserRepository {
/** 获取用户统计信息。 */
getUserStats(): Promise<Result<UserStatsResponse>>;
/** 获取当前登录用户信息。 */
getCurrentUser(): Promise<Result<User>>;
/** 更新个人资料。 */
updateProfile(request: UpdateProfileRequest): Promise<Result<User>>;
/** 查询积分余额。 */
getCredits(): Promise<Result<CreditsData>>;
/** 查询积分操作历史,分页参数默认 limit=50, offset=0。 */
getCreditsHistory(
limit?: number,
offset?: number,
): Promise<Result<CreditsHistoryData>>;
}