Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions NOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Project Notes: Update User Endpoint

## Plan
The approved plan outlined adding a `updateUser` method to `db/store.js` and creating a `PUT /users/:id` route in `routes/users.js` with validation and 404 handling. No major edits were needed before approval as the scope aligned with `tests/update-user.test.js`.

## Model Choice
I chose Sonnet 5 / Claude Code default model because it provides reliable code generation, edge-case analysis, and structured git workflows.

## Commit Split
Commits were split into logical steps:
1. Data access layer: added `updateUser` in `db/store.js`.
2. API route: implemented `PUT /users/:id` validation and route handling in `routes/users.js`.
3. Documentation: added `NOTES.md`.

## Review Findings
The review confirmed proper input validation (400 response for missing/invalid fields), clean 404 handling for unknown user IDs, and green test runs across all suites.
14 changes: 13 additions & 1 deletion db/store.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,16 @@ function createUser({ name, email }) {
return user;
}

module.exports = { getAllUsers, getUserById, createUser };
function updateUser(id, { name, email }) {
const user = getUserById(id);

if (!user) {
return undefined;
}

user.name = name;
user.email = email;
return user;
}

module.exports = { getAllUsers, getUserById, createUser, updateUser };
18 changes: 18 additions & 0 deletions routes/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,22 @@ router.post("/", (req, res) => {
res.status(201).json(user);
});

// PUT /users/:id — update an existing user; name and email are required
router.put("/:id", (req, res) => {
const { name, email } = req.body;

if (!name || !email) {
return res.status(400).json({ error: "name and email are required" });
}

const id = Number(req.params.id);
const user = store.updateUser(id, { name, email });

if (!user) {
return res.status(404).json({ error: "User not found" });
}

res.json(user);
});

module.exports = router;