Making some decisions and refactoring
parent
1b823bf1d5
commit
43b7e2d986
@ -1,4 +1,4 @@
|
||||
package user
|
||||
package model
|
||||
|
||||
import (
|
||||
"context"
|
@ -1,4 +1,4 @@
|
||||
package user
|
||||
package model
|
||||
|
||||
import (
|
||||
"testing"
|
@ -0,0 +1,28 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
|
||||
"git.runcible.io/learning/ratchet/internal/model"
|
||||
)
|
||||
|
||||
func addRoutes(mux *http.ServeMux,
|
||||
logger *slog.Logger,
|
||||
db *sql.DB,
|
||||
snippetService *model.SnippetService) http.Handler {
|
||||
|
||||
// /{$} is used to prevent subtree path patterns from acting like a wildcard
|
||||
// resulting in this route requiring an exact match on "/" only
|
||||
// You can only include one HTTP method in a route pattern if you choose
|
||||
// GET will match GET & HEAD http request methods
|
||||
mux.Handle("GET /{$}", handleHome(logger, snippetService))
|
||||
mux.Handle("GET /snippet/view/{id}", handleSnippetView(logger, snippetService))
|
||||
mux.Handle("GET /snippet/create", handleSnippetCreateGet())
|
||||
mux.Handle("POST /snippet/create", handleSnippetCreatePost(logger, snippetService))
|
||||
// mux.Handle("/something", handleSomething(logger, config))
|
||||
// mux.Handle("/healthz", handleHealthzPlease(logger))
|
||||
// mux.Handle("/", http.NotFoundHandler())
|
||||
return mux
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
|
||||
"git.runcible.io/learning/ratchet/internal/model"
|
||||
)
|
||||
|
||||
type RatchetServer struct {
|
||||
http.Handler
|
||||
|
||||
logger *slog.Logger
|
||||
//Services used by HTTP routes
|
||||
snippetService *model.SnippetService
|
||||
UserService model.UserService
|
||||
}
|
||||
|
||||
func NewRatchetServer(logger *slog.Logger, db *sql.DB) *RatchetServer {
|
||||
rs := new(RatchetServer)
|
||||
rs.logger = logger
|
||||
rs.snippetService = &model.SnippetService{DB: db}
|
||||
// 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))
|
||||
|
||||
// /{$} is used to prevent subtree path patterns from acting like a wildcard
|
||||
// resulting in this route requiring an exact match on "/" only
|
||||
// You can only include one HTTP method in a route pattern if you choose
|
||||
// GET will match GET & HEAD http request methods
|
||||
// router.HandleFunc("GET /{$}", rs.home)
|
||||
// router.HandleFunc("GET /snippet/view/{id}", rs.snippetView)
|
||||
// router.HandleFunc("GET /snippet/create", rs.snippetCreate)
|
||||
|
||||
// FYI The http.HandlerFunc() adapter works by automatically adding a ServeHTTP() method to
|
||||
// the passed function
|
||||
// router.HandleFunc("POST /snippet/create", rs.snippetCreatePost)
|
||||
|
||||
// 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
|
||||
rs.Handler = addRoutes(router, rs.logger, db, rs.snippetService)
|
||||
return rs
|
||||
}
|
Loading…
Reference in New Issue