diff --git a/cmd/termcloud/main.go b/cmd/termcloud/main.go index c369eaa..b4e5747 100644 --- a/cmd/termcloud/main.go +++ b/cmd/termcloud/main.go @@ -1,6 +1,11 @@ package main import ( + "context" + "log" + "os" + + "git.keircn.com/keiran/termcloud/internal/db" "git.keircn.com/keiran/termcloud/internal/handlers" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" @@ -8,21 +13,50 @@ import ( ) func main() { + ctx := context.Background() + + pool, err := db.NewPool(ctx) + if err != nil { + log.Fatalf("Failed to create database pool: %v", err) + } + defer db.ClosePool(pool) + + bucketService := db.NewBucketService(pool) + h := handlers.NewHandlers(bucketService) + e := echo.New() e.Use(middleware.BodyLimit("100M")) e.Use(middleware.CORSWithConfig(middleware.CORSConfig{ AllowOrigins: []string{"*"}, - AllowMethods: []string{echo.GET, echo.POST}, + AllowMethods: []string{echo.GET, echo.POST, echo.PUT, echo.DELETE}, + AllowHeaders: []string{"*"}, })) e.Use(middleware.GzipWithConfig(middleware.GzipConfig{ Level: 5, })) e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(rate.Limit(20)))) - e.Static("/uploads", "uploads") - e.GET("/", handlers.RootHandler) - e.POST("/upload", handlers.UploadHandler) + e.Static("/storage", "storage") - e.Logger.Fatal(e.Start(":8080")) + e.GET("/", h.RootHandler) + + api := e.Group("/api/v1") + api.Use(h.AuthMiddleware) + + api.GET("/user", h.GetUserInfoHandler) + api.GET("/buckets", h.ListBucketsHandler) + api.POST("/buckets", h.CreateBucketHandler) + api.DELETE("/buckets/:bucket", h.DeleteBucketHandler) + api.GET("/buckets/:bucket/objects", h.ListObjectsHandler) + api.PUT("/buckets/:bucket/objects/*", h.UploadObjectHandler) + api.GET("/buckets/:bucket/objects/*", h.GetObjectHandler) + api.DELETE("/buckets/:bucket/objects/*", h.DeleteObjectHandler) + + port := os.Getenv("PORT") + if port == "" { + port = "8080" + } + + e.Logger.Fatal(e.Start(":" + port)) } diff --git a/internal/handlers/handlers.go b/internal/handlers/handlers.go index 1846a23..c9af192 100644 --- a/internal/handlers/handlers.go +++ b/internal/handlers/handlers.go @@ -98,7 +98,7 @@ func (h *Handlers) DeleteBucketHandler(c echo.Context) error { func (h *Handlers) UploadObjectHandler(c echo.Context) error { user := c.Get("user").(*db.User) bucketName := c.Param("bucket") - objectKey := c.Param("key") + objectKey := c.Param("*") bucket, err := h.bucketService.GetBucket(context.Background(), bucketName, user.ID) if err != nil {