refactor(logging): centralize console output
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
* - 登录成功后调 `_saveLoginData` 持久化 token + User
|
||||
* - 登出先调 API,再强制清本地态(无论 API 成败)
|
||||
* - `getCurrentUser` 成功后尽力写本地 User 缓存(不因缓存失败影响主流程)
|
||||
* - 写 storage 失败用 `console.warn` 记录,不让本地缓存失败影响主流程
|
||||
* - 写 storage 失败用 `Logger.warn` 记录,不让本地缓存失败影响主流程
|
||||
*
|
||||
* 原始 Dart: lib/data/repositories/auth_repository_impl.dart
|
||||
*/
|
||||
@@ -28,11 +28,13 @@ import {
|
||||
SendCodeRequest,
|
||||
} from "@/data/dto/auth";
|
||||
import { User } from "@/data/dto/user";
|
||||
import { Result } from "@/utils";
|
||||
import { Result, Logger } from "@/utils";
|
||||
import type { IAuthRepository } from "@/data/repositories/interfaces";
|
||||
import { AuthStorage, type IAuthStorage } from "@/data/storage/auth";
|
||||
import { UserStorage, type IUserStorage } from "@/data/storage/user";
|
||||
|
||||
const log = new Logger("DataRepositoriesAuthRepository");
|
||||
|
||||
/** 硬编码平台名,对齐 Dart `PlatformUtil.platformName.toLowerCase()`(Web 平台)。 */
|
||||
const WEB_PLATFORM = "web";
|
||||
|
||||
@@ -106,7 +108,7 @@ export class AuthRepository implements IAuthRepository {
|
||||
await this.api.logout();
|
||||
} catch (e) {
|
||||
// API 失败也要继续清本地态
|
||||
console.warn("[AuthRepository] logout API failed, clearing local anyway", e);
|
||||
log.warn("[AuthRepository] logout API failed, clearing local anyway", e);
|
||||
}
|
||||
try {
|
||||
await this.storage.clearAuthData();
|
||||
@@ -123,7 +125,7 @@ export class AuthRepository implements IAuthRepository {
|
||||
* 成功后写 guest token + deviceId + userId。
|
||||
*/
|
||||
async guestLogin(deviceId: string): Promise<Result<GuestLoginResponse>> {
|
||||
console.log("[AuthRepository.guestLogin] API call START", {
|
||||
log.debug("[AuthRepository.guestLogin] API call START", {
|
||||
deviceIdLength: deviceId.length,
|
||||
deviceIdPrefix: deviceId.slice(0, 8),
|
||||
});
|
||||
@@ -131,7 +133,7 @@ export class AuthRepository implements IAuthRepository {
|
||||
const response = await this.api.guestLogin(
|
||||
GuestLoginRequest.from({ deviceId }),
|
||||
);
|
||||
console.log("[AuthRepository.guestLogin] API call SUCCESS (Zod parsed)", {
|
||||
log.debug("[AuthRepository.guestLogin] API call SUCCESS (Zod parsed)", {
|
||||
hasToken: !!response.token,
|
||||
hasUser: !!response.user,
|
||||
userLastMessageAt: response.user?.lastMessageAt,
|
||||
@@ -143,7 +145,7 @@ export class AuthRepository implements IAuthRepository {
|
||||
}
|
||||
return response;
|
||||
}).catch((e) => {
|
||||
console.error("[AuthRepository.guestLogin] API call FAILED", {
|
||||
log.error("[AuthRepository.guestLogin] API call FAILED", {
|
||||
errorName: e?.name,
|
||||
errorMessage: e?.message,
|
||||
});
|
||||
@@ -238,14 +240,14 @@ export class AuthRepository implements IAuthRepository {
|
||||
|
||||
/**
|
||||
* 获取当前登录用户。成功后尽力写本地 User 缓存(offline hydrate),
|
||||
* 缓存失败用 `console.warn` 记录,不影响主流程。
|
||||
* 缓存失败用 `Logger.warn` 记录,不影响主流程。
|
||||
*/
|
||||
async getCurrentUser(): Promise<Result<User>> {
|
||||
return Result.wrap(async () => {
|
||||
const user = await this.api.getCurrentUser();
|
||||
const writeResult = await this.userStorage.setUser(user.toJson());
|
||||
if (!writeResult.success) {
|
||||
console.warn(
|
||||
log.warn(
|
||||
"[AuthRepository] failed to cache current user",
|
||||
writeResult.error,
|
||||
);
|
||||
@@ -272,27 +274,27 @@ export class AuthRepository implements IAuthRepository {
|
||||
|
||||
/**
|
||||
* 持久化登录态:login token → refresh token → User 对象 → userId。
|
||||
* 全部 best-effort,错误用 `console.warn` 记录但不让登录「失败」——
|
||||
* 全部 best-effort,错误用 `Logger.warn` 记录但不让登录「失败」——
|
||||
* 调用方已经从 API 拿到了 LoginResponse,缓存只是离线加速。
|
||||
*/
|
||||
private async _saveLoginData(data: LoginResponse): Promise<void> {
|
||||
const r1 = await this.storage.setLoginToken(data.token);
|
||||
if (!r1.success) {
|
||||
console.warn("[AuthRepository] setLoginToken failed", r1.error);
|
||||
log.warn("[AuthRepository] setLoginToken failed", r1.error);
|
||||
}
|
||||
if (data.refreshToken) {
|
||||
const r2 = await this.storage.setRefreshToken(data.refreshToken);
|
||||
if (!r2.success) {
|
||||
console.warn("[AuthRepository] setRefreshToken failed", r2.error);
|
||||
log.warn("[AuthRepository] setRefreshToken failed", r2.error);
|
||||
}
|
||||
}
|
||||
const r3 = await this.userStorage.setUser(data.user.toJson());
|
||||
if (!r3.success) {
|
||||
console.warn("[AuthRepository] setUser failed", r3.error);
|
||||
log.warn("[AuthRepository] setUser failed", r3.error);
|
||||
}
|
||||
const r4 = await this.userStorage.setUserId(data.user.id);
|
||||
if (!r4.success) {
|
||||
console.warn("[AuthRepository] setUserId failed", r4.error);
|
||||
log.warn("[AuthRepository] setUserId failed", r4.error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@ import { RegisterRequest } from "@/data/dto/auth/register_request";
|
||||
import { SendCodeRequest } from "@/data/dto/auth/send_code_request";
|
||||
import { User } from "@/data/dto/user/user";
|
||||
import type { UserData } from "@/data/schemas/user/user";
|
||||
import { Logger } from "@/utils";
|
||||
|
||||
const log = new Logger("DataServicesApiAuthApi");
|
||||
|
||||
export class AuthApi {
|
||||
/**
|
||||
@@ -123,10 +126,10 @@ export class AuthApi {
|
||||
method: "POST",
|
||||
body: body.toJson(),
|
||||
});
|
||||
console.log("[AuthApi.guestLogin] raw envelope from backend", env);
|
||||
log.debug("[AuthApi.guestLogin] raw envelope from backend", env);
|
||||
const unwrapped = unwrap(env) as Record<string, unknown>;
|
||||
const userObj = unwrapped.user as { lastMessageAt?: unknown } | undefined;
|
||||
console.log("[AuthApi.guestLogin] unwrapped data (pre-parse)", {
|
||||
log.debug("[AuthApi.guestLogin] unwrapped data (pre-parse)", {
|
||||
hasUser: "user" in unwrapped,
|
||||
userKeys: userObj && typeof userObj === "object" ? Object.keys(userObj) : null,
|
||||
lastMessageAt: userObj?.lastMessageAt,
|
||||
@@ -136,13 +139,13 @@ export class AuthApi {
|
||||
return GuestLoginResponse.fromJson(unwrapped);
|
||||
} catch (e) {
|
||||
if (e instanceof z.ZodError) {
|
||||
console.error("[AuthApi.guestLogin] ZodError parsing response", {
|
||||
log.error("[AuthApi.guestLogin] ZodError parsing response", {
|
||||
issueCount: e.issues.length,
|
||||
firstIssue: e.issues[0],
|
||||
allPaths: e.issues.map((i) => i.path),
|
||||
});
|
||||
} else {
|
||||
console.error("[AuthApi.guestLogin] unexpected error", e);
|
||||
log.error("[AuthApi.guestLogin] unexpected error", e);
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user