Commit Graph

7 Commits

Author SHA1 Message Date
benjamin 3ca0514b7a Add missing docstrings / comments 2026-01-31 13:43:00 +01:00
benjamin 3f561ab70e Create a config map
For now, the config contains:
- database "credentials" (safe to commit, it's just the name of the
  sqlite file)
- port on which the HTTP server will listen
2026-01-31 13:43:00 +01:00
benjamin 78948fd017 Add GET /item/:id endpoint
This new endpoint was so easy to add, it would have been a shame not to
do it. Besides, it makes sense since the reponse from `POST /items`
provided a `Location` header for the newly created item.
2026-01-31 13:43:00 +01:00
benjamin eded366570 Persist items to the database
The database that was chosen here is SQLite, because it's dead simple to
setup and more than enough for this project.

Please note that I took some liberty with the assignment. I chose to use
a numeric field for the `id` column of an item. This leverages automatic
creation and incrementation of the id by SQLite itself.
2026-01-31 13:42:57 +01:00
benjamin da6f8b4519 Add input validation
Input validation uses Malli coercion. Sadly enough, email is validated
with a regexp.
2026-01-31 13:39:34 +01:00
benjamin b9ae9a8b56 Check 'POST /items' payload is application/json
This commit adds a middleware function that checks any POST endpoint is
called with Content-Type: application/json. Returns `HTTP 415
Unsupported Media Type` if this is not the case.

TODO: this commit does not check that the payload is actually
well-formed JSON. If the payload is *not* valid JSON, muutaja will fail,
which will result in an `HTTP 500 Server error`.
2026-01-31 13:37:20 +01:00
benjamin c278633c66 Initial commit
This initial version is purposely extremily limited:
* `GET /ahoy` endpoint, just to check the server is alive
* `GET /items` endpoint, always returns the same item
* `POST items` endpoint, checks and print request payload, no
  persistance
* calling any other route defaults to a 404
2026-01-31 13:37:16 +01:00