main.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package main
  2. import (
  3. "net/http"
  4. "time"
  5. "git.linuxforward.com/byom/byom-golang-lib/pkg/database"
  6. "git.linuxforward.com/byom/byom-golang-lib/pkg/errors"
  7. "git.linuxforward.com/byom/byom-golang-lib/pkg/logger"
  8. "git.linuxforward.com/byom/byom-golang-lib/pkg/server"
  9. "git.linuxforward.com/byom/byom-golang-lib/pkg/storage"
  10. "github.com/gin-gonic/gin"
  11. "github.com/minio/minio-go/v7"
  12. )
  13. func main() {
  14. // Initialize logger
  15. log, err := logger.NewLogger(&logger.Config{
  16. Level: "info",
  17. Format: "text",
  18. NoColor: false,
  19. })
  20. if err != nil {
  21. panic(err)
  22. }
  23. // Initialize SQLite
  24. db, err := database.NewSQLiteDB(&database.Config{
  25. Path: "app.db",
  26. MaxOpenConns: 1, // SQLite recommendation
  27. MaxIdleConns: 1,
  28. ConnMaxLifetime: 300, // 5 minutes
  29. })
  30. if err != nil {
  31. log.Fatal(err)
  32. }
  33. defer db.Close()
  34. // Initialize Minio
  35. minioClient, err := storage.NewMinioClient(&storage.Config{
  36. Endpoint: "localhost:9000",
  37. AccessKeyID: "minioadmin",
  38. SecretAccessKey: "minioadmin",
  39. UseSSL: false,
  40. BucketName: "mybucket",
  41. })
  42. if err != nil {
  43. log.Fatal(err)
  44. }
  45. // Initialize Gin server with configuration
  46. srv, err := server.NewGinServer(log, &server.Config{
  47. Port: 8080,
  48. AllowedOrigins: []string{"http://localhost:3000"},
  49. RequestTimeout: 30 * time.Second,
  50. })
  51. if err != nil {
  52. log.Fatal(err)
  53. }
  54. // Add health check endpoint
  55. srv.AddHealthCheck()
  56. // Add file upload endpoint
  57. router := srv.Router()
  58. router.POST("/upload", func(c *gin.Context) {
  59. file, header, err := c.Request.FormFile("file")
  60. if err != nil {
  61. c.Error(errors.NewStorageError("read_form", minioClient.BucketName(), err))
  62. return
  63. }
  64. defer file.Close()
  65. // Upload the file to Minio using our helper method
  66. _, err = minioClient.PutObject(
  67. c.Request.Context(),
  68. header.Filename,
  69. file,
  70. header.Size,
  71. minio.PutObjectOptions{
  72. ContentType: header.Header.Get("Content-Type"),
  73. },
  74. )
  75. if err != nil {
  76. c.Error(errors.NewStorageError("upload", minioClient.BucketName(), err))
  77. return
  78. }
  79. c.JSON(http.StatusOK, gin.H{
  80. "message": "File uploaded successfully",
  81. "file": header.Filename,
  82. })
  83. })
  84. // Start server
  85. if err := router.Run(":8080"); err != nil {
  86. log.Fatal(err)
  87. }
  88. }