70 lines
1.4 KiB
TypeScript
70 lines
1.4 KiB
TypeScript
// ========== 用户 ==========
|
|
export interface IUser {
|
|
id: string
|
|
phone?: string
|
|
nickname?: string
|
|
avatar?: string
|
|
bio?: string
|
|
motto?: string
|
|
privacy: PrivacyLevel
|
|
points: number
|
|
createdAt: string
|
|
}
|
|
|
|
// ========== 打卡 ==========
|
|
export interface ICheckInItem {
|
|
id: string
|
|
userId: string
|
|
name: string
|
|
icon?: string
|
|
category: CheckInCategory
|
|
dailyGoal?: string
|
|
cycleType: CycleType
|
|
privacy: PrivacyLevel
|
|
status: ItemStatus
|
|
createdAt: string
|
|
}
|
|
|
|
export interface ICheckInRecord {
|
|
id: string
|
|
itemId: string
|
|
userId: string
|
|
checkDate: string
|
|
status: RecordStatus
|
|
note?: string
|
|
images?: string[]
|
|
}
|
|
|
|
// ========== 枚举 ==========
|
|
export type CheckInCategory =
|
|
| 'study' | 'health' | 'habit' | 'hobby' | 'goal'
|
|
|
|
export type CycleType =
|
|
| 'daily' | 'weekly' | 'every_other_day' | 'custom'
|
|
|
|
export type PrivacyLevel = 1 | 2 | 3
|
|
// 1 = public, 2 = friends_only, 3 = private
|
|
|
|
export type ItemStatus = 'active' | 'paused' | 'archived' | 'deleted'
|
|
|
|
export type RecordStatus = 'normal' | 'makeup'
|
|
|
|
export type Rarity = 'bronze' | 'silver' | 'gold'
|
|
|
|
// ========== 社交 ==========
|
|
export interface IGroup {
|
|
id: string
|
|
name: string
|
|
cover?: string
|
|
intro?: string
|
|
type: 'public' | 'private'
|
|
maxMember: number
|
|
}
|
|
|
|
// ========== API 响应 ==========
|
|
export interface ApiResponse<T = unknown> {
|
|
code: number
|
|
message: string
|
|
data?: T
|
|
}
|