upd: api mobile

Deskripsi:
- update api mobile register dan unregister token device

No Issues
This commit is contained in:
amel
2025-06-24 17:39:26 +08:00
parent cb020b7567
commit 466698f038
4 changed files with 81 additions and 23 deletions

BIN
bun.lockb

Binary file not shown.

View File

@@ -130,6 +130,17 @@ model User {
Discussion Discussion[] Discussion Discussion[]
DiscussionMember DiscussionMember[] DiscussionMember DiscussionMember[]
DiscussionComment DiscussionComment[] 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 { model UserLog {

View File

@@ -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 });
}
};

View File

@@ -1,6 +1,5 @@
import { NextResponse } from "next/server";
import admin from 'firebase-admin'; import admin from 'firebase-admin';
import { getApps, initializeApp, getApp } from 'firebase-admin/app'; import { NextResponse } from "next/server";
export async function GET(request: Request) { export async function GET(request: Request) {
try { try {
@@ -11,31 +10,18 @@ export async function GET(request: Request) {
}); });
} }
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 = { const message = {
notification: { notification: {
title: 'Dari API', title: 'Dari API',
body: 'Hello World', body: 'Hello World',
}, },
token: 'fPfBeTn4R4KsHhDw-8Edj0:APA91bGBjguuZsMhisJua_Wa3m7z7vBCE08vjyDBScmN0eIRgpfINlDx4SI6-upn-rr6tTAcoPxeQkxxbEsohcUbbV5DjUyIG4xR6wuvKOJMp3Mr4rNWFv8', token: 'fPfBeTn4R4KsHhDw-8Edj0:APA91bGBjguuZsMhisJua_Wa3m7z7vBCE08vjyDBScmN0eIRgpfINlDx4SI6-upn-rr6tTAcoPxeQkxxbEsohcUbbV5DjUyIG4xR6wuvKOJMp3Mr4rNWFv8',
}; };
const response = await admin.messaging().send(message); const response = await admin.messaging().send(message);
console.log(response)
return NextResponse.json({ success: true, message: "Sukses" }, { status: 200 }); return NextResponse.json({ success: true, message: `Sukses ${admin.apps.length}--${response}` }, { status: 200 });
} catch (error) { } catch (error) {
console.error(error); console.error(error);
return NextResponse.json({ success: false, message: "Gagal", reason: (error as Error).message, }, { status: 500 }); return NextResponse.json({ success: false, message: "Gagal", reason: (error as Error).message, }, { status: 500 });