Skip to content

Add update-user endpoint (PUT /users/:id) - #10

Closed
Sagaj-learn wants to merge 2 commits into
mate-academy:mainfrom
Sagaj-learn:feature/update-user-endpoint
Closed

Add update-user endpoint (PUT /users/:id)#10
Sagaj-learn wants to merge 2 commits into
mate-academy:mainfrom
Sagaj-learn:feature/update-user-endpoint

Conversation

@Sagaj-learn

Copy link
Copy Markdown

What

Adds an update-a-user endpoint, PUT /users/:id, to the users resource, and hardens input validation across the resource.

  • db/store.js — new updateUser(id, {name, email}) helper that mutates the matching user in place and returns undefined for an unknown id (mirrors getUserById).
  • routes/users.jsPUT /:id route plus a shared validateUserInput() helper now used by both POST and PUT, so the two routes share one rule set.

Why

Completes the project's "ship a change end to end" feature. During self-review I found the original POST handler accepted non-string types, whitespace-only values, and malformed emails; extracting a shared validator fixes that for both routes instead of letting them drift.

Behavior

  • Update an existing user → 200 with the updated record.
  • Unknown id → 404 { "error": "User not found" }.
  • Missing/empty/whitespace name or email400 (checked before the id lookup, so a missing field on an existing id is 400, not 404).
  • Invalid email format → 400 { "error": "email is invalid" }.
  • Values are trimmed before storage; a null/non-object body is tolerated (no crash).

What a reviewer should test

  • PUT /users/1 with valid {name, email} → 200, fields updated & trimmed.
  • PUT /users/9999 → 404.
  • PUT /users/1 with only a name → 400 (the not-found-vs-validation ordering).
  • PUT /users/1 with email: "notanemail" → 400.
  • npm test → 9/9 green. The graded tests/ files are unchanged.

🤖 Generated with Claude Code

Sagaj-learn and others added 2 commits June 25, 2026 15:36
Implement the update-user endpoint and the store helper it needs:

- store.updateUser(id, {name, email}) mutates the matching user in place
  and returns undefined when no user has that id, mirroring getUserById.
- PUT /users/:id validates input before looking the user up, so a missing
  field on an existing id returns 400 (not 404), then maps an unknown id
  to 404.
- Extract validateUserInput() and use it from both POST and PUT so the two
  routes share one rule set: name and email must be non-empty trimmed
  strings, email must look like an address. Values are trimmed before
  storage, and a null/non-object body is tolerated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Document the plan, model choice, commit split, and what the review caught,
as required by the project grading.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Sagaj-learn

Copy link
Copy Markdown
Author

Closing — opening this against my own fork (Sagaj-learn) instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant