initial commit: rocket.new export of broadcastbeat
This commit is contained in:
85
src/app/api/notifications/route.ts
Normal file
85
src/app/api/notifications/route.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
import { createClient } from "@/lib/supabase/server";
|
||||
|
||||
export async function GET(req: NextRequest) {
|
||||
const supabase = await createClient();
|
||||
const { data: { user }, error: authError } = await supabase.auth.getUser();
|
||||
if (authError || !user) {
|
||||
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
||||
}
|
||||
|
||||
const url = new URL(req.url);
|
||||
const limit = parseInt(url.searchParams.get("limit") || "30");
|
||||
|
||||
const { data, error } = await supabase
|
||||
.from("notifications")
|
||||
.select("*")
|
||||
.eq("user_id", user.id)
|
||||
.order("created_at", { ascending: false })
|
||||
.limit(limit);
|
||||
|
||||
if (error) {
|
||||
return NextResponse.json({ error: error.message }, { status: 500 });
|
||||
}
|
||||
|
||||
const unreadCount = data?.filter((n) => !n.is_read).length ?? 0;
|
||||
|
||||
return NextResponse.json({ notifications: data ?? [], unreadCount });
|
||||
}
|
||||
|
||||
export async function PATCH(req: NextRequest) {
|
||||
const supabase = await createClient();
|
||||
const { data: { user }, error: authError } = await supabase.auth.getUser();
|
||||
if (authError || !user) {
|
||||
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
||||
}
|
||||
|
||||
const body = await req.json();
|
||||
const { ids, markAll } = body;
|
||||
|
||||
if (markAll) {
|
||||
const { error } = await supabase
|
||||
.from("notifications")
|
||||
.update({ is_read: true })
|
||||
.eq("user_id", user.id)
|
||||
.eq("is_read", false);
|
||||
if (error) return NextResponse.json({ error: error.message }, { status: 500 });
|
||||
} else if (ids && Array.isArray(ids)) {
|
||||
const { error } = await supabase
|
||||
.from("notifications")
|
||||
.update({ is_read: true })
|
||||
.eq("user_id", user.id)
|
||||
.in("id", ids);
|
||||
if (error) return NextResponse.json({ error: error.message }, { status: 500 });
|
||||
}
|
||||
|
||||
return NextResponse.json({ success: true });
|
||||
}
|
||||
|
||||
export async function DELETE(req: NextRequest) {
|
||||
const supabase = await createClient();
|
||||
const { data: { user }, error: authError } = await supabase.auth.getUser();
|
||||
if (authError || !user) {
|
||||
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
||||
}
|
||||
|
||||
const body = await req.json();
|
||||
const { ids, dismissAll } = body;
|
||||
|
||||
if (dismissAll) {
|
||||
const { error } = await supabase
|
||||
.from("notifications")
|
||||
.delete()
|
||||
.eq("user_id", user.id);
|
||||
if (error) return NextResponse.json({ error: error.message }, { status: 500 });
|
||||
} else if (ids && Array.isArray(ids)) {
|
||||
const { error } = await supabase
|
||||
.from("notifications")
|
||||
.delete()
|
||||
.eq("user_id", user.id)
|
||||
.in("id", ids);
|
||||
if (error) return NextResponse.json({ error: error.message }, { status: 500 });
|
||||
}
|
||||
|
||||
return NextResponse.json({ success: true });
|
||||
}
|
||||
Reference in New Issue
Block a user