Add push notif support
This commit is contained in:
parent
c8cb5d16d1
commit
03fc9c9c1e
@ -12,7 +12,7 @@
|
|||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
"lint": "next lint",
|
"lint": "next lint",
|
||||||
"start": "next start",
|
"start": "next start",
|
||||||
"go": "git pull && next build && next start"
|
"go": "next build && next start"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@t3-oss/env-nextjs": "^0.10.1",
|
"@t3-oss/env-nextjs": "^0.10.1",
|
||||||
|
@ -20,4 +20,4 @@ export const POST = async (request: NextRequest) => {
|
|||||||
return NextResponse.json({ message: "Error" }, { status: 500 });
|
return NextResponse.json({ message: "Error" }, { status: 500 });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// localhost:3000/api/setCountdown?apiKey=I_Love_Madeline&countdown=2023-01-01T00:00:00.000Z
|
// localhost:3000/api/setCountdown?apiKey=I_Love_Madeline&countdown=2024-09-20T12:00:00.000Z
|
||||||
|
27
src/app/api/updatePushToken/route.ts
Normal file
27
src/app/api/updatePushToken/route.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import { NextResponse } from 'next/server';
|
||||||
|
import { updateUserPushToken } from '~/server/functions';
|
||||||
|
|
||||||
|
type Data = {
|
||||||
|
apiKey: string;
|
||||||
|
userId: string;
|
||||||
|
pushToken: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const POST = async (request: Request) => {
|
||||||
|
try {
|
||||||
|
const { apiKey, userId, pushToken } = await request.json() as Data;
|
||||||
|
|
||||||
|
// Validate API key (optional, but since you do it, let's continue)
|
||||||
|
if (apiKey !== process.env.API_KEY) {
|
||||||
|
return NextResponse.json({ message: "Invalid API Key" }, { status: 401 });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update push token in the database
|
||||||
|
await updateUserPushToken(parseInt(userId), pushToken);
|
||||||
|
|
||||||
|
return NextResponse.json({ message: "Push token updated successfully" });
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return NextResponse.json({ message: "Error updating push token" }, { status: 500 });
|
||||||
|
}
|
||||||
|
};
|
@ -14,6 +14,7 @@ export const users = createTable(
|
|||||||
id: serial("id").primaryKey(),
|
id: serial("id").primaryKey(),
|
||||||
name: varchar("name", { length: 256 }),
|
name: varchar("name", { length: 256 }),
|
||||||
message: varchar("message", { length: 256 }),
|
message: varchar("message", { length: 256 }),
|
||||||
|
pushToken: varchar("push_token", { length: 256 }),
|
||||||
createdAt: timestamp("created_at", { withTimezone: true })
|
createdAt: timestamp("created_at", { withTimezone: true })
|
||||||
.default(sql`CURRENT_TIMESTAMP`)
|
.default(sql`CURRENT_TIMESTAMP`)
|
||||||
.notNull(),
|
.notNull(),
|
||||||
|
@ -17,6 +17,22 @@ export const getUsers = async () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getUser = async (userId: number) => {
|
||||||
|
try {
|
||||||
|
const result = await db.select({
|
||||||
|
id: schema.users.id,
|
||||||
|
name: schema.users.name,
|
||||||
|
message: schema.users.message,
|
||||||
|
pushToken: schema.users.pushToken,
|
||||||
|
}).from(schema.users)
|
||||||
|
.where(eq(schema.users.id, userId));
|
||||||
|
return result;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching user", error);
|
||||||
|
throw new Error("Failed to fetch user");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export const getMessage = async (userId: number) => {
|
export const getMessage = async (userId: number) => {
|
||||||
try {
|
try {
|
||||||
let message = 1;
|
let message = 1;
|
||||||
@ -38,6 +54,14 @@ export const setMessage = async (userId: number, message: string) => {
|
|||||||
await db.update(schema.users)
|
await db.update(schema.users)
|
||||||
.set({ message: message })
|
.set({ message: message })
|
||||||
.where(eq(schema.users.id, userId));
|
.where(eq(schema.users.id, userId));
|
||||||
|
const otherUserId = userId === 1 ? 2 : 1;
|
||||||
|
const otherUser = await getUser(otherUserId);
|
||||||
|
|
||||||
|
if (otherUser?.[0]?.pushToken) {
|
||||||
|
await sendPushNotification(otherUser[0].pushToken, message);
|
||||||
|
} else {
|
||||||
|
console.log(`Other user with id ${otherUserId} does not have a push token`);
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error setting message", error);
|
console.error("Error setting message", error);
|
||||||
throw new Error("Failed to set message");
|
throw new Error("Failed to set message");
|
||||||
@ -67,3 +91,40 @@ export const setCountdown = async (date: Date) => {
|
|||||||
throw new Error("Failed to set countdown");
|
throw new Error("Failed to set countdown");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const updateUserPushToken = async (userId: number, pushToken: string) => {
|
||||||
|
try {
|
||||||
|
await db.update(schema.users)
|
||||||
|
.set({ pushToken: pushToken })
|
||||||
|
.where(eq(schema.users.id, userId));
|
||||||
|
console.log(`Push token updated for userId ${userId}`);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error updating push token", error);
|
||||||
|
throw new Error("Failed to update push token");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const sendPushNotification = async (expoPushToken: string, message: string) => {
|
||||||
|
const notificationMessage = {
|
||||||
|
to: expoPushToken,
|
||||||
|
sound: 'default',
|
||||||
|
title: 'New message!',
|
||||||
|
body: message,
|
||||||
|
data: { message }, // Extra data you might want to send
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
await fetch('https://exp.host/--/api/v2/push/send', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/json',
|
||||||
|
'Accept-Encoding': 'gzip, deflate',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: JSON.stringify(notificationMessage),
|
||||||
|
});
|
||||||
|
console.log('Push notification sent successfully');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error sending push notification', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user