SPB Git

Repository Public

route.ts 1.4 KB 33 lines typescript

1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2// KA ID v2 — « Pas pour moi » (serveur-à-serveur).3// Masquer une annonce l'exclut des résultats de la plateforme ET nourrit le4// signal négatif du moteur de préférences.5//   POST { client_id, ka_id, ts, sig, item_id, on: true|false, features? }6import { NextRequest, NextResponse } from "next/server";7import { findUserByKaId } from "@/lib/db";8import { verifyClientSig } from "@/lib/sso";9import { setHidden, ingestEvents } from "@/lib/kaid-data";1011export async function POST(req: NextRequest) {12  const body = (await req.json().catch(() => ({}))) as Record<string, unknown>;13  const clientId = String(body.client_id ?? "").slice(0, 30);14  const kaId = String(body.ka_id ?? "").slice(0, 20);15  if (!verifyClientSig(clientId, kaId, String(body.ts ?? ""), String(body.sig ?? "")))16    return NextResponse.json({ error: "signature invalide" }, { status: 401 });17  const user = findUserByKaId(kaId);18  if (!user)19    return NextResponse.json({ error: "membre introuvable" }, { status: 404 });2021  const itemId = String(body.item_id ?? "").trim();22  if (!itemId)23    return NextResponse.json({ error: "item_id requis" }, { status: 400 });24  const on = body.on !== false;25  setHidden(user.id, clientId, itemId, on);26  ingestEvents(user.id, clientId, [{27    type: on ? "hide" : "unhide",28    entity_id: itemId,29    features: body.features,30  }]);31  return NextResponse.json({ ok: true, hidden: on });32}33
Files main
Menu

Theme