diff --git a/api.http b/api.http index 14bfa3d..41e64e4 100644 --- a/api.http +++ b/api.http @@ -118,7 +118,7 @@ Content-Type: application/json // USERS ### -GET http://localhost:3000/api/user/get?path=get-all-users&roleID=dev&villageID=121212&groupID=2&positionID=clz24bff70001w01in64dd9ea HTTP/1.1 +GET http://localhost:3000/api/user/get?path=get-all-users&active=true HTTP/1.1 ### GET http://localhost:3000/api/user/get?path=get-one-users&userID=devAmalia HTTP/1.1 diff --git a/src/module/_global/bin/api_address.ts b/src/module/_global/bin/api_address.ts index 4dacc12..d37c800 100644 --- a/src/module/_global/bin/api_address.ts +++ b/src/module/_global/bin/api_address.ts @@ -12,6 +12,7 @@ export const API_ADDRESS = { "apiCreateUser": "/api/user/post?path=create-users", "apiUpdateUser": "/api/user/post?path=update-users", "apiDeleteUser": "/api/user/post?path=delete-users", + "apiGetRoleUser": "/api/user/get?path=get-role-user", // Announcement "apiGetAllAnnouncement": "/api/announcement/get?path=get-all-announcement", diff --git a/src/module/group/api/post/createGroup.ts b/src/module/group/api/post/createGroup.ts index 6b49d17..3d8d133 100644 --- a/src/module/group/api/post/createGroup.ts +++ b/src/module/group/api/post/createGroup.ts @@ -4,7 +4,7 @@ import { revalidatePath } from "next/cache"; export async function createGroup(req: Request) { try { const data = await req.json(); - const villaId = "121212"; + const villaId = "desa1"; if (!data || !data.name) { return Response.json( diff --git a/src/module/position/api/get/getAllPosition.ts b/src/module/position/api/get/getAllPosition.ts index b29f1c8..51c9288 100644 --- a/src/module/position/api/get/getAllPosition.ts +++ b/src/module/position/api/get/getAllPosition.ts @@ -1,12 +1,22 @@ import { prisma } from "@/module/_global"; +import { funGetUserByCookies } from "@/module/auth"; import _, { omit } from "lodash"; import { NextRequest } from "next/server"; export async function getAllPosition(req: NextRequest) { try { + + let grupFix const searchParams = req.nextUrl.searchParams - const groupID = "3"; + const groupID = searchParams.get('groupId'); const active = searchParams.get('active'); + const user = await funGetUserByCookies() + console.log(groupID) + + // if(user.) + + + const positions = await prisma.position.findMany({ where: { idGroup: String(groupID), diff --git a/src/module/user/api/api_index.ts b/src/module/user/api/api_index.ts index d5b5ff1..5db8e68 100644 --- a/src/module/user/api/api_index.ts +++ b/src/module/user/api/api_index.ts @@ -4,6 +4,7 @@ import { getOneUser } from "./get/getOneUser"; import { updateUser } from "./post/updateUser"; import { deleteUser } from "./post/deleteUser"; import { createUser } from "./post/createUser"; +import { getRoleUser } from "./get/getRoleUser"; export const API_INDEX_USER = [ { @@ -31,4 +32,9 @@ export const API_INDEX_USER = [ method: "POST", bin: deleteUser, }, + { + path: "get-role-user", + method: "GET", + bin: getRoleUser, + }, ]; \ No newline at end of file diff --git a/src/module/user/api/get/getAllUser.ts b/src/module/user/api/get/getAllUser.ts index 9d64199..98e04ee 100644 --- a/src/module/user/api/get/getAllUser.ts +++ b/src/module/user/api/get/getAllUser.ts @@ -1,4 +1,5 @@ import { prisma } from "@/module/_global"; +import _ from "lodash"; import { NextRequest } from "next/server"; export async function getAllUser(req: NextRequest) { @@ -7,14 +8,10 @@ export async function getAllUser(req: NextRequest) { const idGroup = searchParams.get("idGroup");; const idVillage = "121212"; const active = searchParams.get("active"); - const idPosition = searchParams.get("idPosition"); - const idUserRole = searchParams.get("idUserRole"); const users = await prisma.user.findMany({ where: { isActive: active == "true" ? true : false, - idUserRole: String(idUserRole), - idPosition: String(idPosition), idVillage: String(idVillage), idGroup: String(idGroup), }, @@ -26,6 +23,11 @@ export async function getAllUser(req: NextRequest) { phone: true, email: true, gender: true, + Position: { + select: { + name: true, + }, + }, Group: { select: { name: true, @@ -34,7 +36,14 @@ export async function getAllUser(req: NextRequest) { }, }); - return Response.json(users); + const allData = users.map((v: any) => ({ + ..._.omit(v, ["Group", "Position"]), + group: v.Group.name, + position: v.Position.name, + })); + + return Response.json(allData); + } catch (error) { console.error(error); return Response.json( diff --git a/src/module/user/api/get/getRoleUser.ts b/src/module/user/api/get/getRoleUser.ts new file mode 100644 index 0000000..c9d1428 --- /dev/null +++ b/src/module/user/api/get/getRoleUser.ts @@ -0,0 +1,21 @@ +import { prisma } from "@/module/_global"; +import { NextRequest } from "next/server"; + +export async function getRoleUser(req: NextRequest) { + try { + const res = await prisma.userRole.findMany({ + select: { + id: true, + name: true, + }, + }); + + return Response.json(res); + } catch (error) { + console.error(error); + return Response.json( + { success: false, message: "Internal Server Error" }, + { status: 500 } + ); + } +} diff --git a/src/module/user/api/post/createUser.ts b/src/module/user/api/post/createUser.ts index a6c6e57..c6f5736 100644 --- a/src/module/user/api/post/createUser.ts +++ b/src/module/user/api/post/createUser.ts @@ -5,33 +5,48 @@ import { NextRequest } from "next/server"; export async function createUser(req: NextRequest) { try { const data = await req.json(); + const village = "desa1" - const users = await prisma.user.create({ - data: { + const cek = await prisma.user.count({ + where: { nik: data.nik, - name: data.name, - phone: data.phone, email: data.email, - gender: data.gender, - idGroup: data.idGroup, - idVillage: data.idVillage, - idPosition: data.idPosition, - idUserRole: data.idUserRole, - }, - select: { - id: true, - nik: true, - name: true, - phone: true, - email: true, - gender: true, + phone: data.phone }, }); - // create log user - const log = await createLogUser({ act: 'CREATE', desc: 'User membuat data user baru', table: 'user', data: users.id }) + if (cek == 0) { + const users = await prisma.user.create({ + data: { + nik: data.nik, + name: data.name, + phone: data.phone, + email: data.email, + gender: data.gender, + idGroup: data.idGroup, + idVillage: village, + idPosition: data.idPosition, + idUserRole: data.idUserRole, + }, + select: { + id: true, + nik: true, + name: true, + phone: true, + email: true, + gender: true, + }, + }); + + // create log user + const log = await createLogUser({ act: 'CREATE', desc: 'User membuat data user baru', table: 'user', data: users.id }) + + return Response.json({ success: true, message: 'Sukses membuat user' }, { status: 200 }); + } else { + return Response.json({ success: false, message: "User sudah ada" }, { status: 400 }); + } + - return Response.json({ success: true, message: 'Sukses membuat user' }, { status: 200 }); } catch (error) { console.error(error); diff --git a/src/module/user/member/component/create_member.tsx b/src/module/user/member/component/create_member.tsx index 5acea0d..f6b1703 100644 --- a/src/module/user/member/component/create_member.tsx +++ b/src/module/user/member/component/create_member.tsx @@ -1,13 +1,123 @@ 'use client' -import { WARNA } from "@/module/_global"; +import { API_ADDRESS, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { Box, Button, Select, Stack, TextInput } from "@mantine/core"; -import { useState } from "react"; +import { useRouter } from "next/navigation"; +import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { HiUser } from "react-icons/hi2"; +type dataGroup = { + id: string; + name: string; +}; +type dataPosition = { + id: string; + name: string; +}; + +type dataROleUser = { + id: string; + name: string; +} + export default function CreateMember() { + const router = useRouter() const [isModal, setModal] = useState(false) + const [listGroup, setListGorup] = useState([]) + const [listPosition, setListPosition] = useState([]) + const [listUserRole, setListUserRole] = useState([]) + + const [listData, setListData] = useState({ + nik: "", + name: "", + phone: "", + email: "", + gender: "", + idGroup: "", + idPosition: "", + idUserRole: "", + }) + + + async function getAllGroup() { + try { + const res = await fetch(`${API_ADDRESS.apiGetAllGroup}&villageId=desa1&active=true`) + const data = await res.json() + setListGorup(data) + } catch (error) { + console.error(error) + } + } + + async function getAllPosition(val: any) { + try { + const res = await fetch(`${API_ADDRESS.apiGetAllPosition}&groupId=${val}&active=true`) + const data = await res.json() + setListPosition(data) + } catch (error) { + console.error(error) + } + } + + async function getAllUserRole() { + try { + const res = await fetch(`${API_ADDRESS.apiGetRoleUser}`) + const data = await res.json() + setListUserRole(data) + } catch (error) { + console.error(error) + } + } + + + async function changeGrup(val: any) { + + console.log(val) + setListPosition([]) + setListData({ + ...listData, + idGroup: val, + idPosition: "" + }) + + getAllPosition(val) + + } + + + async function onSubmit(val: boolean) { + try { + const res = await fetch(API_ADDRESS.apiCreateUser, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + nik: listData.nik, + name: listData.name, + phone: listData.phone, + email: listData.email, + gender: listData.gender, + idGroup: listData.idGroup, + idPosition: listData.idPosition, + idUserRole: listData.idUserRole + }) + }) + toast.success("Sukses! Data tersimpan"); + setModal(false) + router.push('/member') + } catch (error) { + toast.error('Error') + toast.error("Sukses! Data tersimpan"); + } + } + + + useEffect(() => { + getAllGroup() + getAllUserRole() + }, []) function onTrue(val: boolean) { if (val) { @@ -40,7 +150,17 @@ export default function CreateMember() { borderColor: WARNA.biruTua, }, }} - data={['Dinas', 'Adat', 'LPD', 'PKK']} + data={ + listGroup + ? listGroup.map((data) => ({ + value: data.id, + label: data.name, + })) + : [] + } + onChange={(val: any) => { + changeGrup(val) + }} /> ({ + value: data.id, + label: data.name, + })) + : [] + } + onChange={(val: any) => setListData({ + ...listData, + idUserRole: val + })} /> setListData({ + ...listData, + nik: event.target.value + })} /> setListData({ + ...listData, + name: event.target.value + })} /> setListData({ + ...listData, + email: event.target.value + })} /> setListData({ + ...listData, + phone: event.target.value + })} />