• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

course-go / todos / 16817596735

07 Aug 2025 10:52PM UTC coverage: 32.468% (+0.6%) from 31.858%
16817596735

push

github

stanislav-zeman
fix: replace omitempty with omitzero where applicable

325 of 1001 relevant lines covered (32.47%)

9.31 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/internal/http/server.go
1
package http
2

3
import (
4
        "log/slog"
5
        "net/http"
6
        "time"
7

8
        "github.com/course-go/todos/internal/http/controllers/health"
9
        "github.com/course-go/todos/internal/http/controllers/todos"
10
        "github.com/course-go/todos/internal/http/dto/response"
11
        "github.com/course-go/todos/internal/http/metrics"
12
        "github.com/course-go/todos/internal/http/middleware"
13
        "github.com/go-chi/chi/v5"
14
        "github.com/prometheus/client_golang/prometheus/promhttp"
15
)
16

17
const (
18
        defaultServerReadHeaderTimeout  = 2 * time.Second
19
        defaultServerIdleTimeoutTimeout = 30 * time.Second
20
)
21

22
func NewServer(
23
        logger *slog.Logger,
24
        metrics *metrics.Metrics,
25
        hostname string,
26
        hc *health.Controller,
27
        tc *todos.Controller,
28
) (server *http.Server, err error) {
×
29
        commonMiddleware := []middleware.Middleware{
×
30
                middleware.Logging(logger),
×
31
                middleware.Metrics(metrics),
×
32
        }
×
33
        jsonMiddleware := []middleware.Middleware{
×
34
                middleware.Logging(logger),
×
35
                middleware.Metrics(metrics),
×
36
                middleware.ContentType,
×
37
        }
×
38

×
39
        mux := chi.NewRouter()
×
40
        mux.NotFound(notFound)
×
41
        mux.MethodNotAllowed(methodNotAllowed)
×
42

×
43
        mux.With(commonMiddleware...).Handle("/metrics", promhttp.Handler())
×
44
        mux.Route("/api/v1", func(r chi.Router) {
×
45
                r.Use(jsonMiddleware...)
×
46
                r.Route("/healthz", func(r chi.Router) {
×
47
                        r.Get("/", hc.GetHealthController)
×
48
                })
×
49
                r.Route("/todos", func(r chi.Router) {
×
50
                        r.Get("/", tc.GetTodosController)
×
51
                        r.Get("/{id}", tc.GetTodoController)
×
52
                        r.Post("/", tc.CreateTodoController)
×
53
                        r.Put("/{id}", tc.UpdateTodoController)
×
54
                        r.Delete("/{id}", tc.DeleteTodoController)
×
55
                })
×
56
        })
57

58
        return &http.Server{
×
59
                Addr:              hostname,
×
60
                ReadTimeout:       1 * time.Second,
×
61
                ReadHeaderTimeout: defaultServerReadHeaderTimeout,
×
62
                WriteTimeout:      1 * time.Second,
×
63
                IdleTimeout:       defaultServerIdleTimeoutTimeout,
×
64
                Handler:           mux,
×
65
        }, nil
×
66
}
67

68
func notFound(w http.ResponseWriter, _ *http.Request) {
×
69
        code := http.StatusNotFound
×
70
        w.WriteHeader(code)
×
71
        w.Header().Add("Content-Type", "application/json")
×
72
        _, _ = w.Write(response.ErrorBytes(code))
×
73
}
×
74

75
func methodNotAllowed(w http.ResponseWriter, _ *http.Request) {
×
76
        code := http.StatusMethodNotAllowed
×
77
        w.WriteHeader(code)
×
78
        w.Header().Add("Content-Type", "application/json")
×
79
        _, _ = w.Write(response.ErrorBytes(code))
×
80
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc