Skip to content

Releases

5.0.1

Choose a tag to compare

@CSchulz CSchulz released this 25 Oct 19:05

Changed

  • Dependency updates (no API changes): @nestjs/common, @nestjs/core and
    @nestjs/platform-express 12.2.0, express 5.3.0, multer 2.4.0,
    body-parser 2.4.0, morgan 1.12.1, compression 1.8.2, zod 4.6.6,
    fast-uri 3.1.9 plus dev-tooling bumps (vite 8.3.5, source-map-js,
    brace-expansion).

5.0.0

Choose a tag to compare

@CSchulz CSchulz released this 23 Oct 16:53

Breaking

  • POST /register (/signup, /users) returns 409 Conflict instead of
    400 for an email that is already registered.
    The body is unchanged
    (bare JSON string "Email already exists"). Clients checking for 400 on
    this case need to check for 409. Other register validation errors
    (missing fields, invalid email, short password) stay 400.
  • POST /books rejects a duplicate ISBN with 409 Conflict and the bare
    JSON string "Book with ISBN <isbn> already exists"; no second book is
    stored. In 4.x such a request returned 201 and silently stored a duplicate,
    so clients that create the same ISBN twice now get an error. This restores
    the 3.x behavior: since 4.0 the id is a UUID instead of the ISBN, so the
    implicit duplicate-id check of json-server (which surfaced as a 500 in 3.x)
    was gone.

4.2.0

Choose a tag to compare

@GregOnNet GregOnNet released this 18 Sep 17:49

Breaking

  • Package is now pure ESM ("type": "module" in package.json). Internal
    imports use .js-suffixed paths and tsconfig.json targets ES2023 with
    nodenext module resolution. Anything require()-ing bookmonkey-api or its
    internals from CommonJS needs to switch to import.
  • createdAt / updatedAt are now required, server-managed fields on every
    book.
    They're set on POST and refreshed on PUT / PATCH; any
    createdAt / updatedAt sent by the client is ignored. Every book response
    now carries two additional fields that weren't there before.
  • book.price is of type number

Added

  • GET /books/:isbn/exists – lightweight existence check, responds with
    { isbn, exists }. Registered ahead of GET /books/:isbn so exists isn't
    swallowed as an ISBN.
  • predecessorIsbn / successorIsbn on the book schema: the ISBN of the
    previous / next volume in the same series, or null for standalone titles and
    at the ends of a series. Follow them with GET /books/:isbn. The fields are
    accepted on POST / PUT / PATCH and appear in the OpenAPI schema.
  • ?_devError=true on every /books endpoint (GET /books,
    GET /books/:isbn, GET /books/:isbn/exists, POST, PUT, PATCH,
    DELETE) forces a 400 response, for practicing client-side error handling
    in workshops.

Infrastructure

  • Test suite migrated from Jest to Vitest (vitest.config.ts /
    vitest.config.e2e.ts), replacing jest.config.js / test/jest-e2e.json.
    npm test / npm run test:e2e now run under Vitest; added test:watch and
    test:cov scripts.
  • Linting switched from ESLint to oxlint (oxlint.json); eslint.config.mjs
    and its dependencies are gone.

Changed

  • Seed data replaced. The 250 technical books are gone; the shipped seed now
    holds 50 well-known fiction and non-fiction titles – Harry Potter, The Lord
    of the Rings, The Hunger Games, The Wheel of Time, A Song of Ice and Fire,
    Mistborn, His Dark Materials and more, plus standalones such as The Willpower
    Instinct
    and How to Win Friends and Influence People. All cover images under
    covers/<isbn>.png were swapped accordingly. Seed prices are now currency: "EUR".

Fixed

  • POST /dev/reset's Swagger summary is now in English (previously it was
    German-only).

3.3.0

Choose a tag to compare

@tidusIO tidusIO released this 03 Sep 14:37
2efcc46

Feature: Add publishedAt & coAuthors to book entity by @GregOnNet
Chore: Update dependencies & fix vulnerabilities by @GregOnNet
Test: Add few integration tests by @GregOnNet

3.2.0

Choose a tag to compare

@github-actions github-actions released this 10 Mar 13:48
2a02ce4
Update github-release.yml