62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
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))
|
|
app.Post("/getuser", middleware.GetUserInfo(true, redisClient))
|
|
// Start server
|
|
log.Fatal(app.Listen(":7777"))
|
|
}
|