101 lines
3.2 KiB
Go
101 lines
3.2 KiB
Go
package v1
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"api-service/internal/config"
|
|
authHandlers "api-service/internal/handlers/auth"
|
|
componentHandlers "api-service/internal/handlers/component"
|
|
employeeHandlers "api-service/internal/handlers/employee"
|
|
"api-service/internal/middleware"
|
|
services "api-service/internal/services/auth"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
swaggerFiles "github.com/swaggo/files"
|
|
ginSwagger "github.com/swaggo/gin-swagger"
|
|
)
|
|
|
|
// RegisterRoutes registers all API routes for version 1
|
|
func RegisterRoutes(cfg *config.Config) *gin.Engine {
|
|
router := gin.New()
|
|
|
|
// Add middleware
|
|
router.Use(middleware.CORSConfig())
|
|
router.Use(middleware.ErrorHandler())
|
|
router.Use(gin.Logger())
|
|
router.Use(gin.Recovery())
|
|
|
|
// Initialize services
|
|
authService := services.NewAuthService(cfg)
|
|
|
|
// Swagger UI route
|
|
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|
|
|
// API v1 group
|
|
v1 := router.Group("/api/v1")
|
|
{
|
|
// Public routes (no authentication required)
|
|
// Health endpoints
|
|
healthHandler := componentHandlers.NewHealthHandler()
|
|
v1.GET("/health", healthHandler.GetHealth)
|
|
v1.GET("/", healthHandler.HelloWorld)
|
|
|
|
// Authentication routes
|
|
authHandler := authHandlers.NewAuthHandler(authService)
|
|
tokenHandler := authHandlers.NewTokenHandler(authService)
|
|
|
|
v1.POST("/auth/login", authHandler.Login)
|
|
v1.POST("/auth/register", authHandler.Register)
|
|
v1.GET("/auth/me", middleware.JWTAuthMiddleware(authService), authHandler.Me)
|
|
v1.POST("/auth/refresh", authHandler.RefreshToken)
|
|
|
|
// Token generation routes
|
|
v1.POST("/token/generate", tokenHandler.GenerateToken)
|
|
v1.POST("/token/generate-direct", tokenHandler.GenerateTokenDirect)
|
|
|
|
// Protected routes (require authentication)
|
|
|
|
// Employee endpoints
|
|
employeeHandler := employeeHandlers.NewEmployeeHandler()
|
|
v1.GET("/employees", employeeHandler.GetEmployee)
|
|
v1.GET("/employees/:id", employeeHandler.GetEmployeeByID)
|
|
v1.POST("/employees", employeeHandler.CreateEmployee)
|
|
v1.PUT("/employees/:id", employeeHandler.UpdateEmployee)
|
|
v1.DELETE("/employees/:id", employeeHandler.DeleteEmployee)
|
|
|
|
protected := v1.Group("/")
|
|
protected.Use(middleware.JWTAuthMiddleware(authService))
|
|
{
|
|
// Product endpoints
|
|
productHandler := componentHandlers.NewProductHandler()
|
|
protected.GET("/products", productHandler.GetProduct)
|
|
protected.GET("/products/:id", productHandler.GetProductByID)
|
|
protected.POST("/products", productHandler.CreateProduct)
|
|
protected.PUT("/products/:id", productHandler.UpdateProduct)
|
|
protected.DELETE("/products/:id", productHandler.DeleteProduct)
|
|
|
|
// Example endpoints
|
|
exampleHandler := componentHandlers.NewExampleHandler()
|
|
protected.GET("/example", exampleHandler.GetExample)
|
|
protected.POST("/example", exampleHandler.PostExample)
|
|
|
|
// WebSocket endpoint
|
|
protected.GET("/websocket", WebSocketHandler)
|
|
protected.GET("/webservice", WebServiceHandler)
|
|
}
|
|
}
|
|
|
|
return router
|
|
}
|
|
|
|
// WebSocketHandler handles WebSocket connections
|
|
func WebSocketHandler(c *gin.Context) {
|
|
// This will be implemented with proper WebSocket handling
|
|
c.JSON(http.StatusOK, gin.H{"message": "WebSocket endpoint"})
|
|
}
|
|
|
|
func WebServiceHandler(c *gin.Context) {
|
|
// This will be implemented with proper WebSocket handling
|
|
c.JSON(http.StatusOK, gin.H{"message": "WebSocket endpoint"})
|
|
}
|