diff --git a/cmd/web/handlers.go b/cmd/web/handlers.go index 2976535..3926957 100644 --- a/cmd/web/handlers.go +++ b/cmd/web/handlers.go @@ -8,6 +8,7 @@ import ( "strconv" "gitea.local.lab/Lbenedar/snippetbox/internal/models" + "github.com/julienschmidt/httprouter" ) func (app *application) render(w http.ResponseWriter, status int, page string, data *templateData) { @@ -46,7 +47,8 @@ func (app *application) home(w http.ResponseWriter, r *http.Request) { } func (app *application) snippetView(w http.ResponseWriter, r *http.Request) { - id, err := strconv.Atoi(r.URL.Query().Get("id")) + params := httprouter.ParamsFromContext(r.Context()) + id, err := strconv.Atoi(params.ByName("id")) if err != nil || id < 1 { app.notFound(w) return @@ -68,11 +70,10 @@ func (app *application) snippetView(w http.ResponseWriter, r *http.Request) { } func (app *application) snippetCreate(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - w.Header().Set("Allow", http.MethodPost) - app.clientError(w, http.StatusMethodNotAllowed) - return - } + w.Write([]byte("Display the form for creating a new snippet...")) +} + +func (app *application) snippetCreatePost(w http.ResponseWriter, r *http.Request) { title := "0 snail" content := "0 snail\nClimb Mount Fuji,\nBut slowly, slowly!\n\n-Kobayshi Issa" expires := 7 diff --git a/cmd/web/routes.go b/cmd/web/routes.go index 79731d8..73efb38 100644 --- a/cmd/web/routes.go +++ b/cmd/web/routes.go @@ -3,20 +3,26 @@ package main import ( "net/http" + "github.com/julienschmidt/httprouter" "github.com/justinas/alice" ) func (app *application) routes() http.Handler { - mux := http.NewServeMux() + router := httprouter.New() + + router.NotFound = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + app.notFound(w) + }) fileServer := http.FileServer(http.Dir("./ui/static/")) - mux.Handle("/static/", http.StripPrefix("/static", fileServer)) + router.Handler(http.MethodGet, "/static/", http.StripPrefix("/static", fileServer)) - mux.HandleFunc("/", app.home) - mux.HandleFunc("/snippet/view", app.snippetView) - mux.HandleFunc("/snippet/create", app.snippetCreate) + router.HandlerFunc(http.MethodGet, "/", app.home) + router.HandlerFunc(http.MethodGet, "/snippet/view/:id", app.snippetView) + router.HandlerFunc(http.MethodGet, "/snippet/create", app.snippetCreate) + router.HandlerFunc(http.MethodPost, "/snippet/create", app.snippetCreatePost) standard := alice.New(app.recoverPanic, app.logRequest, secureHeaders) - return standard.Then(mux) + return standard.Then(router) } diff --git a/go.mod b/go.mod index 4bb10f7..fea578c 100644 --- a/go.mod +++ b/go.mod @@ -5,5 +5,6 @@ go 1.25.0 require ( filippo.io/edwards25519 v1.1.0 // indirect github.com/go-sql-driver/mysql v1.9.3 // indirect + github.com/julienschmidt/httprouter v1.3.0 // indirect github.com/justinas/alice v1.2.0 // indirect ) diff --git a/go.sum b/go.sum index 8055725..09928e3 100644 --- a/go.sum +++ b/go.sum @@ -2,5 +2,7 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= +github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/justinas/alice v1.2.0 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo= github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA= diff --git a/ui/html/pages/home.tmpl b/ui/html/pages/home.tmpl index fa01fbf..529726d 100644 --- a/ui/html/pages/home.tmpl +++ b/ui/html/pages/home.tmpl @@ -11,7 +11,7 @@ {{range .Snippets}}