import { NextResponse } from "next/server"; import { auth } from "@/lib/auth"; import { fetchUserStats, refreshAccessToken } from "@/lib/tiktok"; import { prisma } from "@/lib/prisma"; export async function GET() { const session = await auth(); if (!session?.user) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const userId = (session.user as { id?: string }).id; if (!userId) { return NextResponse.json({ error: "Session error" }, { status: 401 }); } const tokenRecord = await prisma.tikTokToken.findUnique({ where: { userId } }); if (!tokenRecord) { return NextResponse.json({ error: "Not connected" }, { status: 404 }); } let { accessToken, refreshToken, openId, expiresAt } = tokenRecord; // Refresh si expiré (avec 60s de marge) if (expiresAt.getTime() - Date.now() < 60_000) { try { const refreshed = await refreshAccessToken(refreshToken); const newExpiresAt = new Date(Date.now() + refreshed.expires_in * 1000); await prisma.tikTokToken.update({ where: { userId }, data: { accessToken: refreshed.access_token, refreshToken: refreshed.refresh_token, expiresAt: newExpiresAt, }, }); accessToken = refreshed.access_token; refreshToken = refreshed.refresh_token; expiresAt = newExpiresAt; } catch (err) { console.error("[TikTok stats refresh error]", err); return NextResponse.json({ error: "Token refresh failed" }, { status: 401 }); } } try { const stats = await fetchUserStats(accessToken, openId); return NextResponse.json(stats); } catch (err) { console.error("[TikTok stats fetch error]", err); return NextResponse.json({ error: "Failed to fetch stats" }, { status: 500 }); } }