49 lines
1011 B
Go
49 lines
1011 B
Go
package api
|
|
|
|
import (
|
|
"database/sql"
|
|
"net/http"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/go-chi/chi/v5/middleware"
|
|
)
|
|
|
|
type Server struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func NewServer(db *sql.DB) (*Server, error) {
|
|
return &Server{db: db}, nil
|
|
}
|
|
|
|
func (s *Server) Router() http.Handler {
|
|
r := chi.NewRouter()
|
|
r.Use(middleware.RequestID)
|
|
r.Use(middleware.RealIP)
|
|
r.Use(middleware.Recoverer)
|
|
r.Use(jsonMiddleware)
|
|
|
|
r.Get("/health", s.handleHealth)
|
|
|
|
r.Route("/projects", func(r chi.Router) {
|
|
r.Post("/", s.handleCreateProject)
|
|
r.Get("/", s.handleListProjects)
|
|
r.Get("/{id}", s.handleGetProject)
|
|
r.Patch("/{id}", s.handlePatchProject)
|
|
})
|
|
|
|
r.Route("/work", func(r chi.Router) {
|
|
r.Post("/", s.handleCreateWork)
|
|
r.Get("/", s.handleListWork)
|
|
r.Get("/{id}", s.handleGetWork)
|
|
r.Patch("/{id}", s.handlePatchWork)
|
|
r.Delete("/{id}", s.handleDeleteWork)
|
|
})
|
|
|
|
return r
|
|
}
|
|
|
|
func (s *Server) handleHealth(w http.ResponseWriter, r *http.Request) {
|
|
writeJSON(w, http.StatusOK, map[string]string{"status": "ok"})
|
|
}
|