You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.2 KiB
Go
42 lines
1.2 KiB
Go
package server
|
|
|
|
import (
|
|
"database/sql"
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"git.runcible.io/learning/ratchet/internal/model"
|
|
)
|
|
|
|
type RatchetServer struct {
|
|
http.Handler
|
|
|
|
logger *slog.Logger
|
|
templateCache *TemplateCache
|
|
//Services used by HTTP routes
|
|
snippetService *model.SnippetService
|
|
UserService model.UserService
|
|
}
|
|
|
|
func NewRatchetServer(logger *slog.Logger, tc *TemplateCache, db *sql.DB) *RatchetServer {
|
|
rs := new(RatchetServer)
|
|
rs.logger = logger
|
|
rs.snippetService = &model.SnippetService{DB: db}
|
|
|
|
rs.templateCache = tc
|
|
// TODO implement middleware that disables directory listings
|
|
fileServer := http.FileServer(http.Dir("./ui/static/"))
|
|
router := http.NewServeMux()
|
|
|
|
// Subtree pattern for static assets
|
|
router.Handle("GET /static/", http.StripPrefix("/static/", fileServer))
|
|
|
|
// Mux Router implements the Handler interface. AKA it has a ServeHTTP receiver.
|
|
// SEE we can really clean things up by moving this into routes.go and handlers.go
|
|
wrappedMux := addRoutes(router, rs.logger, rs.templateCache, db, rs.snippetService)
|
|
rs.Handler = CommonHeaderMiddleware(wrappedMux)
|
|
rs.Handler = RequestLoggingMiddleware(rs.Handler, logger)
|
|
rs.Handler = RecoveryMiddleware(rs.Handler)
|
|
return rs
|
|
}
|