From ebb331f61732cacfd2f7a0a36a8e7834e553ede3 Mon Sep 17 00:00:00 2001 From: amal Date: Tue, 15 Jul 2025 15:41:26 +0800 Subject: [PATCH] upd: api mobile Deskripsi: - update api mobile jam komentar pada diskusi umum dan diskusi divisi No Issues --- .../mobile/discussion-general/[id]/route.ts | 4 +- src/app/api/mobile/discussion/[id]/route.ts | 16 ++--- src/module/_global/fun/count_time.ts | 29 +++++++++ src/module/_global/index.ts | 61 ++++--------------- 4 files changed, 51 insertions(+), 59 deletions(-) create mode 100644 src/module/_global/fun/count_time.ts diff --git a/src/app/api/mobile/discussion-general/[id]/route.ts b/src/app/api/mobile/discussion-general/[id]/route.ts index c7fca14..6b3a5dd 100644 --- a/src/app/api/mobile/discussion-general/[id]/route.ts +++ b/src/app/api/mobile/discussion-general/[id]/route.ts @@ -1,4 +1,4 @@ -import { prisma } from "@/module/_global"; +import { countTime, prisma } from "@/module/_global"; import { funGetUserById } from "@/module/auth"; import { createLogUserMobile } from "@/module/user"; import _ from "lodash"; @@ -80,7 +80,7 @@ export async function GET(request: Request, context: { params: { id: string } }) dataFix = data.map((v: any) => ({ ..._.omit(v, ["createdAt", "User",]), - createdAt: moment(v.createdAt).format("lll").replace('pukul', ''), + createdAt: countTime(v.createdAt), username: v.User.name, img: v.User.img })) diff --git a/src/app/api/mobile/discussion/[id]/route.ts b/src/app/api/mobile/discussion/[id]/route.ts index 9e1c967..5b423cc 100644 --- a/src/app/api/mobile/discussion/[id]/route.ts +++ b/src/app/api/mobile/discussion/[id]/route.ts @@ -1,4 +1,4 @@ -import { prisma } from "@/module/_global"; +import { countTime, prisma } from "@/module/_global"; import { funGetUserById } from "@/module/auth"; import { createLogUserMobile } from "@/module/user"; import _ from "lodash"; @@ -8,13 +8,13 @@ import { NextResponse } from "next/server"; // GET ONE DISCUSSION BY ID export async function GET(request: Request, context: { params: { id: string } }) { - try { - const { id } = context.params - const { searchParams } = new URL(request.url); - const user = searchParams.get("user"); - const cat = searchParams.get("cat"); - const userMobile = await funGetUserById({ id: String(user) }) + const { id } = context.params + const { searchParams } = new URL(request.url); + const user = searchParams.get("user"); + const cat = searchParams.get("cat"); + const userMobile = await funGetUserById({ id: String(user) }) + try { if (userMobile.id == "null" || userMobile.id == undefined || userMobile.id == "") { return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); } @@ -57,7 +57,7 @@ export async function GET(request: Request, context: { params: { id: string } }) ..._.omit(v, ["User", "createdAt"]), username: v.User.name, img: v.User.img, - createdAt: moment(v.createdAt).format("ll") + createdAt: countTime(v.createdAt), })) return NextResponse.json({ success: true, message: "Berhasil mendapatkan komentar", data: omitMember }, { status: 200 }); diff --git a/src/module/_global/fun/count_time.ts b/src/module/_global/fun/count_time.ts new file mode 100644 index 0000000..ab990d6 --- /dev/null +++ b/src/module/_global/fun/count_time.ts @@ -0,0 +1,29 @@ +import moment from "moment"; +import "moment/locale/id"; + +export function countTime(date: Date) { + const dateNow = new Date() + + const diffTime = Math.abs(dateNow.getTime() - date.getTime()); + let totalSeconds = Math.floor(diffTime / 1000); + const days = Math.floor(totalSeconds / (24 * 60 * 60)); + totalSeconds -= days * (24 * 60 * 60); + + const hours = Math.floor(totalSeconds / (60 * 60)); + totalSeconds -= hours * (60 * 60); + + const minutes = Math.floor(totalSeconds / 60); + totalSeconds -= minutes * 60; + + const seconds = totalSeconds; + + if (days > 0) { + return moment(date).format("ll") + } else if (hours > 0) { + return `${hours} jam` + } else if (minutes > 0) { + return `${minutes} mnt` + } else { + return `${seconds} detik` + } +} \ No newline at end of file diff --git a/src/module/_global/index.ts b/src/module/_global/index.ts index f393160..b757ae3 100644 --- a/src/module/_global/index.ts +++ b/src/module/_global/index.ts @@ -1,73 +1,36 @@ import prisma from "./bin/prisma"; import { currentScroll, DIR, globalNotifPage, globalRole, keyWibu, pwd_key_config, TEMA } from "./bin/val_global"; +import NotificationCustome from "./components/notification_custome"; +import ReloadButtonTop from "./components/reload_button_top"; +import { ScrollProvider } from "./components/scroll_provider"; import SkeletonAvatar from "./components/skeleton_avatar"; import SkeletonDetailDiscussionComment from "./components/skeleton_detail_discussion_comment"; import SkeletonDetailDiscussionMember from "./components/skeleton_detail_discussion_member"; import SkeletonDetailListTugasTask from "./components/skeleton_detail_list_tugas_task"; import SkeletonDetailProfile from "./components/skeleton_detail_profile"; +import SkeletonList from "./components/skeleton_list"; import SkeletonSingle from "./components/skeleton_single"; +import SkeletonUser from "./components/skeleton_user"; import WrapLayout from "./components/wrap_layout"; import { funCopyFile } from "./fun/copy_file"; +import { countTime } from "./fun/count_time"; +import deleteDeviceError from "./fun/delete_device_error"; import { funDeleteFile } from "./fun/delete_file"; +import { funReadPdf } from "./fun/read_pdf"; +import { funSendWebPush } from "./fun/send_web_push"; import { funUploadFile } from "./fun/upload_file"; +import { funViewDir } from "./fun/view_dir"; import { WARNA } from "./fun/WARNA"; import LayoutDrawer from "./layout/layout_drawer"; import LayoutIconBack from "./layout/layout_icon_back"; import LoadingPage from "./layout/layout_loading_page"; import LayoutLogin from "./layout/layout_login"; +import LayoutModalNew from "./layout/layout_modal_new"; import LayoutModalViewFile from "./layout/layout_modal_view_file"; import LayoutNavbarHome from "./layout/layout_navbar_home"; import LayoutNavbarNew from "./layout/layout_navbar_new"; import NoZoom from "./layout/no_zoom"; -import ReloadButtonTop from "./components/reload_button_top"; import ViewFilter from "./view/view_filter"; -import NotificationCustome from "./components/notification_custome"; -import { ScrollProvider } from "./components/scroll_provider"; -import SkeletonUser from "./components/skeleton_user"; -import SkeletonList from "./components/skeleton_list"; -import { funViewDir } from "./fun/view_dir"; -import { funSendWebPush } from "./fun/send_web_push"; import ViewFilterData from "./view/view_filter_kategori_data"; -import LayoutModalNew from "./layout/layout_modal_new"; -import { funReadPdf } from "./fun/read_pdf"; -import deleteDeviceError from "./fun/delete_device_error"; -export { WARNA }; -export { LayoutLogin }; -export { LayoutNavbarHome }; -export { LayoutIconBack }; -export { LoadingPage }; -export { LayoutDrawer }; -export { LayoutNavbarNew }; -export { ViewFilter }; -export { prisma }; -export { pwd_key_config }; -export { SkeletonSingle } -export { SkeletonDetailDiscussionComment } -export { SkeletonDetailDiscussionMember } -export { SkeletonDetailProfile } -export { SkeletonDetailListTugasTask } -export { LayoutModalViewFile } -export { globalRole } -export { WrapLayout } -export { NoZoom } -export { funUploadFile } -export { funDeleteFile } -export { DIR } -export { TEMA } -export { funCopyFile } -export { globalNotifPage } -export { SkeletonAvatar } -export { ReloadButtonTop } -export { NotificationCustome } -export { ScrollProvider } -export { currentScroll } -export { SkeletonUser } -export { SkeletonList } -export { keyWibu } -export { funViewDir } -export { funSendWebPush } -export { ViewFilterData } -export { LayoutModalNew } -export { funReadPdf } -export { deleteDeviceError } \ No newline at end of file +export { countTime, currentScroll, deleteDeviceError, DIR, funCopyFile, funDeleteFile, funReadPdf, funSendWebPush, funUploadFile, funViewDir, globalNotifPage, globalRole, keyWibu, LayoutDrawer, LayoutIconBack, LayoutLogin, LayoutModalNew, LayoutModalViewFile, LayoutNavbarHome, LayoutNavbarNew, LoadingPage, NotificationCustome, NoZoom, prisma, pwd_key_config, ReloadButtonTop, ScrollProvider, SkeletonAvatar, SkeletonDetailDiscussionComment, SkeletonDetailDiscussionMember, SkeletonDetailListTugasTask, SkeletonDetailProfile, SkeletonList, SkeletonSingle, SkeletonUser, TEMA, ViewFilter, ViewFilterData, WARNA, WrapLayout };