Merge branch 'dev' into test

This commit is contained in:
2026-06-17 17:35:38 +08:00
24 changed files with 30 additions and 41 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ import { useEffect, useRef } from "react";
import Image from "next/image"; import Image from "next/image";
import { useAuthState } from "@/stores/auth/auth-context"; import { useAuthState } from "@/stores/auth/auth-context";
import type { LoginStatus } from "@/models/auth/login-status"; import type { LoginStatus } from "@/data/dto/auth";
import { AuthStorage } from "@/data/storage/auth/auth_storage"; import { AuthStorage } from "@/data/storage/auth/auth_storage";
import { useChatDispatch, useChatState } from "@/stores/chat/chat-context"; import { useChatDispatch, useChatState } from "@/stores/chat/chat-context";
+2 -2
View File
@@ -16,7 +16,7 @@
*/ */
import { useEffect, useRef } from "react"; import { useEffect, useRef } from "react";
import type { UiMessage } from "@/models/chat/ui-message"; import type { UiMessage } from "@/data/dto/chat";
import { AiDisclosureBanner } from "./ai-disclosure-banner"; import { AiDisclosureBanner } from "./ai-disclosure-banner";
import { DateHeader } from "./date-header"; import { DateHeader } from "./date-header";
@@ -79,4 +79,4 @@ function renderMessagesWithDateHeaders(messages: readonly UiMessage[]) {
/> />
), ),
); );
} }
@@ -8,4 +8,5 @@ export const AuthPanelMode = {
Email: "email", Email: "email",
} as const; } as const;
export type AuthPanelMode = (typeof AuthPanelMode)[keyof typeof AuthPanelMode]; export type AuthPanelMode =
(typeof AuthPanelMode)[keyof typeof AuthPanelMode];
+3
View File
@@ -3,12 +3,15 @@
*/ */
export * from "./apple_login_request"; export * from "./apple_login_request";
export * from "./auth_mode";
export * from "./auth_panel_mode";
export * from "./facebook_login_request"; export * from "./facebook_login_request";
export * from "./facebook_user_data"; export * from "./facebook_user_data";
export * from "./fb_id_login_request"; export * from "./fb_id_login_request";
export * from "./google_login_request"; export * from "./google_login_request";
export * from "./guest_login_request"; export * from "./guest_login_request";
export * from "./guest_login_response"; export * from "./guest_login_response";
export * from "./login_status";
export * from "./login_request"; export * from "./login_request";
export * from "./login_response"; export * from "./login_response";
export * from "./logout_response"; export * from "./logout_response";
@@ -9,7 +9,7 @@
* - loading-animationAI * - loading-animationAI
* - message * - message
*/ */
import type { UiMessage } from "./ui-message"; import type { UiMessage } from "./ui_message";
export type ChatListItem = export type ChatListItem =
| { type: "ai-disclosure" } | { type: "ai-disclosure" }
+2
View File
@@ -3,6 +3,7 @@
*/ */
export * from "./chat_history_response"; export * from "./chat_history_response";
export * from "./chat_list_item";
export * from "./chat_message"; export * from "./chat_message";
export * from "./chat_send_response"; export * from "./chat_send_response";
export * from "./chat_sync_data"; export * from "./chat_sync_data";
@@ -12,3 +13,4 @@ export * from "./image_upload_response";
export * from "./send_message_request"; export * from "./send_message_request";
export * from "./stt_data"; export * from "./stt_data";
export * from "./sync_message"; export * from "./sync_message";
export * from "./ui_message";
@@ -25,7 +25,12 @@ export const UiMessage = {
create(input: Omit<UiMessage, "date"> & { date?: string }): UiMessage { create(input: Omit<UiMessage, "date"> & { date?: string }): UiMessage {
return UiMessageSchema.parse({ return UiMessageSchema.parse({
...input, ...input,
date: input.date ?? new Date().toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }), date:
input.date ??
new Date().toLocaleTimeString([], {
hour: "2-digit",
minute: "2-digit",
}),
}); });
}, },
}; };
+1
View File
@@ -10,3 +10,4 @@ export * from "./recent_memory";
export * from "./update_profile_request"; export * from "./update_profile_request";
export * from "./user"; export * from "./user";
export * from "./user_stats_response"; export * from "./user_stats_response";
export * from "./user_view";
@@ -20,6 +20,4 @@ export const UserViewSchema = z.object({
stripeCustomerId: z.string().nullable(), stripeCustomerId: z.string().nullable(),
}); });
export type UserView = z.infer<typeof UserViewSchema>; export type UserView = z.infer<typeof UserViewSchema>;
-7
View File
@@ -1,7 +0,0 @@
/**
* @file Automatically generated by barrelsby.
*/
export * from "./auth-mode";
export * from "./auth-panel-mode";
export * from "./login-status";
-6
View File
@@ -1,6 +0,0 @@
/**
* @file Automatically generated by barrelsby.
*/
export * from "./chat-list-item";
export * from "./ui-message";
-5
View File
@@ -1,5 +0,0 @@
/**
* @file Automatically generated by barrelsby.
*/
export * from "./user";
+1 -1
View File
@@ -4,7 +4,7 @@
import { fromPromise } from "xstate"; import { fromPromise } from "xstate";
import { AuthPlatform, type AuthProvider } from "@/lib/auth/auth_platform"; import { AuthPlatform, type AuthProvider } from "@/lib/auth/auth_platform";
import type { LoginStatus } from "@/models/auth/login-status"; import type { LoginStatus } from "@/data/dto/auth";
import { authRepository } from "@/data/repositories/auth_repository"; import { authRepository } from "@/data/repositories/auth_repository";
import type { IAuthRepository } from "@/data/repositories/interfaces"; import type { IAuthRepository } from "@/data/repositories/interfaces";
import { AuthStorage } from "@/data/storage/auth/auth_storage"; import { AuthStorage } from "@/data/storage/auth/auth_storage";
+1 -2
View File
@@ -4,8 +4,7 @@
* 事件名与原 Dart AuthEvent 对齐。 * 事件名与原 Dart AuthEvent 对齐。
*/ */
import type { AuthProvider } from "@/lib/auth/auth_platform"; import type { AuthProvider } from "@/lib/auth/auth_platform";
import type { AuthMode } from "@/models/auth/auth-mode"; import type { AuthMode, AuthPanelMode } from "@/data/dto/auth";
import type { AuthPanelMode } from "@/models/auth/auth-panel-mode";
export type AuthEvent = export type AuthEvent =
// 内部 UI 事件 // 内部 UI 事件
+1 -3
View File
@@ -1,9 +1,7 @@
/** /**
* Auth 状态机:State 形状 + 初始值 * Auth 状态机:State 形状 + 初始值
*/ */
import type { AuthMode } from "@/models/auth/auth-mode"; import type { AuthMode, AuthPanelMode, LoginStatus } from "@/data/dto/auth";
import type { AuthPanelMode } from "@/models/auth/auth-panel-mode";
import type { LoginStatus } from "@/models/auth/login-status";
export interface AuthState { export interface AuthState {
/** 当前面板模式(Facebook / Email */ /** 当前面板模式(Facebook / Email */
+1 -1
View File
@@ -308,4 +308,4 @@ export const sendMessageWsActor = fromPromise<void, { content: string }>(
); );
// Re-export `UiMessage` type for the chat-machine.ts public API // Re-export `UiMessage` type for the chat-machine.ts public API
type UiMessage = import("@/models/chat/ui-message").UiMessage; type UiMessage = import("@/data/dto/chat").UiMessage;
+1 -1
View File
@@ -20,7 +20,7 @@
* - `AuthStorage` import 已删(只 `readInitData` 用过,移到 `chatInit` actor 上层调用) * - `AuthStorage` import 已删(只 `readInitData` 用过,移到 `chatInit` actor 上层调用)
*/ */
import type { UiMessage } from "@/models/chat/ui-message"; import type { UiMessage } from "@/data/dto/chat";
import { chatRepository } from "@/data/repositories/chat_repository"; import { chatRepository } from "@/data/repositories/chat_repository";
import type { IChatRepository } from "@/data/repositories/interfaces"; import type { IChatRepository } from "@/data/repositories/interfaces";
import { ChatStorage } from "@/data/storage/chat/chat_storage"; import { ChatStorage } from "@/data/storage/chat/chat_storage";
+1 -1
View File
@@ -9,7 +9,7 @@
* - `ChatWebSocketConnected` 事件 → true * - `ChatWebSocketConnected` 事件 → true
* - `userSession.exit` → falseWS actor cleanup 时也会跑 exit * - `userSession.exit` → falseWS actor cleanup 时也会跑 exit
*/ */
import type { UiMessage } from "@/models/chat/ui-message"; import type { UiMessage } from "@/data/dto/chat";
export interface ChatState { export interface ChatState {
messages: UiMessage[]; messages: UiMessage[];
+1 -1
View File
@@ -1,7 +1,7 @@
/** /**
* User 状态机:事件联合 * User 状态机:事件联合
*/ */
import type { UserView } from "@/models/user/user"; import type { UserView } from "@/data/dto/user";
export type UserEvent = export type UserEvent =
| { type: "UserInit" } | { type: "UserInit" }
+2 -2
View File
@@ -14,7 +14,7 @@
import { fromPromise } from "xstate"; import { fromPromise } from "xstate";
import type { UserView } from "@/models/user/user"; import type { UserView } from "@/data/dto/user";
import { userRepository } from "@/data/repositories/user_repository"; import { userRepository } from "@/data/repositories/user_repository";
import { authRepository } from "@/data/repositories/auth_repository"; import { authRepository } from "@/data/repositories/auth_repository";
import type { import type {
@@ -70,4 +70,4 @@ export const userFetchActor = fromPromise<UserView | null>(async () => {
*/ */
export const userLogoutActor = fromPromise<void>(async () => { export const userLogoutActor = fromPromise<void>(async () => {
await authRepo.logout(); await authRepo.logout();
}); });
+2 -2
View File
@@ -13,7 +13,7 @@
* - machine 依赖 actorsimport)—— 不直接依赖 helpers * - machine 依赖 actorsimport)—— 不直接依赖 helpers
*/ */
import type { UserView } from "@/models/user/user"; import type { UserView } from "@/data/dto/user";
import { UserStorage } from "@/data/storage/user/user_storage"; import { UserStorage } from "@/data/storage/user/user_storage";
import { Result } from "@/utils/result"; import { Result } from "@/utils/result";
@@ -102,4 +102,4 @@ export async function readInitData(): Promise<InitData> {
} }
return { user, avatarUrl }; return { user, avatarUrl };
} }
+1 -1
View File
@@ -1,7 +1,7 @@
/** /**
* User 状态机:State 形状 + 初始值 * User 状态机:State 形状 + 初始值
*/ */
import type { UserView } from "@/models/user/user"; import type { UserView } from "@/data/dto/user";
export interface UserState { export interface UserState {
currentUser: UserView | null; currentUser: UserView | null;