Files
tp/serv_golang_rest_api/internal/server/server.go
T
valitovgaziz 8419b76452 renamed: internal/handler/auth.go -> internal/handlers/auth.go
renamed:    internal/handler/middleware.go -> internal/handlers/middleware.go
	renamed:    internal/handler/user_handler.go -> internal/handlers/user_handler.go
	modified:   internal/server/server.go
change handler to handlers name
2025-09-29 01:33:20 +05:00

77 lines
1.8 KiB
Go

package server
import (
"encoding/json"
"net/http"
"serv_golang_rest_api/internal/handlers"
"serv_golang_rest_api/internal/repository"
"serv_golang_rest_api/internal/service"
"github.com/go-chi/chi/v5"
"gorm.io/gorm"
)
type Server struct {
router *chi.Mux
db *gorm.DB
}
func New(db *gorm.DB) *Server {
s := &Server{
router: chi.NewRouter(),
db: db,
}
s.configureRouter()
return s
}
func (s *Server) configureRouter() {
// Общие middleware
for _, middleware := range handlers.CommonMiddleware() {
s.router.Use(middleware)
}
// Health check
s.router.Get("/health", s.healthCheck)
// API routes
s.router.Route("/api/v1", func(r chi.Router) {
s.setupUserRoutes(r)
})
}
func (s *Server) setupUserRoutes(r chi.Router) {
userRepo := repository.NewUserRepository(s.db)
userService := service.NewUserService(userRepo)
userHandler := handlers.NewUserHandler(userService)
r.Route("/users", func(r chi.Router) {
r.Get("/", userHandler.GetAllUsers)
r.Post("/", userHandler.CreateUser)
r.Get("/{id}", userHandler.GetUser)
})
}
func (s *Server) healthCheck(w http.ResponseWriter, r *http.Request) {
// Проверяем соединение с БД
sqlDB, err := s.db.DB()
if err != nil {
http.Error(w, "Database connection error", http.StatusServiceUnavailable)
return
}
if err := sqlDB.Ping(); err != nil {
http.Error(w, "Database ping failed", http.StatusServiceUnavailable)
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]string{
"status": "healthy",
"timestamp": http.TimeFormat,
})
}
func (s *Server) Run(port string) error {
return http.ListenAndServe(":"+port, s.router)
}