From cedfd7f281ae38f12748c4c64e01f5b7ecff53ae Mon Sep 17 00:00:00 2001 From: Maria Cano Date: Mon, 27 Jan 2025 09:05:35 -0500 Subject: [PATCH] Get User and Projects in single call --- frontend/src/admin/user-form.tsx | 18 +++--------------- .../com/zenmo/orm/user/UserRepository.kt | 6 ++++++ .../kotlin/com/zenmo/ztor/plugins/Databases.kt | 2 +- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/frontend/src/admin/user-form.tsx b/frontend/src/admin/user-form.tsx index 22428fb..7ab59f2 100644 --- a/frontend/src/admin/user-form.tsx +++ b/frontend/src/admin/user-form.tsx @@ -39,7 +39,7 @@ export const UserForm: FunctionComponent = () => { const fetchUser = async () => { setLoading(true); try { - const response = await fetch(`${import.meta.env.VITE_ZTOR_URL}/users/${userId}`, { + const response = await fetch(`${import.meta.env.VITE_ZTOR_URL}/users/${userId}/projects`, { credentials: "include", }); if (response.status === 401) { @@ -50,6 +50,8 @@ export const UserForm: FunctionComponent = () => { const userData = await response.json(); setUser(userData); setOriginalData(userData); + setUserProjects(userData.projects) + } else { alert(`Error fetching user: ${response.statusText}`); } @@ -60,20 +62,6 @@ export const UserForm: FunctionComponent = () => { } }; - const fetchProjects = async () => { - try { - const response = await fetch(`${import.meta.env.VITE_ZTOR_URL}/users/${userId}/projects`, { - credentials: "include", - }); - if (!response.ok) return - - setUserProjects(projectsFromJson(await response.text())) - } catch (error) { - console.error("Error fetching projects:", error); - } - }; - - fetchProjects(); fetchUser(); } else { setIsEditing(true); diff --git a/zorm/src/main/kotlin/com/zenmo/orm/user/UserRepository.kt b/zorm/src/main/kotlin/com/zenmo/orm/user/UserRepository.kt index 16bf213..ccbaf82 100644 --- a/zorm/src/main/kotlin/com/zenmo/orm/user/UserRepository.kt +++ b/zorm/src/main/kotlin/com/zenmo/orm/user/UserRepository.kt @@ -28,6 +28,12 @@ class UserRepository( } } } + + fun getUserAndProjects(userId: UUID): User { + return getUsersAndProjects( + (UserTable.id eq userId) + ).first() + } fun getUsersAndProjects(filter: Op = Op.TRUE): List { return transaction(db) { diff --git a/ztor/src/main/kotlin/com/zenmo/ztor/plugins/Databases.kt b/ztor/src/main/kotlin/com/zenmo/ztor/plugins/Databases.kt index f62b9ed..8ab3aa9 100644 --- a/ztor/src/main/kotlin/com/zenmo/ztor/plugins/Databases.kt +++ b/ztor/src/main/kotlin/com/zenmo/ztor/plugins/Databases.kt @@ -65,7 +65,7 @@ fun Application.configureDatabases(): Database { get("/users/{userId}/projects") { asAdmin { val userId = UUID.fromString(call.parameters["userId"]) - val user = projectRepository.getProjectsByUserId(userId) + val user = userRepository.getUserAndProjects(userId) call.respond(HttpStatusCode.OK, user) } }