11
"github.com/go-chi/chi/v5"
12
"github.com/go-chi/chi/v5/middleware"
13
"github.com/go-chi/cors"
14
"github.com/go-chi/httplog/v2"
17
"gohome.4gophers.ru/getapp/gohome/app/handlers/home"
30
func New(lc fx.Lifecycle, cfg Config, home *home.Handler) *Server {
39
OnStart: func(ctx context.Context) error {
40
s.server.Handler = s.routing()
44
OnStop: func(ctx context.Context) error {
53
func (s *Server) Start() {
55
log.Printf("start server on %s\n", s.server.Addr)
56
err := s.server.ListenAndServe()
57
if err != nil && !errors.Is(err, http.ErrServerClosed) {
63
func (s *Server) Stop(ctx context.Context) {
64
s.server.Shutdown(ctx)
67
func (s *Server) routing() http.Handler {
68
logger := httplog.NewLogger("gohome", httplog.Options{
70
LogLevel: slog.LevelDebug,
73
MessageFieldName: "message",
75
QuietDownRoutes: []string{
79
QuietDownPeriod: 10 * time.Second,
85
r.Use(middleware.RequestID)
86
r.Use(httplog.RequestLogger(logger))
87
r.Use(cors.New(cors.Options{
88
AllowedOrigins: []string{"*"},
89
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
90
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"},
91
ExposedHeaders: []string{"Link"},
92
AllowCredentials: true,
94
}).Handler, middleware.Recoverer, middleware.NoCache)
96
r.Get("/*", s.home.Home)