func setupRoutes(r *gin.Engine, h *handler.Handler, mw *middleware.Middleware) {
// Public routes
r.GET("/health", h.HealthCheck)
r.GET("/version", h.Version)
// Public subscriber registration
public := r.Group("/api/v1/public")
{
public.POST("/subscribers", h.RegisterSubscriberPublic)
}
// Protected routes
api := r.Group("/api/v1")
api.Use(mw.Auth())
{
// Subscribers
api.POST("/subscribers", h.RegisterSubscriber)
api.GET("/subscribers/lookup", h.LookupSubscriber)
api.GET("/subscribers/:id", h.GetSubscriber)
// Wallet
api.GET("/balance/:user_id", h.GetBalance)
api.POST("/payments", h.CreatePayment)
api.GET("/transactions", h.ListTransactions)
// ... more routes
}
// Admin routes
admin := r.Group("/api/v1/admin")
admin.Use(mw.JWT(), mw.RequireRole("system_admin"))
{
admin.GET("/users", h.ListAdminUsers)
admin.POST("/api-keys", h.CreateAPIKey)
}
// POS routes with HMAC auth
pos := r.Group("/pos")
pos.Use(mw.HMACAuth())
{
pos.POST("/payment", h.POSPayment)
pos.POST("/verify-card", h.POSVerifyCard)
}
}