feat: add TypeScript definitions for next-auth session with accessToken and user details
Test Suite / test (24.15.0) (push) Has been cancelled

This commit is contained in:
Nils-Johan Gynther
2026-05-04 20:09:21 +02:00
parent afd2607000
commit ffe50e5151
135 changed files with 5 additions and 38 deletions
@@ -0,0 +1,87 @@
import { NextRequest, NextResponse } from 'next/server';
import { auth } from '../../../../auth';
const API_BASE =
process.env.NEXT_PUBLIC_API_URL_INTERNAL ?? 'http://recipe-api:8080';
async function getAdminSession() {
const session = await auth();
if (!session || (session.user as any)?.role !== 'admin') return null;
return session;
}
export async function PATCH(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> },
) {
const { id } = await params;
const session = await getAdminSession();
if (!session) return NextResponse.json({ message: 'Förbjuden' }, { status: 403 });
const body = await request.json();
// Om body innehåller isPremium → anropa /premium-endpoint
if ('isPremium' in body) {
const res = await fetch(`${API_BASE}/api/users/${id}/premium`, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${session.accessToken}`,
},
body: JSON.stringify({ isPremium: body.isPremium }),
});
const data = await res.json();
return NextResponse.json(data, { status: res.status });
}
// Annars → roll-byte
const res = await fetch(`${API_BASE}/api/users/${id}/role`, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${session.accessToken}`,
},
body: JSON.stringify(body),
});
const data = await res.json();
return NextResponse.json(data, { status: res.status });
}
export async function DELETE(
_request: NextRequest,
{ params }: { params: Promise<{ id: string }> },
) {
const { id } = await params;
const session = await getAdminSession();
if (!session) return NextResponse.json({ message: 'Förbjuden' }, { status: 403 });
const res = await fetch(`${API_BASE}/api/users/${id}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${session.accessToken}` },
});
const data = await res.json().catch(() => ({ deleted: true }));
return NextResponse.json(data, { status: res.status });
}
export async function PUT(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> },
) {
// PUT används för e-postbyte (PATCH /api/users/:id/email)
const { id } = await params;
const session = await getAdminSession();
if (!session) return NextResponse.json({ message: 'Förbjuden' }, { status: 403 });
const body = await request.json();
const res = await fetch(`${API_BASE}/api/users/${id}/email`, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${session.accessToken}`,
},
body: JSON.stringify(body),
});
const data = await res.json();
return NextResponse.json(data, { status: res.status });
}