package main import ( "net/http" "time" "git.linuxforward.com/byom/byom-golang-lib/pkg/database" "git.linuxforward.com/byom/byom-golang-lib/pkg/errors" "git.linuxforward.com/byom/byom-golang-lib/pkg/logger" "git.linuxforward.com/byom/byom-golang-lib/pkg/server" "git.linuxforward.com/byom/byom-golang-lib/pkg/storage" "github.com/gin-gonic/gin" "github.com/minio/minio-go/v7" ) func main() { // Initialize logger log, err := logger.NewLogger(&logger.Config{ Level: "info", Format: "text", NoColor: false, }) if err != nil { panic(err) } // Initialize SQLite db, err := database.NewSQLiteDB(&database.Config{ Path: "app.db", MaxOpenConns: 1, // SQLite recommendation MaxIdleConns: 1, ConnMaxLifetime: 300, // 5 minutes }) if err != nil { log.Fatal(err) } defer db.Close() // Initialize Minio minioClient, err := storage.NewMinioClient(&storage.Config{ Endpoint: "localhost:9000", AccessKeyID: "minioadmin", SecretAccessKey: "minioadmin", UseSSL: false, BucketName: "mybucket", }) if err != nil { log.Fatal(err) } // Initialize Gin server with configuration srv, err := server.NewGinServer(log, &server.Config{ Port: 8080, AllowedOrigins: []string{"http://localhost:3000"}, RequestTimeout: 30 * time.Second, }) if err != nil { log.Fatal(err) } // Add health check endpoint srv.AddHealthCheck() // Add file upload endpoint router := srv.Router() router.POST("/upload", func(c *gin.Context) { file, header, err := c.Request.FormFile("file") if err != nil { c.Error(errors.NewStorageError("read_form", minioClient.BucketName(), err)) return } defer file.Close() // Upload the file to Minio using our helper method _, err = minioClient.PutObject( c.Request.Context(), header.Filename, file, header.Size, minio.PutObjectOptions{ ContentType: header.Header.Get("Content-Type"), }, ) if err != nil { c.Error(errors.NewStorageError("upload", minioClient.BucketName(), err)) return } c.JSON(http.StatusOK, gin.H{ "message": "File uploaded successfully", "file": header.Filename, }) }) // Start server if err := router.Run(":8080"); err != nil { log.Fatal(err) } }