refactor(dto): move app models into dto layer

This commit is contained in:
2026-06-17 17:34:55 +08:00
parent f0b5275c55
commit 5d66cef85c
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 { 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 { useChatDispatch, useChatState } from "@/stores/chat/chat-context";
+2 -2
View File
@@ -16,7 +16,7 @@
*/
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 { DateHeader } from "./date-header";
@@ -79,4 +79,4 @@ function renderMessagesWithDateHeaders(messages: readonly UiMessage[]) {
/>
),
);
}
}
@@ -8,4 +8,5 @@ export const AuthPanelMode = {
Email: "email",
} 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 "./auth_mode";
export * from "./auth_panel_mode";
export * from "./facebook_login_request";
export * from "./facebook_user_data";
export * from "./fb_id_login_request";
export * from "./google_login_request";
export * from "./guest_login_request";
export * from "./guest_login_response";
export * from "./login_status";
export * from "./login_request";
export * from "./login_response";
export * from "./logout_response";
@@ -9,7 +9,7 @@
* - loading-animationAI
* - message
*/
import type { UiMessage } from "./ui-message";
import type { UiMessage } from "./ui_message";
export type ChatListItem =
| { type: "ai-disclosure" }
+2
View File
@@ -3,6 +3,7 @@
*/
export * from "./chat_history_response";
export * from "./chat_list_item";
export * from "./chat_message";
export * from "./chat_send_response";
export * from "./chat_sync_data";
@@ -12,3 +13,4 @@ export * from "./image_upload_response";
export * from "./send_message_request";
export * from "./stt_data";
export * from "./sync_message";
export * from "./ui_message";
@@ -25,7 +25,12 @@ export const UiMessage = {
create(input: Omit<UiMessage, "date"> & { date?: string }): UiMessage {
return UiMessageSchema.parse({
...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 "./user";
export * from "./user_stats_response";
export * from "./user_view";
@@ -20,6 +20,4 @@ export const UserViewSchema = z.object({
stripeCustomerId: z.string().nullable(),
});
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 { 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 type { IAuthRepository } from "@/data/repositories/interfaces";
import { AuthStorage } from "@/data/storage/auth/auth_storage";
+1 -2
View File
@@ -4,8 +4,7 @@
* 事件名与原 Dart AuthEvent 对齐。
*/
import type { AuthProvider } from "@/lib/auth/auth_platform";
import type { AuthMode } from "@/models/auth/auth-mode";
import type { AuthPanelMode } from "@/models/auth/auth-panel-mode";
import type { AuthMode, AuthPanelMode } from "@/data/dto/auth";
export type AuthEvent =
// 内部 UI 事件
+1 -3
View File
@@ -1,9 +1,7 @@
/**
* Auth 状态机:State 形状 + 初始值
*/
import type { AuthMode } from "@/models/auth/auth-mode";
import type { AuthPanelMode } from "@/models/auth/auth-panel-mode";
import type { LoginStatus } from "@/models/auth/login-status";
import type { AuthMode, AuthPanelMode, LoginStatus } from "@/data/dto/auth";
export interface AuthState {
/** 当前面板模式(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
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 上层调用)
*/
import type { UiMessage } from "@/models/chat/ui-message";
import type { UiMessage } from "@/data/dto/chat";
import { chatRepository } from "@/data/repositories/chat_repository";
import type { IChatRepository } from "@/data/repositories/interfaces";
import { ChatStorage } from "@/data/storage/chat/chat_storage";
+1 -1
View File
@@ -9,7 +9,7 @@
* - `ChatWebSocketConnected` 事件 → true
* - `userSession.exit` → falseWS actor cleanup 时也会跑 exit
*/
import type { UiMessage } from "@/models/chat/ui-message";
import type { UiMessage } from "@/data/dto/chat";
export interface ChatState {
messages: UiMessage[];
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* User 状态机:事件联合
*/
import type { UserView } from "@/models/user/user";
import type { UserView } from "@/data/dto/user";
export type UserEvent =
| { type: "UserInit" }
+2 -2
View File
@@ -14,7 +14,7 @@
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 { authRepository } from "@/data/repositories/auth_repository";
import type {
@@ -70,4 +70,4 @@ export const userFetchActor = fromPromise<UserView | null>(async () => {
*/
export const userLogoutActor = fromPromise<void>(async () => {
await authRepo.logout();
});
});
+2 -2
View File
@@ -13,7 +13,7 @@
* - 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 { Result } from "@/utils/result";
@@ -102,4 +102,4 @@ export async function readInitData(): Promise<InitData> {
}
return { user, avatarUrl };
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* User 状态机:State 形状 + 初始值
*/
import type { UserView } from "@/models/user/user";
import type { UserView } from "@/data/dto/user";
export interface UserState {
currentUser: UserView | null;