main.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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.LogConfig{
  16. Level: "info",
  17. Formatter: "text",
  18. })
  19. if err != nil {
  20. panic(err)
  21. }
  22. // Initialize SQLite
  23. db, err := database.NewSQLiteDB(database.SQLiteConfig{
  24. Path: "app.db",
  25. })
  26. if err != nil {
  27. log.Fatal(err)
  28. }
  29. defer db.Close()
  30. // Initialize Minio
  31. minioClient, err := storage.NewMinioClient(storage.MinioConfig{
  32. Endpoint: "localhost:9000",
  33. AccessKeyID: "minioadmin",
  34. SecretAccessKey: "minioadmin",
  35. UseSSL: false,
  36. BucketName: "mybucket",
  37. })
  38. if err != nil {
  39. log.Fatal(err)
  40. }
  41. // Initialize Gin server with configuration
  42. srv, err := server.NewGinServer(log, server.ServerConfig{
  43. AllowedOrigins: []string{"http://localhost:3000"},
  44. RequestTimeout: 30 * time.Second,
  45. })
  46. if err != nil {
  47. log.Fatal(err)
  48. }
  49. // Add health check endpoint
  50. srv.AddHealthCheck()
  51. // Add file upload endpoint
  52. router := srv.Router()
  53. router.POST("/upload", func(c *gin.Context) {
  54. file, header, err := c.Request.FormFile("file")
  55. if err != nil {
  56. c.Error(errors.NewStorageError("read_form", minioClient.BucketName(), err))
  57. return
  58. }
  59. defer file.Close()
  60. // Upload the file to Minio using our helper method
  61. _, err = minioClient.PutObject(
  62. c.Request.Context(),
  63. header.Filename,
  64. file,
  65. header.Size,
  66. minio.PutObjectOptions{
  67. ContentType: header.Header.Get("Content-Type"),
  68. },
  69. )
  70. if err != nil {
  71. c.Error(errors.NewStorageError("upload", minioClient.BucketName(), err))
  72. return
  73. }
  74. c.JSON(http.StatusOK, gin.H{
  75. "message": "File uploaded successfully",
  76. "file": header.Filename,
  77. })
  78. })
  79. // Start server
  80. if err := router.Run(":8080"); err != nil {
  81. log.Fatal(err)
  82. }
  83. }