feat(ECR-012–016): 合规、题库、时辰刷新、头像、MBTI OEJTS 与埋点

落地输入合规、探索题库、报告日/时辰刷新、账号头像、OEJTS 量表,并补齐 H5 埋点与 Admin 漏斗;同步 ESS 工件、切至自建 Git、清理 GitHub Actions。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-13 01:27:58 +08:00
co-authored by Cursor
parent 13860bf1ef
commit 89756f65b4
227 changed files with 7405 additions and 1407 deletions
+36
View File
@@ -0,0 +1,36 @@
package handler
import (
"net/http"
"path/filepath"
"github.com/gin-gonic/gin"
"github.com/yuxingu/digital-psychology/apps/api/internal/avatar"
)
// MediaHandler serves uploaded media files.
type MediaHandler struct {
AvatarDir string
}
// Register mounts public media routes.
func (h *MediaHandler) Register(api *gin.RouterGroup) {
api.GET("/media/avatars/:file", h.ServeAvatar)
}
// ServeAvatar streams a stored avatar image.
func (h *MediaHandler) ServeAvatar(c *gin.Context) {
dir := h.AvatarDir
if dir == "" {
dir = "data/avatars"
}
full, err := avatar.ResolveAbs(dir, c.Param("file"))
if err != nil {
c.Status(http.StatusNotFound)
return
}
c.Header("Cache-Control", "public, max-age=86400")
c.File(full)
_ = filepath.Ext(full)
}