项目初始化
This commit is contained in:
102
main.go
Normal file
102
main.go
Normal file
@@ -0,0 +1,102 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
_ "FileRelay/docs"
|
||||
"FileRelay/internal/api/admin"
|
||||
"FileRelay/internal/api/middleware"
|
||||
"FileRelay/internal/api/public"
|
||||
"FileRelay/internal/bootstrap"
|
||||
"FileRelay/internal/config"
|
||||
"FileRelay/internal/task"
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/gin-contrib/cors"
|
||||
"github.com/gin-gonic/gin"
|
||||
swaggerFiles "github.com/swaggo/files"
|
||||
ginSwagger "github.com/swaggo/gin-swagger"
|
||||
)
|
||||
|
||||
// @title 文件暂存柜 API
|
||||
// @version 1.0
|
||||
// @description 自托管的文件暂存柜后端系统 API 文档
|
||||
// @termsOfService http://swagger.io/terms/
|
||||
|
||||
// @contact.name API Support
|
||||
// @contact.url http://www.swagger.io/support
|
||||
// @contact.email support@swagger.io
|
||||
|
||||
// @license.name Apache 2.0
|
||||
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
||||
// @BasePath /
|
||||
|
||||
// @securityDefinitions.apikey AdminAuth
|
||||
// @in header
|
||||
// @name Authorization
|
||||
// @description Type "Bearer <your-jwt-token>" to authenticate.
|
||||
|
||||
func main() {
|
||||
// 1. 加载配置
|
||||
if err := config.LoadConfig("config/config.yaml"); err != nil {
|
||||
log.Fatalf("Failed to load config: %v", err)
|
||||
}
|
||||
|
||||
// 2. 初始化
|
||||
bootstrap.InitDB()
|
||||
|
||||
// 3. 启动清理任务
|
||||
cleaner := task.NewCleaner()
|
||||
go cleaner.Start(context.Background())
|
||||
|
||||
// 4. 设置路由
|
||||
r := gin.Default()
|
||||
|
||||
// 配置更完善的 CORS
|
||||
corsConfig := cors.DefaultConfig()
|
||||
corsConfig.AllowAllOrigins = true
|
||||
corsConfig.AllowHeaders = append(corsConfig.AllowHeaders, "Authorization", "Accept", "X-Requested-With")
|
||||
corsConfig.AllowMethods = append(corsConfig.AllowMethods, "OPTIONS")
|
||||
r.Use(cors.New(corsConfig))
|
||||
|
||||
// Swagger 文档
|
||||
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||
|
||||
// 公共接口
|
||||
uploadHandler := public.NewUploadHandler()
|
||||
pickupHandler := public.NewPickupHandler()
|
||||
|
||||
api := r.Group("/api")
|
||||
{
|
||||
api.POST("/upload", uploadHandler.Upload)
|
||||
api.GET("/pickup/:pickup_code", middleware.PickupRateLimit(), pickupHandler.Pickup)
|
||||
api.GET("/download/file/:file_id", pickupHandler.DownloadFile)
|
||||
api.GET("/download/batch/:pickup_code", pickupHandler.DownloadBatch)
|
||||
}
|
||||
|
||||
// 管理员接口
|
||||
authHandler := admin.NewAuthHandler()
|
||||
batchHandler := admin.NewBatchHandler()
|
||||
tokenHandler := admin.NewTokenHandler()
|
||||
|
||||
r.POST("/admin/login", authHandler.Login)
|
||||
|
||||
adm := r.Group("/admin")
|
||||
adm.Use(middleware.AdminAuth())
|
||||
{
|
||||
adm.GET("/batches", batchHandler.ListBatches)
|
||||
adm.GET("/batch/:batch_id", batchHandler.GetBatch)
|
||||
adm.PUT("/batch/:batch_id", batchHandler.UpdateBatch)
|
||||
adm.DELETE("/batch/:batch_id", batchHandler.DeleteBatch)
|
||||
|
||||
adm.GET("/api-tokens", tokenHandler.ListTokens)
|
||||
adm.POST("/api-tokens", tokenHandler.CreateToken)
|
||||
adm.DELETE("/api-tokens/:id", tokenHandler.DeleteToken)
|
||||
}
|
||||
|
||||
// 5. 运行
|
||||
port := 8080
|
||||
fmt.Printf("Server is running on port %d\n", port)
|
||||
r.Run(fmt.Sprintf(":%d", port))
|
||||
}
|
||||
Reference in New Issue
Block a user