diff --git a/apps/backend/lambdas/projects/handler.ts b/apps/backend/lambdas/projects/handler.ts index b5927e3..32001a2 100644 --- a/apps/backend/lambdas/projects/handler.ts +++ b/apps/backend/lambdas/projects/handler.ts @@ -25,6 +25,20 @@ export const handler = async (event: any): Promise => { return json(200, projects); } + // PUT /projects/{id} + if (rawPath.startsWith('/') && rawPath.split('/').length === 2 && method === 'PUT') { + const id = rawPath.split('/')[1]; + if (!id) return json(400, { message: 'id is required' }); + const body = event.body ? JSON.parse(event.body) as Record : {}; + const updatedProject = await db + .updateTable("branch.projects") + .set(body) + .where("project_id", "=", Number(id)) + .returning(["project_id", "name", "total_budget"]) // control returned fields + .executeTakeFirst(); + if (!updatedProject) return json(404, { message: `Project not found for id: ${id}` }); + return json(200, updatedProject); + } // <<< ROUTES-END return json(404, { message: 'Not Found', path: normalizedPath, method }); diff --git a/apps/backend/lambdas/projects/package.json b/apps/backend/lambdas/projects/package.json index 603abb0..7b75315 100644 --- a/apps/backend/lambdas/projects/package.json +++ b/apps/backend/lambdas/projects/package.json @@ -15,7 +15,7 @@ "@types/pg": "^8.15.6", "js-yaml": "^4.1.0", "ts-node": "^10.9.2", - "typescript": "^5.4.5" + "typescript": "^5.4.5", "start-server-and-test": "^2.1.1" }, "dependencies": { diff --git a/apps/backend/lambdas/projects/test/crud.test.ts b/apps/backend/lambdas/projects/test/crud.test.ts index cebb1ed..70a2200 100644 --- a/apps/backend/lambdas/projects/test/crud.test.ts +++ b/apps/backend/lambdas/projects/test/crud.test.ts @@ -39,3 +39,24 @@ test("get projects test 🌞", async () => { console.log(body); expect(body.length).toBeGreaterThan(0); }); +test("update project test 🌞", async () => { + let res = await fetch("http://localhost:3000/projects/1", { + method: "PUT", + body: JSON.stringify({ name: "Project 1 Updated", total_budget: 2000 }), + }); + expect(res.status).toBe(200); + let body = await res.json(); + expect(body.project_id).toBe(1); + expect(body.name).toContain("Project 1 Updated"); + expect(Number(body.total_budget)).toBe(Number(2000.00)); +}); + +test("project put 404 test 🌞", async () => { + let res = await fetch("http://localhost:3000/projects/1000", { + method: "PUT", + body: JSON.stringify({ name: "Project 1 Updated", total_budget: 2000 }), + }); + expect(res.status).toBe(404); + let body = await res.json(); + expect(body.message).toBe("Project not found for id: 1000"); +});