chore: 清理敏感与开发文档,仅同步代码
- 永久忽略并从仓库移除 开发文档/ - 移除并忽略 .env 与小程序私有配置 - 同步小程序/管理端/API与脚本改动 Made-with: Cursor
This commit is contained in:
@@ -304,3 +304,70 @@ func DBUsersJourneyStats(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, gin.H{"success": true, "stats": stats})
|
||||
}
|
||||
|
||||
// journeyUserItem 用户旅程列表项
|
||||
type journeyUserItem struct {
|
||||
ID string `json:"id"`
|
||||
Nickname string `json:"nickname"`
|
||||
Phone string `json:"phone"`
|
||||
CreatedAt string `json:"createdAt"`
|
||||
}
|
||||
|
||||
// DBUsersJourneyUsers GET /api/db/users/journey-users?stage=xxx&limit=20 — 按阶段查用户
|
||||
func DBUsersJourneyUsers(c *gin.Context) {
|
||||
db := database.DB()
|
||||
stage := strings.TrimSpace(c.Query("stage"))
|
||||
limitStr := c.DefaultQuery("limit", "20")
|
||||
limit := 20
|
||||
if n, err := strconv.Atoi(limitStr); err == nil && n > 0 {
|
||||
limit = n
|
||||
}
|
||||
if limit > 100 {
|
||||
limit = 100
|
||||
}
|
||||
|
||||
var users []model.User
|
||||
switch stage {
|
||||
case "register":
|
||||
db.Order("created_at DESC").Limit(limit).Find(&users)
|
||||
case "browse":
|
||||
subq := db.Table("user_tracks").Select("user_id").Where("action = ?", "view_chapter").Distinct("user_id")
|
||||
db.Where("id IN (?)", subq).Order("created_at DESC").Limit(limit).Find(&users)
|
||||
case "bind_phone":
|
||||
db.Where("phone IS NOT NULL AND phone != ''").Order("created_at DESC").Limit(limit).Find(&users)
|
||||
case "first_pay":
|
||||
db.Where("id IN (?)", db.Model(&model.Order{}).Select("user_id").
|
||||
Where("status IN ?", []string{"paid", "success", "completed"})).
|
||||
Order("created_at DESC").Limit(limit).Find(&users)
|
||||
case "fill_profile":
|
||||
db.Where("mbti IS NOT NULL OR industry IS NOT NULL").Order("created_at DESC").Limit(limit).Find(&users)
|
||||
case "match":
|
||||
subq := db.Table("user_tracks").Select("user_id").Where("action = ?", "match").Distinct("user_id")
|
||||
db.Where("id IN (?)", subq).Order("created_at DESC").Limit(limit).Find(&users)
|
||||
case "vip":
|
||||
db.Where("is_vip = ?", true).Order("created_at DESC").Limit(limit).Find(&users)
|
||||
case "distribution":
|
||||
db.Where("referral_code IS NOT NULL AND referral_code != ''").Where("COALESCE(earnings, 0) > ?", 0).
|
||||
Order("created_at DESC").Limit(limit).Find(&users)
|
||||
default:
|
||||
c.JSON(http.StatusBadRequest, gin.H{"success": false, "error": "无效的 stage 参数"})
|
||||
return
|
||||
}
|
||||
|
||||
list := make([]journeyUserItem, 0, len(users))
|
||||
for _, u := range users {
|
||||
nick, phone := "", ""
|
||||
if u.Nickname != nil {
|
||||
nick = *u.Nickname
|
||||
}
|
||||
if u.Phone != nil {
|
||||
phone = *u.Phone
|
||||
}
|
||||
list = append(list, journeyUserItem{
|
||||
ID: u.ID,
|
||||
Nickname: nick,
|
||||
Phone: phone,
|
||||
CreatedAt: u.CreatedAt.Format(time.RFC3339),
|
||||
})
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{"success": true, "users": list})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user