package main import ( "log" "os" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/logger" "gorm.io/driver/mysql" "gorm.io/gorm" "testfb/config" "testfb/handlers" "testfb/middleware" "testfb/models" ) func main() { // Initialize configuration cfg := config.New() // Set up logging logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { log.Fatalf("Error opening log file: %v", err) } defer logFile.Close() // Initialize database db, err := gorm.Open(mysql.Open(cfg.DBConnString), &gorm.Config{}) if err != nil { log.Fatalf("Failed to connect to database: %v", err) } // Auto-migrate the users table err = db.AutoMigrate(&models.User{}) if err != nil { log.Fatalf("Failed to auto-migrate: %v", err) } // Initialize Redis client redisClient := config.InitRedis(cfg.RedisAddr) // Create Fiber app app := fiber.New() // Set up middleware app.Use(logger.New(logger.Config{ Format: "[${time}] ${status} - ${latency} ${method} ${path}\n", Output: logFile, })) // Set up routes app.Post("/login", handlers.Login(db, redisClient)) app.Get("/user", middleware.AuthMiddleware(redisClient), handlers.GetCurrentUser(db)) app.Put("/user", middleware.AuthMiddleware(redisClient), handlers.UpdateCurrentUser(db)) app.Get("/users/:id", middleware.AuthMiddleware(redisClient), handlers.GetUserByID(db)) // Start server log.Fatal(app.Listen(":8080")) }