new file: .env
modified: Dockerfile new file: cmd/api/main.go modified: docker-compose.yaml modified: go.mod modified: go.sum new file: internal/config/config.go new file: internal/handler/middleware.go new file: internal/handler/user_handler.go new file: internal/model/user.go new file: internal/repository/user_repository.go new file: internal/server/server.go new file: internal/service/user_service.go new file: main deleted: main.go new file: migrations/001_create_users.sql new file: pkg/database/postgres.go deleted: src/models/user.go add files from deepseek for rest api server on golang gorm and chi server router
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"serv_golang_rest_api/internal/handler"
|
||||
"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 handler.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 := handler.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)
|
||||
}
|
||||
Reference in New Issue
Block a user