diff --git a/cmd/main.go b/cmd/main.go index d462b06..e7b361f 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -2,30 +2,25 @@ package main import ( "database/sql" - "fmt" "log" "log/slog" "net/http" "os" + "gitea.michaelthomson.dev/mthomson/habits/internal/middleware" "gitea.michaelthomson.dev/mthomson/habits/internal/migrate" todohandler "gitea.michaelthomson.dev/mthomson/habits/internal/todo/handler" - todosqliterepository "gitea.michaelthomson.dev/mthomson/habits/internal/todo/repository/sqlite" + todorepository "gitea.michaelthomson.dev/mthomson/habits/internal/todo/repository/sqlite" todoservice "gitea.michaelthomson.dev/mthomson/habits/internal/todo/service" _ "github.com/mattn/go-sqlite3" ) -func loggingMiddleware(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - slog.Info(fmt.Sprintf("[%s] %s", r.Method, r.URL)) - next.ServeHTTP(w, r) - }) -} - func main() { // create logger - logger := slog.New(slog.NewTextHandler(os.Stdout, nil)) - slog.SetDefault(logger) + httpLogger := slog.New(slog.NewTextHandler(os.Stdout, nil)) + + // create middlewares + loggingMiddleware := middleware.LoggingMiddleware(httpLogger) // create db pool db, err := sql.Open("sqlite3", "./habits.db") @@ -39,7 +34,7 @@ func main() { migrate.Migrate(db) // create repos - todoRepository := todosqliterepository.NewSqliteTodoRepository(db) + todoRepository := todorepository.NewSqliteTodoRepository(db) // create services todoService := todoservice.NewTodoService(todoRepository) @@ -49,13 +44,13 @@ func main() { // register handlers mux.Handle("GET /todo/{id}", loggingMiddleware(todohandler.HandleTodoGet(todoService))) - mux.Handle("POST /todo", todohandler.HandleTodoCreate(todoService)) - mux.Handle("DELETE /todo/{id}", todohandler.HandleTodoDelete(todoService)) - mux.Handle("PUT /todo/{id}", todohandler.HandleTodoUpdate(todoService)) + mux.Handle("POST /todo", loggingMiddleware(todohandler.HandleTodoCreate(todoService))) + mux.Handle("DELETE /todo/{id}", loggingMiddleware(todohandler.HandleTodoDelete(todoService))) + mux.Handle("PUT /todo/{id}", loggingMiddleware(todohandler.HandleTodoUpdate(todoService))) // create server server := &http.Server{ - Addr: ":8080", + Addr: ":8080", Handler: mux, } diff --git a/internal/middleware/logging.go b/internal/middleware/logging.go new file mode 100644 index 0000000..584758c --- /dev/null +++ b/internal/middleware/logging.go @@ -0,0 +1,23 @@ +package middleware + +import ( + "context" + "log/slog" + "net/http" +) + +func LoggingMiddleware(logger *slog.Logger) func(http.Handler) http.Handler { + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + logger.LogAttrs( + context.Background(), + slog.LevelInfo, + "Incoming request", + slog.String("method", r.Method), + slog.String("path", r.URL.String()), + ) + + next.ServeHTTP(w, r) + }) + } +}