thread-master/apps/backend/gateway.go

60 lines
1.7 KiB
Go
Raw Permalink Normal View History

2026-07-10 12:54:45 +00:00
package main
import (
2026-07-15 15:23:59 +00:00
"context"
2026-07-10 12:54:45 +00:00
"flag"
"fmt"
"os"
2026-07-15 15:23:59 +00:00
"time"
2026-07-10 12:54:45 +00:00
"apps/backend/internal/config"
"apps/backend/internal/handler"
"apps/backend/internal/lib/securelog"
"apps/backend/internal/middleware"
"apps/backend/internal/svc"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/rest"
)
// Gateway entry (go-zero). API from goctl; DB schema from generate/database migrate.
func main() {
// 必須在 mon/monc 建立前呼叫:否則 Mongo ReplaceOne 會把 password_hash 整包打進 log
securelog.SilenceMongo()
configFile := flag.String("f", "etc/gateway.yaml", "config file")
flag.Parse()
var c config.Config
conf.MustLoad(*configFile, &c)
c.ApplyEnv()
2026-07-13 08:59:13 +00:00
if err := c.ValidateProductionDependencies(); err != nil {
logx.Must(err)
}
2026-07-10 12:54:45 +00:00
// 禁止 Verbose否則可能印 request body 含 password
c.RestConf.Verbose = false
server := rest.MustNewServer(c.RestConf,
2026-07-13 08:59:13 +00:00
rest.WithNotAllowedHandler(middleware.NewCorsMiddleware(c.CORSAllowedOrigins).Handler()),
2026-07-10 12:54:45 +00:00
)
defer server.Stop()
2026-07-13 08:59:13 +00:00
server.Use(middleware.NewCorsMiddleware(c.CORSAllowedOrigins).Handle)
2026-07-10 12:54:45 +00:00
ctx := svc.NewServiceContext(c)
2026-07-15 15:23:59 +00:00
pingCtx, cancelPing := context.WithTimeout(context.Background(), 3*time.Second)
redisReady := ctx.Redis != nil && ctx.Redis.PingCtx(pingCtx)
cancelPing()
if !redisReady {
logx.Must(fmt.Errorf("redis startup ping failed"))
}
2026-07-10 12:54:45 +00:00
handler.RegisterHandlers(server, ctx)
2026-07-13 01:15:30 +00:00
// 靈感 SSE streamgoctl 不生成 streaming handler
handler.RegisterInspireStream(server, ctx)
2026-07-10 12:54:45 +00:00
logx.Infof("haixun gateway %s:%d pid=%d", c.Host, c.Port, os.Getpid())
fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
server.Start()
}