feat: 添加许愿树功能和Go后端服务
- 新增许愿树页面(Canvas绘制、许愿条展示) - 新增许愿详情页面 - 新增许愿创建弹窗(免费/付费两种模式) - 新增网络请求封装 utils/request.js - 新增Go后端项目结构(Gin + Inertia.js) - 新增用户、订单、许愿数据模型 - 新增数据库迁移脚本 - 更新.gitignore补全忽略规则 - 更新.env.local配置(robot=2, 版本1.0.1) - 添加secrets目录说明文档
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/gouki/lunar-server/internal/config"
|
||||
"github.com/gouki/lunar-server/internal/handler"
|
||||
"github.com/gouki/lunar-server/internal/middleware"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 加载环境变量
|
||||
if err := godotenv.Load("../.env.local"); err != nil {
|
||||
log.Println("No .env.local file found, using system environment")
|
||||
}
|
||||
|
||||
// 初始化配置
|
||||
cfg := config.Load()
|
||||
|
||||
// 设置 Gin 模式
|
||||
if cfg.Server.Env == "production" {
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
}
|
||||
|
||||
// 创建路由
|
||||
r := gin.Default()
|
||||
|
||||
// 中间件
|
||||
r.Use(middleware.CORS())
|
||||
r.Use(middleware.Logger())
|
||||
|
||||
// 静态文件(Inertia.js 前端构建产物)
|
||||
r.Static("/build", "./web/public/build")
|
||||
r.LoadHTMLGlob("web/*.html")
|
||||
|
||||
// API 路由
|
||||
api := r.Group("/api")
|
||||
{
|
||||
// 用户相关
|
||||
user := api.Group("/user")
|
||||
{
|
||||
user.POST("/login", handler.UserLogin)
|
||||
user.POST("/logout", handler.UserLogout)
|
||||
user.GET("/profile", middleware.Auth(), handler.GetUserProfile)
|
||||
user.PUT("/profile", middleware.Auth(), handler.UpdateUserProfile)
|
||||
user.POST("/auth", handler.WechatAuth)
|
||||
}
|
||||
|
||||
// 支付相关
|
||||
pay := api.Group("/pay")
|
||||
{
|
||||
pay.POST("/create", middleware.Auth(), handler.CreateOrder)
|
||||
pay.POST("/notify", handler.PayNotify)
|
||||
pay.GET("/status/:orderId", middleware.Auth(), handler.GetPayStatus)
|
||||
}
|
||||
|
||||
// 订单管理
|
||||
order := api.Group("/order")
|
||||
{
|
||||
order.GET("/list", middleware.Auth(), handler.GetOrderList)
|
||||
order.GET("/detail/:id", middleware.Auth(), handler.GetOrderDetail)
|
||||
order.POST("/cancel/:id", middleware.Auth(), handler.CancelOrder)
|
||||
}
|
||||
|
||||
// 许愿树
|
||||
wish := api.Group("/wish")
|
||||
{
|
||||
wish.GET("/tree", handler.GetWishTree)
|
||||
wish.POST("/create", middleware.Auth(), handler.CreateWish)
|
||||
wish.GET("/list", handler.GetWishList)
|
||||
wish.DELETE("/:id", middleware.Auth(), handler.DeleteWish)
|
||||
}
|
||||
}
|
||||
|
||||
// 管理后台(Inertia.js)
|
||||
admin := r.Group("/admin")
|
||||
{
|
||||
admin.GET("/", handler.AdminIndex)
|
||||
admin.GET("/users", handler.AdminUsers)
|
||||
admin.GET("/orders", handler.AdminOrders)
|
||||
admin.GET("/wishes", handler.AdminWishes)
|
||||
admin.GET("/settings", handler.AdminSettings)
|
||||
}
|
||||
|
||||
// 启动服务器
|
||||
addr := ":" + cfg.Server.Port
|
||||
log.Printf("Server starting on %s", addr)
|
||||
if err := r.Run(addr); err != nil {
|
||||
log.Fatal("Failed to start server:", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user