main.go 2.1 KB

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