From 04bf866f253507c67925a92b612ac52ff68dbf31 Mon Sep 17 00:00:00 2001
From: DewanaGustavus <76590469+DewanaGustavus@users.noreply.github.com>
Date: Thu, 16 Nov 2023 17:40:40 +0700
Subject: [PATCH] feat: fetch user detail

---
 src/handler/user/user.router.ts  |  9 +++++++++
 src/handler/user/user.service.ts | 21 +++++++++++++++++++++
 src/interfaces/UserDetail.ts     |  7 +++++++
 3 files changed, 37 insertions(+)
 create mode 100644 src/interfaces/UserDetail.ts

diff --git a/src/handler/user/user.router.ts b/src/handler/user/user.router.ts
index 4ec5612..2702ca9 100644
--- a/src/handler/user/user.router.ts
+++ b/src/handler/user/user.router.ts
@@ -68,3 +68,12 @@ UserRouter.post('/balance', async (request: Request, response: Response) => {
         return response.status(500).json(error.message);
     }
 })
+
+UserRouter.get('/user-detail/:username', async (request: Request, response: Response) => {
+    try {
+        const userData = await UserServices.getUserByUsername(request.params.username);
+        return response.status(200).json(userData);
+    } catch (error: any) {
+        return response.status(500).json(error.message);
+    }
+})
diff --git a/src/handler/user/user.service.ts b/src/handler/user/user.service.ts
index 1ed8480..c20a5e1 100644
--- a/src/handler/user/user.service.ts
+++ b/src/handler/user/user.service.ts
@@ -1,4 +1,5 @@
 import { User } from "../../interfaces/User";
+import { UserDetail } from "../../interfaces/UserDetail";
 import {db} from "../../utils/db.server"
 
 type queryResult = User | null;
@@ -98,3 +99,23 @@ export async function topup(username : string, topupBalance : number) {
     }
     return responseString;
 }
+
+export async function getUserByUsername(username : string) {
+    const userDetail : UserDetail | null = await db.user.findFirst({
+        where:{
+            username : username,
+        },
+        select: {
+            username : true,
+            name : true,
+            email : true,
+            saldo : true
+        }
+    })
+
+    if(userDetail === null) {
+        throw "error";
+    }
+
+    return userDetail;
+}
diff --git a/src/interfaces/UserDetail.ts b/src/interfaces/UserDetail.ts
new file mode 100644
index 0000000..8934888
--- /dev/null
+++ b/src/interfaces/UserDetail.ts
@@ -0,0 +1,7 @@
+
+export interface UserDetail {
+    username : string
+    name : string
+    email : string
+    saldo : number
+}
\ No newline at end of file
-- 
GitLab