CI/CD Pipeline / Test Shell Guard (Phase 23 Gate) (push) Canceled after 0s
CI/CD Pipeline / Backend Build & Test (push) Canceled after 0s
CI/CD Pipeline / Admin Web Build (push) Canceled after 0s
CI/CD Pipeline / Mini Program Compile Check (push) Canceled after 0s
CI/CD Pipeline / Migration Validation (push) Canceled after 0s
CI/CD Pipeline / UI Contracts (source-structure gates) (push) Canceled after 0s
CI/CD Pipeline / E2E (live stack) (push) Canceled after 0s
256 lines
5.9 KiB
TypeScript
256 lines
5.9 KiB
TypeScript
/**
|
|
* 小程序全局类型定义
|
|
*/
|
|
|
|
// ===== 用户 & 账号 =====
|
|
export interface User {
|
|
displayId?: string
|
|
displayNumber?: string
|
|
userDisplayNumber?: string
|
|
serviceDisplayId?: string
|
|
id: string
|
|
wechatOpenid: string
|
|
phone: string | null
|
|
accountStatus: AccountStatus
|
|
relationshipStatus: RelationshipStatus
|
|
recommendationEnabled: boolean
|
|
lastLoginAt: string | null
|
|
createdAt: string
|
|
}
|
|
|
|
export type AccountStatus = 'normal' | 'reviewing_risk' | 'limited' | 'suspended' | 'banned' | 'closed'
|
|
export type RelationshipStatus = 'searching' | 'getting_to_know' | 'paused' | 'matched_successfully' | 'service_exited'
|
|
|
|
// ===== 资料 =====
|
|
export interface UserProfile {
|
|
userId: string
|
|
displayName: string | null
|
|
gender: 'male' | 'female' | 'other'
|
|
birthDate: string | null
|
|
heightCm: number | null
|
|
regionCode: string | null
|
|
regionName: string | null
|
|
maritalStatus: string | null
|
|
childrenStatus: string | null
|
|
educationCode: string | null
|
|
occupationCode: string | null
|
|
profileCompletion: number
|
|
profileStatus: ProfileStatus
|
|
createdAt: string
|
|
}
|
|
|
|
export type ProfileStatus = 'in_progress' | 'completed' | 'pending_review' | 'approved' | 'need_edit' | 'rejected'
|
|
|
|
// ===== 择偶偏好 =====
|
|
export interface UserPreference {
|
|
userId: string
|
|
minAge: number | null
|
|
maxAge: number | null
|
|
agePriority: 'required' | 'preferred'
|
|
minHeightCm: number | null
|
|
maxHeightCm: number | null
|
|
heightPriority: 'required' | 'preferred'
|
|
regionScope: string[] | null
|
|
regionPriority: 'required' | 'preferred'
|
|
maritalStatuses: string[] | null
|
|
maritalPriority: 'required' | 'preferred'
|
|
}
|
|
|
|
// ===== 关系 =====
|
|
export interface Match {
|
|
id: string
|
|
userAId: string
|
|
userBId: string
|
|
status: MatchStatus
|
|
source: string
|
|
matchedAt: string
|
|
successfulAt: string | null
|
|
}
|
|
|
|
export type MatchStatus = 'active' | 'getting_to_know' | 'unmatched' | 'successful'
|
|
|
|
export interface UserRelation {
|
|
id: string
|
|
userId: string
|
|
targetUserId: string
|
|
relationType: RelationType
|
|
createdAt: string
|
|
}
|
|
|
|
export type RelationType = 'liked' | 'passed' | 'blocked'
|
|
|
|
// ===== 推荐 =====
|
|
export interface RecommendationCandidate {
|
|
userId: string
|
|
recommendationLevel: 'high' | 'medium' | 'normal'
|
|
recommendationReasons: string[]
|
|
displayName?: string
|
|
age?: number
|
|
heightCm?: number
|
|
regionName?: string
|
|
}
|
|
|
|
// ===== 聊天 =====
|
|
export interface Conversation {
|
|
conversationId: string
|
|
matchId: string
|
|
otherUserId: string
|
|
otherDisplayName: string
|
|
otherAvatarUrl: string
|
|
lastMessageAt: string
|
|
unreadCount: number
|
|
status: ConversationStatus
|
|
canSendMessage: boolean
|
|
}
|
|
|
|
export type ConversationStatus = 'active' | 'unmatched' | 'blocked'
|
|
|
|
export interface Message {
|
|
messageId: string
|
|
conversationId: string
|
|
senderId: string
|
|
messageType: MessageType
|
|
content: string | null
|
|
fileId: string | null
|
|
status: MessageStatus
|
|
createdAt: string
|
|
mine: boolean
|
|
bubbleType: 'self' | 'other'
|
|
}
|
|
|
|
export type MessageType = 'text' | 'image' | 'system' | 'risk_notice'
|
|
export type MessageStatus = 'sent' | 'delivered' | 'read' | 'failed'
|
|
|
|
// ===== 活动 =====
|
|
export interface Activity {
|
|
displayId?: string
|
|
displayNumber?: string
|
|
userDisplayNumber?: string
|
|
serviceDisplayId?: string
|
|
id: string
|
|
title: string
|
|
description: string
|
|
status: ActivityStatus
|
|
totalLimit: number
|
|
maleLimit: number | null
|
|
femaleLimit: number | null
|
|
currentMaleCount: number
|
|
currentFemaleCount: number
|
|
registrationStartAt: string
|
|
registrationEndAt: string
|
|
activityStartAt: string
|
|
activityEndAt: string
|
|
location: string
|
|
address: string
|
|
category: string
|
|
coverImageUrl: string
|
|
}
|
|
|
|
export type ActivityStatus = 'draft' | 'registration_open' | 'registration_closed' | 'ongoing' | 'ended' | 'cancelled'
|
|
|
|
export interface ActivityRegistration {
|
|
id: string
|
|
activityId: string
|
|
userId: string
|
|
status: RegistrationStatus
|
|
registeredAt: string
|
|
checkinStatus: CheckinStatus
|
|
}
|
|
|
|
export type RegistrationStatus = 'pending' | 'approved' | 'rejected' | 'cancelled'
|
|
export type CheckinStatus = 'not_checked_in' | 'checked_in'
|
|
|
|
// ===== 举报 & 申诉 =====
|
|
export interface Report {
|
|
id: string
|
|
reporterId: string
|
|
targetUserId: string
|
|
reportType: ReportType
|
|
content: string
|
|
status: ReportStatus
|
|
createdAt: string
|
|
}
|
|
|
|
export type ReportType = 'fake_profile' | 'fake_marital_status' | 'harassment' | 'pornography' | 'advertising' | 'fraud' | 'money_inducement' | 'impersonation'
|
|
export type ReportStatus = 'pending' | 'processing' | 'resolved'
|
|
|
|
export interface Appeal {
|
|
id: string
|
|
appealId: string
|
|
reporterId: string
|
|
content: string
|
|
status: AppealStatus
|
|
createdAt: string
|
|
}
|
|
|
|
export type AppealStatus = 'pending' | 'processing' | 'resolved' | 'rejected'
|
|
|
|
// ===== 照片 =====
|
|
export interface UserPhoto {
|
|
id: string
|
|
userId: string
|
|
fileKey: string
|
|
photoType: 'avatar' | 'lifestyle'
|
|
sortOrder: number
|
|
reviewStatus: ReviewStatus
|
|
url?: string
|
|
}
|
|
|
|
export type ReviewStatus = 'pending' | 'approved' | 'need_edit' | 'rejected'
|
|
|
|
// ===== 认证 =====
|
|
export interface AuthTokens {
|
|
accessToken: string
|
|
refreshToken: string
|
|
expiresIn: number
|
|
userId: string
|
|
isNewUser: boolean
|
|
}
|
|
|
|
// ===== 成功牵手请求 =====
|
|
export interface SuccessRequest {
|
|
requestId: string
|
|
matchId: string
|
|
initiatedBy: string
|
|
status: 'pending' | 'confirmed' | 'declined'
|
|
confirmedBy: string | null
|
|
createdAt: string
|
|
resolvedAt: string | null
|
|
}
|
|
|
|
// ===== API 响应 =====
|
|
export interface ApiResponse<T = any> {
|
|
success: boolean
|
|
code: string
|
|
message: string
|
|
data: T
|
|
}
|
|
|
|
// ===== 分页 =====
|
|
export interface PageResult<T> {
|
|
items: T[]
|
|
nextCursor: string | null
|
|
hasMore: boolean
|
|
}
|
|
|
|
// ===== Like 结果 =====
|
|
export interface LikeResult {
|
|
action: 'liked'
|
|
mutual: boolean
|
|
mutualMatch?: boolean
|
|
matchCreated?: boolean
|
|
}
|
|
|
|
// ===== 通知 =====
|
|
export interface Notification {
|
|
id: string
|
|
userId: string
|
|
type: string
|
|
title: string
|
|
content: string
|
|
targetType: string | null
|
|
targetId: string | null
|
|
isRead: boolean
|
|
createdAt: string
|
|
}
|