src/app/api/admin/medias/route.ts

route·app·1.6 KB · 46 lignes· Voir l'itinéraire
Annotation non disponible

Lance npm run annotate (nécessite ANTHROPIC_API_KEY dans .env.local) pour générer une annotation française par Claude Haiku 4.5.

2 exports

GETDELETE

Code source· typescript

import { NextRequest, NextResponse } from "next/server";
import { prisma } from "@/lib/prisma/client";
import { getSession } from "@/lib/auth/session";
import { deleteVideo } from "@/lib/cloudflare-stream";

export async function GET(req: NextRequest) {
  const session = await getSession();
  if (!session || session.role !== "TENANT_ADMIN" || !session.tenantId) {
    return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
  }
  const { searchParams } = new URL(req.url);
  const albumId = searchParams.get("albumId");
  const type = searchParams.get("type");

  const medias = await prisma.media.findMany({
    where: {
      tenantId: session.tenantId,
      ...(albumId === "sans" ? { albumId: null } : albumId ? { albumId } : {}),
      ...(type ? { type: type as "IMAGE" | "VIDEO" } : {}),
    },
    orderBy: { createdAt: "desc" },
    take: 100,
  });
  return NextResponse.json({ medias });
}

export async function DELETE(req: NextRequest) {
  const session = await getSession();
  if (!session || session.role !== "TENANT_ADMIN" || !session.tenantId) {
    return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
  }
  const { id } = await req.json();
  const media = await prisma.media.findFirst({
    where: { id, tenantId: session.tenantId },
    select: { id: true, cloudflareStreamId: true },
  });
  if (!media) {
    return NextResponse.json({ success: true });
  }
  await prisma.media.delete({ where: { id: media.id } });
  if (media.cloudflareStreamId) {
    void deleteVideo(media.cloudflareStreamId);
  }
  return NextResponse.json({ success: true });
}