From 1ddea95a75930d4f5d860bdfe04264a4f48ce85c Mon Sep 17 00:00:00 2001 From: DewanaGustavus <76590469+DewanaGustavus@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:18:26 +0700 Subject: [PATCH] feat: user login API --- src/handler/history/history.service.ts | 4 +- src/handler/user/user.router.ts | 51 ++++++++++++++++++++++ src/handler/user/user.service.ts | 59 ++++++++++++++++++++++++++ src/index.ts | 3 ++ src/interfaces/User.ts | 9 ++++ 5 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 src/interfaces/User.ts diff --git a/src/handler/history/history.service.ts b/src/handler/history/history.service.ts index 4dacade..357001a 100644 --- a/src/handler/history/history.service.ts +++ b/src/handler/history/history.service.ts @@ -2,7 +2,7 @@ import { History } from "../../interfaces/History"; import { HistoryDetail } from "../../interfaces/HistoryDetail"; import {db} from "../../utils/db.server" -export const getHistory = async (): Promise<History[]> => { +export async function getHistory () : Promise<History[]> { const user_id = 2; //ini buat temp aja karena auth belom dibuat return db.history.findMany({ where:{ @@ -18,7 +18,7 @@ export const getHistory = async (): Promise<History[]> => { }) } -export const getHistoryDetail = async (historyId: number): Promise<HistoryDetail[]> => { +export async function getHistoryDetail (historyId: number) : Promise<HistoryDetail[]> { return db.historyDetail.findMany({ where:{ history_id: historyId diff --git a/src/handler/user/user.router.ts b/src/handler/user/user.router.ts index e69de29..f452f3f 100644 --- a/src/handler/user/user.router.ts +++ b/src/handler/user/user.router.ts @@ -0,0 +1,51 @@ +import { User } from "../../interfaces/User"; +import express from "express"; +import type { Request, Response } from "express"; + +import * as UserServices from './user.service' + +export const UserRouter = express.Router() + +UserRouter.post('/checkUsername', async (request: Request, response: Response) => { + try { + const responseString= await UserServices.checkUsername(request.body.username); + return response.status(200).json(responseString); + } catch (error: any) { + return response.status(500).json(error.message); + } +}) + +UserRouter.post('/checkEmail', async (request: Request, response: Response) => { + try { + const responseString= await UserServices.checkEmail(request.body.email); + return response.status(200).json(responseString); + } catch (error: any) { + return response.status(500).json(error.message); + } +}) + +UserRouter.post('/register', async (request: Request, response: Response) => { + try { + const user : User = { + id : 0, + username : request.body.username, + name : request.body.name, + email : request.body.email, + password : request.body.password, + saldo : 0, + }; + const responseString= await UserServices.register(user); + return response.status(200).json(responseString); + } catch (error: any) { + return response.status(500).json(error.message); + } +}) + +UserRouter.post('/validateLogin', async (request: Request, response: Response) => { + try { + const responseString= await UserServices.validateLogin(request.body.username, request.body.password); + return response.status(200).json(responseString); + } 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 e69de29..0907573 100644 --- a/src/handler/user/user.service.ts +++ b/src/handler/user/user.service.ts @@ -0,0 +1,59 @@ +import { User } from "../../interfaces/User"; +import {db} from "../../utils/db.server" + +type queryResult = User | null; + +export async function checkUsername(username : string) { + const result : queryResult = await db.user.findFirst({ + where: { + username : username + } + }); + const responseString = !result ? "available" : "exist"; + return responseString; +} + +export async function checkEmail(email : string) { + const result : queryResult = await db.user.findFirst({ + where: { + email : email + } + }); + const responseString = !result ? "available" : "exist"; + return responseString; +} + +export async function register(user : User) { + let responseString = "success"; + try { + const result : User = await db.user.create({ + data : { + username : user.username, + name : user.name, + email : user.email, + password : user.password, + } + }) + }catch (err) { + const usernameAvailable = await checkUsername(user.username); + const emailAvailable = await checkEmail(user.email); + if(usernameAvailable === "exist") { + responseString = "username already exist"; + }else if(emailAvailable === "exist") { + responseString = "email already exist"; + }else { + responseString = "failed"; + } + } + return responseString; +} + +export async function validateLogin(username : string, password : string) { + const result : queryResult = await db.user.findFirst({ + where: { + username : username + } + }); + const responseString = (password === result?.password) ? "success" : "failed"; + return responseString; +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 8340e8f..b8d1840 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,14 @@ import express, {Express, Request, Response} from "express"; import { HistoryRouter } from "./handler/history/history.router"; +import { UserRouter } from "./handler/user/user.router"; const app = express(); const port = 5000; +app.use(express.json()); app.use('/history', HistoryRouter); +app.use('/user', UserRouter); app.get("/", (req, res) => { res.send("test get home"); }) diff --git a/src/interfaces/User.ts b/src/interfaces/User.ts new file mode 100644 index 0000000..d95d488 --- /dev/null +++ b/src/interfaces/User.ts @@ -0,0 +1,9 @@ + +export interface User { + id : number, + username : string, + name : string, + email : string, + password : string, + saldo : number, +} \ No newline at end of file -- GitLab