feat: P1 合盘/星座/问答与测测完整设计包及模拟器取证工具

落地 synastry/star/ask API 与 H5 页面,补齐 cece-frontend-re complete-design 证据文档,并加入 Android 模拟器截图抓取脚本。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-03 11:37:53 +08:00
co-authored by Cursor
parent 15a9db374a
commit bd22d9dddd
248 changed files with 26309 additions and 842 deletions
+25
View File
@@ -0,0 +1,25 @@
package model
import (
"time"
"github.com/google/uuid"
)
// AskThread binds a conversation to a profile.
type AskThread struct {
ID uuid.UUID `json:"id"`
UserID uuid.UUID `json:"user_id"`
ProfileID uuid.UUID `json:"profile_id"`
Scene *string `json:"scene,omitempty"`
CreatedAt time.Time `json:"created_at"`
}
// AskMessage is one turn in a thread.
type AskMessage struct {
ID uuid.UUID `json:"id"`
ThreadID uuid.UUID `json:"thread_id"`
Role string `json:"role"`
Content string `json:"content"`
CreatedAt time.Time `json:"created_at"`
}
+27
View File
@@ -0,0 +1,27 @@
package model
import (
"time"
"github.com/google/uuid"
)
// GrowthPlan is a small personal growth goal.
type GrowthPlan struct {
ID uuid.UUID `json:"id"`
UserID uuid.UUID `json:"user_id"`
Title string `json:"title"`
Focus string `json:"focus"`
Status string `json:"status"`
CreatedAt time.Time `json:"created_at"`
}
// GrowthCheckin is a daily check-in on a plan.
type GrowthCheckin struct {
ID uuid.UUID `json:"id"`
PlanID uuid.UUID `json:"plan_id"`
UserID uuid.UUID `json:"user_id"`
Day string `json:"day"`
Note *string `json:"note,omitempty"`
CreatedAt time.Time `json:"created_at"`
}
+17
View File
@@ -0,0 +1,17 @@
package model
import (
"time"
"github.com/google/uuid"
)
// Mood is a daily mood check-in.
type Mood struct {
ID uuid.UUID `json:"id"`
UserID uuid.UUID `json:"user_id"`
Day string `json:"day"`
Score *int `json:"score,omitempty"`
Note *string `json:"note,omitempty"`
CreatedAt time.Time `json:"created_at"`
}
+26 -10
View File
@@ -8,14 +8,30 @@ import (
// Profile is a personal archive (self or other).
type Profile struct {
ID uuid.UUID `json:"id"`
UserID uuid.UUID `json:"user_id"`
Relation string `json:"relation"`
DisplayName string `json:"display_name"`
BirthDate time.Time `json:"birth_date"`
BirthTime *string `json:"birth_time,omitempty"`
BirthPlace *string `json:"birth_place,omitempty"`
Gender *string `json:"gender,omitempty"`
RelationType *string `json:"relation_type,omitempty"`
CreatedAt time.Time `json:"created_at"`
ID uuid.UUID `json:"id"`
UserID uuid.UUID `json:"user_id"`
Relation string `json:"relation"`
DisplayName string `json:"display_name"`
BirthDate time.Time `json:"birth_date"`
BirthTime *string `json:"birth_time,omitempty"`
BirthPlace *string `json:"birth_place,omitempty"`
Gender *string `json:"gender,omitempty"`
RelationType *string `json:"relation_type,omitempty"`
GeoLat *float64 `json:"geo_lat,omitempty"`
GeoLng *float64 `json:"geo_lng,omitempty"`
GeoVisible bool `json:"geo_visible"`
CreatedAt time.Time `json:"created_at"`
}
// SynastryInvite is a shareable pair invite.
type SynastryInvite struct {
ID uuid.UUID `json:"id"`
Token string `json:"token"`
HostUserID uuid.UUID `json:"host_user_id"`
HostProfileID uuid.UUID `json:"host_profile_id"`
ExpiresAt time.Time `json:"expires_at"`
GuestUserID *uuid.UUID `json:"guest_user_id,omitempty"`
GuestProfileID *uuid.UUID `json:"guest_profile_id,omitempty"`
ReportID *uuid.UUID `json:"report_id,omitempty"`
CreatedAt time.Time `json:"created_at"`
}