From 466698f0388e3877ceb4d5f8ec2122477c6d26e9 Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 24 Jun 2025 17:39:26 +0800 Subject: [PATCH] upd: api mobile Deskripsi: - update api mobile register dan unregister token device No Issues --- bun.lockb | Bin 366532 -> 366908 bytes prisma/schema.prisma | 13 +++++- src/app/api/mobile/auth-token/route.ts | 61 +++++++++++++++++++++++++ src/app/api/mobile/route.ts | 30 ++++-------- 4 files changed, 81 insertions(+), 23 deletions(-) create mode 100644 src/app/api/mobile/auth-token/route.ts diff --git a/bun.lockb b/bun.lockb index 7082e0514c5d72429f923cad48b23064adbf2bc1..da3ca6e14a601d39a97c23383377abbb903677b0 100755 GIT binary patch delta 295 zcmX@IUTn`Mu?c>hYi6)AfWV}Q;qpwU+Ba5AkYPs-rH?%FimEhd;zG_XA;u~SD+apAhC(-fGh)UMu85Xg+Oqlclz}>#(E}t2HSJ@GGE>>-Qg&+*z`XKnS;1E3Rr;Z85lYWw|nKW9Ao6#Q3w%OGNWCp MfMvT>0qZJt003`TN&o-= delta 226 zcmdn9N$kjau?c>hCev9NKw#p;aCxS)Z5t~l$ZQsn?U32Lz|!H#c_ULS*)i*zs_W##OJ2tJrS{nZ?1we1{z%s2Ts=RgDnc5DX;%5XXCfCxC`ZP(h# z?9Ix-1U89*VSDX9=F1znCgibz1q2GVAIfJr#>nMR01?oc-ae_2W&5N;)>Y~N68=S3 diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 06bb910..9421ad0 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -98,7 +98,7 @@ model User { idVillage String Group Group @relation(fields: [idGroup], references: [id]) idGroup String - Position Position? @relation(fields: [idPosition], references: [id]) + Position Position? @relation(fields: [idPosition], references: [id]) idPosition String? nik String @unique name String @@ -130,6 +130,17 @@ model User { Discussion Discussion[] DiscussionMember DiscussionMember[] DiscussionComment DiscussionComment[] + TokenDeviceUser TokenDeviceUser[] +} + +model TokenDeviceUser { + id String @id @default(cuid()) + User User @relation(fields: [idUser], references: [id]) + idUser String + token String @db.Text + isActive Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt } model UserLog { diff --git a/src/app/api/mobile/auth-token/route.ts b/src/app/api/mobile/auth-token/route.ts new file mode 100644 index 0000000..cbceb23 --- /dev/null +++ b/src/app/api/mobile/auth-token/route.ts @@ -0,0 +1,61 @@ +import { prisma } from "@/module/_global"; +import { funGetUserById } from "@/module/auth"; +import { NextResponse } from "next/server"; + +export async function POST(request: Request) { + try { + const { token, user } = (await request.json()); + + const userMobile = await funGetUserById({ id: user }) + if (userMobile.id == "null" || userMobile.id == undefined || userMobile.id == "") { + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); + } + + const cek = await prisma.tokenDeviceUser.count({ + where: { + idUser: userMobile.id, + token + } + }) + + if (cek == 0) { + const data = await prisma.tokenDeviceUser.create({ + data: { + token, + idUser: userMobile.id + } + }); + return NextResponse.json({ success: true, message: "Berhasil mendaftarkan token" }, { status: 200 }); + } + + return NextResponse.json({ success: true, message: "Token sudah terdaftar" }, { status: 200 }) + + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal menambahkan token, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + } +}; + + +export async function PUT(request: Request) { + try { + const { token, user } = (await request.json()); + + const userMobile = await funGetUserById({ id: user }) + if (userMobile.id == "null" || userMobile.id == undefined || userMobile.id == "") { + return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 200 }); + } + + const data = await prisma.tokenDeviceUser.deleteMany({ + where: { + token, + idUser: userMobile.id + } + }); + + return NextResponse.json({ success: true, message: "Berhasil menghapus token", }, { status: 200 }); + } catch (error) { + console.error(error); + return NextResponse.json({ success: false, message: "Gagal menghapus token, coba lagi nanti (error: 500)", reason: (error as Error).message, }, { status: 500 }); + } +}; diff --git a/src/app/api/mobile/route.ts b/src/app/api/mobile/route.ts index 9225958..d089e90 100644 --- a/src/app/api/mobile/route.ts +++ b/src/app/api/mobile/route.ts @@ -1,41 +1,27 @@ -import { NextResponse } from "next/server"; import admin from 'firebase-admin'; -import { getApps, initializeApp, getApp } from 'firebase-admin/app'; +import { NextResponse } from "next/server"; export async function GET(request: Request) { try { - if(!admin.apps.length){ + if (!admin.apps.length) { const serviceAccount = require("../../../../service_key.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), }); } - - const firebaseConfig = { - apiKey: "AIzaSyB2hbsW91J3oRQx4_jgrCCNY0tNt5-21e8", - authDomain: "googleapis.com", - projectId: "mobile-darmasaba", - storageBucket: "mobile-darmasaba.appspot.com", - messagingSenderId: "867439221179", - appId: "1:867439221179:android:4509f77478c8dce99b0c9e", - databaseURL: "https://mobile-darmasaba-default-rtdb.asia-southeast1.firebasedatabase.app/", - measurementId: "G-1015652111565" - } - - const app = getApps().length ? getApp() : initializeApp(firebaseConfig); const message = { notification: { - title: 'Dari API', - body: 'Hello World', + title: 'Dari API', + body: 'Hello World', }, token: 'fPfBeTn4R4KsHhDw-8Edj0:APA91bGBjguuZsMhisJua_Wa3m7z7vBCE08vjyDBScmN0eIRgpfINlDx4SI6-upn-rr6tTAcoPxeQkxxbEsohcUbbV5DjUyIG4xR6wuvKOJMp3Mr4rNWFv8', - }; - const response = await admin.messaging().send(message); - console.log(response) + }; - return NextResponse.json({ success: true, message: "Sukses" }, { status: 200 }); + const response = await admin.messaging().send(message); + + return NextResponse.json({ success: true, message: `Sukses ${admin.apps.length}--${response}` }, { status: 200 }); } catch (error) { console.error(error); return NextResponse.json({ success: false, message: "Gagal", reason: (error as Error).message, }, { status: 500 });