refactor(data): consolidate data layer under services namespace

- Move src/data/{api,dto,schemas} directories to src/data/services/*
- Update all relative imports across the codebase to reference new paths
- Use CSS color tokens for splash button gradient in splash-button.module.css
- Add responsive sizes attribute to splash background image
- Add JSDoc documentation to splash-background component referencing original Dart implementation
This commit is contained in:
2026-06-09 16:44:05 +08:00
parent 763bec4e74
commit 661e417619
98 changed files with 57 additions and 44 deletions
@@ -1,4 +1,17 @@
"use client"; "use client";
/**
* Splash 背景图片
*
* 原始 Dart: lib/ui/splash/widgets/splash_background.dart
* `SizedBox.expand(child: Assets.images.picBgHome.image(fit: BoxFit.cover))`
* 资源: /public/images/splash/pic-bg-home.png (kebab-case 重命名后)
* 原名: pic_bg_home.png (snake_case)
*
* sizes 属性说明:
* 图片在 MobileShell 内(max-width: 500px)。
* - 视口 ≤ 500pxMobileShell = 100vw,图片 = 100vw
* - 视口 > 500pxMobileShell = 500px,图片 = 500px
*/
import Image from "next/image"; import Image from "next/image";
import styles from "./splash-background.module.css"; import styles from "./splash-background.module.css";
@@ -10,7 +23,7 @@ export function SplashBackground() {
alt="" alt=""
fill fill
priority priority
sizes="100vw" sizes="(max-width: 500px) 100vw, 500px"
className={styles.image} className={styles.image}
/> />
</div> </div>
@@ -34,10 +34,11 @@
padding: 0 30px; padding: 0 30px;
border: 0; border: 0;
border-radius: 24px; border-radius: 24px;
/* 渐变色引用 tokens/colors.css 中定义的 token */
background: linear-gradient( background: linear-gradient(
to right, to right,
#fff96ade, var(--color-button-gradient-start),
#fff657a0 var(--color-button-gradient-end)
); );
color: #ffffff; color: #ffffff;
font-weight: 700; font-weight: 700;
@@ -21,7 +21,7 @@ import { RefreshTokenResponse } from "@/data/dto/auth/refresh_token_response";
import { RegisterRequest } from "@/data/dto/auth/register_request"; import { RegisterRequest } from "@/data/dto/auth/register_request";
import { SendCodeRequest } from "@/data/dto/auth/send_code_request"; import { SendCodeRequest } from "@/data/dto/auth/send_code_request";
import { User } from "@/data/dto/user/user"; import { User } from "@/data/dto/user/user";
import type { UserData } from "@/data/schemas/user/user"; import type { UserData } from "@/data/services/schemas/user/user";
export class AuthApi { export class AuthApi {
/** /**
@@ -12,7 +12,7 @@ import { CreditsHistoryData } from "@/data/dto/user/credits_history_data";
import { UpdateProfileRequest } from "@/data/dto/user/update_profile_request"; import { UpdateProfileRequest } from "@/data/dto/user/update_profile_request";
import { User } from "@/data/dto/user/user"; import { User } from "@/data/dto/user/user";
import { UserStatsResponse } from "@/data/dto/user/user_stats_response"; import { UserStatsResponse } from "@/data/dto/user/user_stats_response";
import type { UserData } from "@/data/schemas/user/user"; import type { UserData } from "@/data/services/schemas/user/user";
export class UserApi { export class UserApi {
/** /**
@@ -5,7 +5,7 @@ import {
AppleLoginRequestSchema, AppleLoginRequestSchema,
type AppleLoginRequestInput, type AppleLoginRequestInput,
type AppleLoginRequestData, type AppleLoginRequestData,
} from "@/data/schemas/auth/apple_login_request"; } from "@/data/services/schemas/auth/apple_login_request";
export class AppleLoginRequest { export class AppleLoginRequest {
declare readonly identityToken: string; declare readonly identityToken: string;
@@ -5,7 +5,7 @@ import {
FacebookLoginRequestSchema, FacebookLoginRequestSchema,
type FacebookLoginRequestInput, type FacebookLoginRequestInput,
type FacebookLoginRequestData, type FacebookLoginRequestData,
} from "@/data/schemas/auth/facebook_login_request"; } from "@/data/services/schemas/auth/facebook_login_request";
export class FacebookLoginRequest { export class FacebookLoginRequest {
declare readonly accessToken: string; declare readonly accessToken: string;
@@ -7,7 +7,7 @@ import {
FacebookUserDataSchema, FacebookUserDataSchema,
type FacebookUserDataInput, type FacebookUserDataInput,
type FacebookUserDataData, type FacebookUserDataData,
} from "@/data/schemas/auth/facebook_user_data"; } from "@/data/services/schemas/auth/facebook_user_data";
export class FacebookUserData { export class FacebookUserData {
declare readonly id: string | null; declare readonly id: string | null;
@@ -5,7 +5,7 @@ import {
FbIdLoginRequestSchema, FbIdLoginRequestSchema,
type FbIdLoginRequestInput, type FbIdLoginRequestInput,
type FbIdLoginRequestData, type FbIdLoginRequestData,
} from "@/data/schemas/auth/fb_id_login_request"; } from "@/data/services/schemas/auth/fb_id_login_request";
export class FbIdLoginRequest { export class FbIdLoginRequest {
declare readonly fbId: string; declare readonly fbId: string;
@@ -5,7 +5,7 @@ import {
GoogleLoginRequestSchema, GoogleLoginRequestSchema,
type GoogleLoginRequestInput, type GoogleLoginRequestInput,
type GoogleLoginRequestData, type GoogleLoginRequestData,
} from "@/data/schemas/auth/google_login_request"; } from "@/data/services/schemas/auth/google_login_request";
export class GoogleLoginRequest { export class GoogleLoginRequest {
declare readonly idToken: string; declare readonly idToken: string;
@@ -5,7 +5,7 @@ import {
GuestLoginRequestSchema, GuestLoginRequestSchema,
type GuestLoginRequestInput, type GuestLoginRequestInput,
type GuestLoginRequestData, type GuestLoginRequestData,
} from "@/data/schemas/auth/guest_login_request"; } from "@/data/services/schemas/auth/guest_login_request";
export class GuestLoginRequest { export class GuestLoginRequest {
declare readonly deviceId: string; declare readonly deviceId: string;
@@ -5,7 +5,7 @@ import {
GuestLoginResponseSchema, GuestLoginResponseSchema,
type GuestLoginResponseInput, type GuestLoginResponseInput,
type GuestLoginResponseData, type GuestLoginResponseData,
} from "@/data/schemas/auth/guest_login_response"; } from "@/data/services/schemas/auth/guest_login_response";
import { User } from "@/data/dto/user/user"; import { User } from "@/data/dto/user/user";
export class GuestLoginResponse { export class GuestLoginResponse {
@@ -5,7 +5,7 @@ import {
LoginRequestSchema, LoginRequestSchema,
type LoginRequestInput, type LoginRequestInput,
type LoginRequestData, type LoginRequestData,
} from "@/data/schemas/auth/login_request"; } from "@/data/services/schemas/auth/login_request";
export class LoginRequest { export class LoginRequest {
declare readonly email: string; declare readonly email: string;
@@ -5,7 +5,7 @@ import {
LoginResponseSchema, LoginResponseSchema,
type LoginResponseInput, type LoginResponseInput,
type LoginResponseData, type LoginResponseData,
} from "@/data/schemas/auth/login_response"; } from "@/data/services/schemas/auth/login_response";
import { User } from "@/data/dto/user/user"; import { User } from "@/data/dto/user/user";
export class LoginResponse { export class LoginResponse {
@@ -5,7 +5,7 @@ import {
LogoutResponseSchema, LogoutResponseSchema,
type LogoutResponseInput, type LogoutResponseInput,
type LogoutResponseData, type LogoutResponseData,
} from "@/data/schemas/auth/logout_response"; } from "@/data/services/schemas/auth/logout_response";
export class LogoutResponse { export class LogoutResponse {
declare readonly success: boolean; declare readonly success: boolean;
@@ -5,7 +5,7 @@ import {
RefreshTokenRequestSchema, RefreshTokenRequestSchema,
type RefreshTokenRequestInput, type RefreshTokenRequestInput,
type RefreshTokenRequestData, type RefreshTokenRequestData,
} from "@/data/schemas/auth/refresh_token_request"; } from "@/data/services/schemas/auth/refresh_token_request";
export class RefreshTokenRequest { export class RefreshTokenRequest {
declare readonly refreshToken: string; declare readonly refreshToken: string;
@@ -5,7 +5,7 @@ import {
RefreshTokenResponseSchema, RefreshTokenResponseSchema,
type RefreshTokenResponseInput, type RefreshTokenResponseInput,
type RefreshTokenResponseData, type RefreshTokenResponseData,
} from "@/data/schemas/auth/refresh_token_response"; } from "@/data/services/schemas/auth/refresh_token_response";
export class RefreshTokenResponse { export class RefreshTokenResponse {
declare readonly token: string; declare readonly token: string;
@@ -5,7 +5,7 @@ import {
RegisterRequestSchema, RegisterRequestSchema,
type RegisterRequestInput, type RegisterRequestInput,
type RegisterRequestData, type RegisterRequestData,
} from "@/data/schemas/auth/register_request"; } from "@/data/services/schemas/auth/register_request";
export class RegisterRequest { export class RegisterRequest {
declare readonly username: string; declare readonly username: string;
@@ -5,7 +5,7 @@ import {
SendCodeRequestSchema, SendCodeRequestSchema,
type SendCodeRequestInput, type SendCodeRequestInput,
type SendCodeRequestData, type SendCodeRequestData,
} from "@/data/schemas/auth/send_code_request"; } from "@/data/services/schemas/auth/send_code_request";
export class SendCodeRequest { export class SendCodeRequest {
declare readonly email: string; declare readonly email: string;
@@ -5,7 +5,7 @@ import {
ChatHistoryResponseSchema, ChatHistoryResponseSchema,
type ChatHistoryResponseInput, type ChatHistoryResponseInput,
type ChatHistoryResponseData, type ChatHistoryResponseData,
} from "@/data/schemas/chat/chat_history_response"; } from "@/data/services/schemas/chat/chat_history_response";
import { ChatMessage } from "./chat_message"; import { ChatMessage } from "./chat_message";
export class ChatHistoryResponse { export class ChatHistoryResponse {
@@ -5,7 +5,7 @@ import {
ChatMessageSchema, ChatMessageSchema,
type ChatMessageInput, type ChatMessageInput,
type ChatMessageData, type ChatMessageData,
} from "@/data/schemas/chat/chat_message"; } from "@/data/services/schemas/chat/chat_message";
export class ChatMessage { export class ChatMessage {
declare readonly role: string; declare readonly role: string;
@@ -5,7 +5,7 @@ import {
ChatSendResponseSchema, ChatSendResponseSchema,
type ChatSendResponseInput, type ChatSendResponseInput,
type ChatSendResponseData, type ChatSendResponseData,
} from "@/data/schemas/chat/chat_send_response"; } from "@/data/services/schemas/chat/chat_send_response";
export class ChatSendResponse { export class ChatSendResponse {
declare readonly mode: string; declare readonly mode: string;
@@ -5,7 +5,7 @@ import {
ChatSyncDataSchema, ChatSyncDataSchema,
type ChatSyncDataInput, type ChatSyncDataInput,
type ChatSyncDataData, type ChatSyncDataData,
} from "@/data/schemas/chat/chat_sync_data"; } from "@/data/services/schemas/chat/chat_sync_data";
export class ChatSyncData { export class ChatSyncData {
declare readonly syncedCount: number; declare readonly syncedCount: number;
@@ -5,7 +5,7 @@ import {
ChatSyncRequestSchema, ChatSyncRequestSchema,
type ChatSyncRequestInput, type ChatSyncRequestInput,
type ChatSyncRequestData, type ChatSyncRequestData,
} from "@/data/schemas/chat/chat_sync_request"; } from "@/data/services/schemas/chat/chat_sync_request";
import { SyncMessage } from "./sync_message"; import { SyncMessage } from "./sync_message";
export class ChatSyncRequest { export class ChatSyncRequest {
@@ -5,7 +5,7 @@ import {
GuestChatQuotaSchema, GuestChatQuotaSchema,
type GuestChatQuotaInput, type GuestChatQuotaInput,
type GuestChatQuotaData, type GuestChatQuotaData,
} from "@/data/schemas/chat/guest_chat_quota"; } from "@/data/services/schemas/chat/guest_chat_quota";
export class GuestChatQuota { export class GuestChatQuota {
// 静态常量 // 静态常量
@@ -5,7 +5,7 @@ import {
ImageUploadResponseSchema, ImageUploadResponseSchema,
type ImageUploadResponseInput, type ImageUploadResponseInput,
type ImageUploadResponseData, type ImageUploadResponseData,
} from "@/data/schemas/chat/image_upload_response"; } from "@/data/services/schemas/chat/image_upload_response";
export class ImageUploadResponse { export class ImageUploadResponse {
declare readonly success: boolean; declare readonly success: boolean;
@@ -5,7 +5,7 @@ import {
SendMessageRequestSchema, SendMessageRequestSchema,
type SendMessageRequestInput, type SendMessageRequestInput,
type SendMessageRequestData, type SendMessageRequestData,
} from "@/data/schemas/chat/send_message_request"; } from "@/data/services/schemas/chat/send_message_request";
export class SendMessageRequest { export class SendMessageRequest {
declare readonly message: string; declare readonly message: string;
@@ -5,7 +5,7 @@ import {
SttDataSchema, SttDataSchema,
type SttDataInput, type SttDataInput,
type SttDataData, type SttDataData,
} from "@/data/schemas/chat/stt_data"; } from "@/data/services/schemas/chat/stt_data";
export class SttData { export class SttData {
declare readonly text: string; declare readonly text: string;
@@ -5,7 +5,7 @@ import {
SyncMessageSchema, SyncMessageSchema,
type SyncMessageInput, type SyncMessageInput,
type SyncMessageData, type SyncMessageData,
} from "@/data/schemas/chat/sync_message"; } from "@/data/services/schemas/chat/sync_message";
export class SyncMessage { export class SyncMessage {
declare readonly role: string; declare readonly role: string;
@@ -5,7 +5,7 @@ import {
AppEventSchema, AppEventSchema,
type AppEventInput, type AppEventInput,
type AppEventData, type AppEventData,
} from "@/data/schemas/metrics/app_event"; } from "@/data/services/schemas/metrics/app_event";
export class AppEvent { export class AppEvent {
declare readonly userId: string; declare readonly userId: string;
@@ -5,7 +5,7 @@ import {
PwaEventSchema, PwaEventSchema,
type PwaEventInput, type PwaEventInput,
type PwaEventData, type PwaEventData,
} from "@/data/schemas/metrics/pwa_event"; } from "@/data/services/schemas/metrics/pwa_event";
export class PwaEvent { export class PwaEvent {
declare readonly deviceId: string; declare readonly deviceId: string;
@@ -5,7 +5,7 @@ import {
AvatarDataSchema, AvatarDataSchema,
type AvatarDataInput, type AvatarDataInput,
type AvatarDataData, type AvatarDataData,
} from "@/data/schemas/user/avatar_data"; } from "@/data/services/schemas/user/avatar_data";
export class AvatarData { export class AvatarData {
declare readonly avatarUrl: string; declare readonly avatarUrl: string;
@@ -5,7 +5,7 @@ import {
CreditsDataSchema, CreditsDataSchema,
type CreditsDataInput, type CreditsDataInput,
type CreditsDataData, type CreditsDataData,
} from "@/data/schemas/user/credits_data"; } from "@/data/services/schemas/user/credits_data";
export class CreditsData { export class CreditsData {
declare readonly userId: string; declare readonly userId: string;
@@ -5,7 +5,7 @@ import {
CreditsHistoryDataSchema, CreditsHistoryDataSchema,
type CreditsHistoryDataInput, type CreditsHistoryDataInput,
type CreditsHistoryDataData, type CreditsHistoryDataData,
} from "@/data/schemas/user/credits_history_data"; } from "@/data/services/schemas/user/credits_history_data";
export class CreditsHistoryData { export class CreditsHistoryData {
declare readonly records: Record<string, unknown>[]; declare readonly records: Record<string, unknown>[];
@@ -5,7 +5,7 @@ import {
PersonalityTraitsSchema, PersonalityTraitsSchema,
type PersonalityTraitsInput, type PersonalityTraitsInput,
type PersonalityTraitsData, type PersonalityTraitsData,
} from "@/data/schemas/user/personality_traits"; } from "@/data/services/schemas/user/personality_traits";
export class PersonalityTraits { export class PersonalityTraits {
declare readonly cheerful: number; declare readonly cheerful: number;
@@ -5,7 +5,7 @@ import {
RecentMemorySchema, RecentMemorySchema,
type RecentMemoryInput, type RecentMemoryInput,
type RecentMemoryData, type RecentMemoryData,
} from "@/data/schemas/user/recent_memory"; } from "@/data/services/schemas/user/recent_memory";
export class RecentMemory { export class RecentMemory {
declare readonly type: string; declare readonly type: string;
@@ -5,7 +5,7 @@ import {
UpdateProfileRequestSchema, UpdateProfileRequestSchema,
type UpdateProfileRequestInput, type UpdateProfileRequestInput,
type UpdateProfileRequestData, type UpdateProfileRequestData,
} from "@/data/schemas/user/update_profile_request"; } from "@/data/services/schemas/user/update_profile_request";
export class UpdateProfileRequest { export class UpdateProfileRequest {
declare readonly username: string; declare readonly username: string;
@@ -5,7 +5,7 @@ import {
UserSchema, UserSchema,
type UserInput, type UserInput,
type UserData, type UserData,
} from "@/data/schemas/user/user"; } from "@/data/services/schemas/user/user";
import { PersonalityTraits } from "./personality_traits"; import { PersonalityTraits } from "./personality_traits";
export class User { export class User {
@@ -5,7 +5,7 @@ import {
UserStatsResponseSchema, UserStatsResponseSchema,
type UserStatsResponseInput, type UserStatsResponseInput,
type UserStatsResponseData, type UserStatsResponseData,
} from "@/data/schemas/user/user_stats_response"; } from "@/data/services/schemas/user/user_stats_response";
import { PersonalityTraits } from "./personality_traits"; import { PersonalityTraits } from "./personality_traits";
import { RecentMemory } from "./recent_memory"; import { RecentMemory } from "./recent_memory";
+1 -1
View File
@@ -18,7 +18,7 @@
import { import {
GuestChatQuotaSchema, GuestChatQuotaSchema,
type GuestChatQuotaData, type GuestChatQuotaData,
} from "@/data/schemas/chat/guest_chat_quota"; } from "@/data/services/schemas/chat/guest_chat_quota";
import { z } from "zod"; import { z } from "zod";
import { LocalStorage } from "../local_storage"; import { LocalStorage } from "../local_storage";
+1 -1
View File
@@ -12,7 +12,7 @@
*/ */
import type { Result } from "@/utils/result"; import type { Result } from "@/utils/result";
import type { GuestChatQuotaData } from "@/data/schemas/chat/guest_chat_quota"; import type { GuestChatQuotaData } from "@/data/services/schemas/chat/guest_chat_quota";
export interface IChatStorage { export interface IChatStorage {
getGuestDailyChatQuota(): Promise<Result<GuestChatQuotaData | null>>; getGuestDailyChatQuota(): Promise<Result<GuestChatQuotaData | null>>;
+1 -1
View File
@@ -12,7 +12,7 @@
*/ */
import type { Result } from "@/utils/result"; import type { Result } from "@/utils/result";
import type { UserData } from "@/data/schemas/user/user"; import type { UserData } from "@/data/services/schemas/user/user";
export interface IUserStorage { export interface IUserStorage {
getUser(): Promise<Result<UserData | null>>; getUser(): Promise<Result<UserData | null>>;
+1 -1
View File
@@ -15,7 +15,7 @@
* - 单例挂在 class 静态字段,HMR 复用安全 * - 单例挂在 class 静态字段,HMR 复用安全
*/ */
import { UserSchema, type UserData } from "@/data/schemas/user/user"; import { UserSchema, type UserData } from "@/data/services/schemas/user/user";
import { LocalStorage } from "../local_storage"; import { LocalStorage } from "../local_storage";
import { type Result as ResultT } from "@/utils/result"; import { type Result as ResultT } from "@/utils/result";
import { StorageKeys } from "../storage_keys"; import { StorageKeys } from "../storage_keys";
-1
View File
@@ -24,7 +24,6 @@
--color-error: #ff4d4f; --color-error: #ff4d4f;
--color-warning: #ffa940; --color-warning: #ffa940;
/* ==================== Splash 页面 Facebook 按钮 ==================== */
--color-button-gradient-start: #ff67e0; --color-button-gradient-start: #ff67e0;
--color-button-gradient-end: #ff52a2; --color-button-gradient-end: #ff52a2;