feat: some refactoring

This commit is contained in:
2025-11-22 22:23:49 +03:00
parent a247e6213e
commit 51f30b516e
29 changed files with 1094 additions and 129 deletions

View File

@@ -0,0 +1,22 @@
package server
import (
_ "git.nwaifu.su/sergey/MyGoServer/internal/apiserver/docs"
"git.nwaifu.su/sergey/MyGoServer/internal/apiserver/handlers"
"git.nwaifu.su/sergey/MyGoServer/internal/apiserver/middleware"
httpSwagger "github.com/swaggo/http-swagger"
)
// setupRoutes configures all routes
func (s *Server) setupRoutes() {
// Add request ID middleware to all routes
s.router.Handle("/", middleware.RequestIDMiddleware(
middleware.LoggingMiddleware(
handlers.NewHomeHandler(),
),
))
// Swagger UI
s.router.Handle("/swagger/", httpSwagger.WrapHandler)
}

View File

@@ -0,0 +1,70 @@
package server
import (
"context"
"net"
"net/http"
"git.nwaifu.su/sergey/MyGoServer/cmd/apiserver/config"
"git.nwaifu.su/sergey/MyGoServer/internal/apiserver/logger"
)
type contextKey struct {
key string
}
var connContextKey = &contextKey{"http-conn"}
func saveConnInContext(ctx context.Context, c net.Conn) context.Context {
return context.WithValue(ctx, connContextKey, c)
}
// Server represents the HTTP server
type Server struct {
config *config.Config
router *http.ServeMux
server *http.Server
}
// NewServer creates a new server instance
func NewServer(cfg *config.Config) *Server {
s := &Server{
config: cfg,
}
// Initialize logger
logger.Initialize(cfg.Logging.Level, cfg.Logging.Format, cfg.Logging.Output)
// Create router
s.router = http.NewServeMux()
s.setupRoutes()
// Create HTTP server
s.server = &http.Server{
Addr: cfg.Server.Address,
Handler: s.router,
ConnContext: saveConnInContext,
}
return s
}
// Start starts the server
func (s *Server) Start() error {
return s.server.ListenAndServe()
}
// GetRouter returns the HTTP router
func (s *Server) GetRouter() *http.ServeMux {
return s.router
}
// GetServer returns the HTTP server instance
func (s *Server) GetServer() *http.Server {
return s.server
}
// GetConfig returns the server configuration
func (s *Server) GetConfig() *config.Config {
return s.config
}