统一投票/悬赏/抽奖截止与状态展示,抽奖支持多奖品行;发帖页悬赏积分对齐表格输入,并在余额不足时于底部就地提示。 Co-authored-by: Cursor <cursoragent@cursor.com>
41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/freefire/jiang13-bbs/config"
|
|
"github.com/freefire/jiang13-bbs/model"
|
|
"github.com/freefire/jiang13-bbs/router"
|
|
"github.com/freefire/jiang13-bbs/service"
|
|
)
|
|
|
|
func main() {
|
|
cfg, err := config.Parse()
|
|
if err != nil {
|
|
log.Fatalf("配置解析失败: %v", err)
|
|
}
|
|
|
|
if err := model.InitDB(cfg.DBDSN); err != nil {
|
|
log.Fatalf("数据库初始化失败: %v", err)
|
|
}
|
|
|
|
// 生产 HTTPS 启用 __Host- 认证 cookie 前缀(须在路由注册、读写 cookie 前配置)
|
|
service.ConfigureCookieNames(!cfg.DevMode)
|
|
// 过期/已吊销 refresh token 定期清理
|
|
service.StartRefreshTokenCleanup(model.DB)
|
|
// 悬赏过期退回 / 抽奖到期开奖
|
|
service.StartTypedPostSettler(service.NewPostService(model.DB).WithDevMode(cfg.DevMode))
|
|
|
|
r, err := router.Setup(cfg)
|
|
if err != nil {
|
|
log.Fatalf("路由初始化失败: %v", err)
|
|
}
|
|
|
|
addr := fmt.Sprintf(":%d", cfg.Port)
|
|
log.Printf("[jiang13-bbs] 服务启动于 %s (dev=%v workPath=%s dataDir=%s)", addr, cfg.DevMode, cfg.WorkPath, cfg.DataDir)
|
|
if err := r.Run(addr); err != nil {
|
|
log.Fatalf("服务启动失败: %v", err)
|
|
}
|
|
}
|