88 lines
2.6 KiB
Go
88 lines
2.6 KiB
Go
package api
|
|
|
|
import (
|
|
"daemonService/internal/handlers"
|
|
"daemonService/internal/models"
|
|
"daemonService/internal/models/obtencionCodigos"
|
|
"fmt"
|
|
"github.com/gorilla/mux"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
type Server struct {
|
|
router *mux.Router
|
|
services []models.SoapService
|
|
servicesCuis []obtencionCodigos.CuisService
|
|
isCron bool
|
|
port int
|
|
}
|
|
|
|
func NewServer(port int, services []models.SoapService, servicesCuis []obtencionCodigos.CuisService, isCron bool) *Server {
|
|
s := &Server{
|
|
router: mux.NewRouter(),
|
|
services: services,
|
|
servicesCuis: servicesCuis,
|
|
isCron: isCron,
|
|
port: port,
|
|
}
|
|
|
|
s.setupRoutes()
|
|
s.setupMiddleware()
|
|
return s
|
|
}
|
|
|
|
func (s *Server) setupRoutes() {
|
|
// Register service-related routes
|
|
serviceHandler := handlers.NewServiceHandler(s.services, s.servicesCuis, s.isCron)
|
|
s.router.HandleFunc("/api/services", serviceHandler.ListServices).Methods("GET")
|
|
s.router.HandleFunc("/api/services/run-all", serviceHandler.RunAllServices).Methods("GET")
|
|
s.router.HandleFunc("/api/services/{name}", serviceHandler.RunService).Methods("GET")
|
|
//s.router.HandleFunc("/api/services/run-all", serviceHandler.RunAllServices).Methods("POST")
|
|
//s.router.HandleFunc("/api/services/{name}", serviceHandler.RunService).Methods("POST")
|
|
|
|
//serviceCuisHandler := obtencionCodigo.HandlerServiceCuis(s.services, s.isCron)
|
|
s.router.HandleFunc("/api/services/get-code/{obtenerCodigo}", serviceHandler.RunGetCodeService).Methods("POST")
|
|
|
|
healthHandler := handlers.NewHealthHandler()
|
|
s.router.HandleFunc("/api/health", healthHandler.Check).Methods("GET")
|
|
}
|
|
|
|
func (s *Server) setupMiddleware() {
|
|
s.router.Use(LoggingMiddleware)
|
|
}
|
|
|
|
func (s *Server) Start() *http.Server {
|
|
srv := &http.Server{
|
|
Addr: fmt.Sprintf(":%d", s.port),
|
|
Handler: s.router,
|
|
ReadTimeout: 15 * time.Second,
|
|
WriteTimeout: 15 * time.Second,
|
|
IdleTimeout: 60 * time.Second,
|
|
}
|
|
|
|
go func() {
|
|
log.Printf("API HTTP started on port %d", s.port)
|
|
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
|
log.Fatalf("HTTP server error: %v", err)
|
|
}
|
|
}()
|
|
|
|
return srv
|
|
}
|
|
|
|
func LoggingMiddleware(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
start := time.Now()
|
|
log.Printf("API Request: %s %s", r.Method, r.URL.Path)
|
|
next.ServeHTTP(w, r)
|
|
log.Printf("API Request: %s %s completed in %v", r.Method, r.URL.Path, time.Since(start))
|
|
})
|
|
}
|
|
|
|
func StartAPIServer(port int, services []models.SoapService, serviceCuis []obtencionCodigos.CuisService, isCron bool) *http.Server {
|
|
server := NewServer(port, services, serviceCuis, isCron)
|
|
return server.Start()
|
|
}
|