chore: seal Design Vision v1 and monorepo scaffold

Archive the differentiated YuXinGu product docs, AI engineering system,
design contract, and Go/Vue scaffold. Next execution prioritizes Cece-parity
over early innovation (see .ai/product/STRATEGY.md).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-02 16:00:44 +08:00
co-authored by Cursor
parent 2686866376
commit 2fb1dfee14
193 changed files with 8854 additions and 1851 deletions
+27
View File
@@ -0,0 +1,27 @@
// Package config loads process configuration from environment variables.
package config
import "os"
// Config holds runtime settings for the API server.
type Config struct {
HTTPAddr string
DatabaseURL string
AppEnv string
}
// Load reads configuration from the environment with safe defaults for local dev.
func Load() Config {
return Config{
HTTPAddr: getenv("HTTP_ADDR", ":8080"),
DatabaseURL: getenv("DATABASE_URL", "postgres://yuxingu:yuxingu@127.0.0.1:5432/yuxingu?sslmode=disable"),
AppEnv: getenv("APP_ENV", "dev"),
}
}
func getenv(key, fallback string) string {
if v := os.Getenv(key); v != "" {
return v
}
return fallback
}
+25
View File
@@ -0,0 +1,25 @@
package handler
import (
"github.com/gin-gonic/gin"
"github.com/yuxingu/digital-psychology/apps/api/pkg/response"
)
// HealthHandler serves liveness probes.
type HealthHandler struct{}
// NewHealthHandler constructs HealthHandler.
func NewHealthHandler() *HealthHandler {
return &HealthHandler{}
}
// Register mounts health routes on the engine or router group.
func (h *HealthHandler) Register(r gin.IRoutes) {
r.GET("/healthz", h.Healthz)
}
// Healthz returns a simple OK payload for load balancers.
func (h *HealthHandler) Healthz(c *gin.Context) {
response.OK(c, gin.H{"status": "ok"})
}
@@ -0,0 +1,29 @@
package middleware
import (
"crypto/rand"
"encoding/hex"
"github.com/gin-gonic/gin"
)
// RequestID attaches X-Request-ID to every request/response for tracing.
func RequestID() gin.HandlerFunc {
return func(c *gin.Context) {
id := c.GetHeader("X-Request-ID")
if id == "" {
id = newID()
}
c.Set("request_id", id)
c.Header("X-Request-ID", id)
c.Next()
}
}
func newID() string {
var b [16]byte
if _, err := rand.Read(b[:]); err != nil {
return "req-unknown"
}
return hex.EncodeToString(b[:])
}