79 lines
2.4 KiB
Go
79 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
|
|
_ "github.com/gogf/gf/contrib/drivers/sqlite/v2"
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/net/ghttp"
|
|
"github.com/gogf/gf/v2/os/gctx"
|
|
|
|
"36wisdom/biz/controller"
|
|
"36wisdom/biz/dao"
|
|
"36wisdom/biz/service/seed"
|
|
"36wisdom/common"
|
|
"36wisdom/common/auth"
|
|
)
|
|
|
|
func main() {
|
|
var ctx context.Context = gctx.New()
|
|
for _, dir := range []string{"data", "workspace"} {
|
|
if err := os.MkdirAll(dir, 0o755); err != nil {
|
|
g.Log().Fatal(ctx, err)
|
|
}
|
|
}
|
|
initTables(ctx)
|
|
seed.EnsureSeeded(ctx)
|
|
|
|
s := g.Server()
|
|
// 路由注册与中间件装配(静态,不属业务表分层)
|
|
s.Use(common.MiddlewareNoiseSilence)
|
|
s.Use(ghttp.MiddlewareHandlerResponse)
|
|
s.BindHandler("GET:/ping", func(r *ghttp.Request) {
|
|
r.Response.Write("pong")
|
|
})
|
|
|
|
secret := g.Cfg().MustGet(ctx, "auth.secret").String()
|
|
|
|
// 前台:公开接口(注册/登录),鉴权接口按模块挂载
|
|
s.Group("/api", func(g *ghttp.RouterGroup) {
|
|
g.Bind(controller.Parent)
|
|
|
|
g.Group("/", func(g *ghttp.RouterGroup) {
|
|
g.Middleware(auth.Middleware(secret, ""))
|
|
g.Bind(controller.Child, controller.Strategy, controller.Level)
|
|
})
|
|
})
|
|
// 生产形态:前端产物 ui-src/dist 由后端 :8080 统一托管(前后端同端口)
|
|
// 注:根路径须用 SetServerRoot——AddStaticPath("/", ...) 因前缀防误匹配守卫只服务根路径,
|
|
// /assets 等子路径全部 404;素材目录 ui-src/static 以 /static 前缀单独挂载
|
|
if _, err := os.Stat("ui-src/dist"); err == nil {
|
|
s.SetServerRoot("ui-src/dist")
|
|
}
|
|
if _, err := os.Stat("ui-src/static"); err == nil {
|
|
s.AddStaticPath("/static", "ui-src/static")
|
|
}
|
|
s.Run()
|
|
}
|
|
|
|
// initTables 建表与死表清理(各 dao 的 Init 幂等;life_task_log 无读写引用整套移除,
|
|
// 库内残留表启动时 DROP 与代码保持一致)。
|
|
func initTables(ctx context.Context) {
|
|
inits := []func(ctx context.Context) error{
|
|
dao.Parent.Init, dao.Child.Init, dao.Strategy.Init, dao.Level.Init, dao.SceneNode.Init,
|
|
dao.NodeOption.Init, dao.Element.Init, dao.UserProgress.Init, dao.ChapterReview.Init,
|
|
dao.UserRouteLog.Init, dao.UserCollection.Init, dao.Badge.Init, dao.UserBadge.Init,
|
|
dao.Prize.Init, dao.Redemption.Init, dao.AdminUser.Init, dao.LifeTask.Init,
|
|
}
|
|
for _, init := range inits {
|
|
if err := init(ctx); err != nil {
|
|
g.Log().Fatal(ctx, err)
|
|
}
|
|
}
|
|
if _, err := g.DB().Exec(ctx, "DROP TABLE IF EXISTS life_task_log"); err != nil {
|
|
g.Log().Fatal(ctx, err)
|
|
}
|
|
}
|