mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-15 02:23:07 +00:00
Envio em lote (1 request raw-body por arquivo, fan-out ≤2, até 50 arquivos) e adicionar por link (Instagram/YouTube; extração só pela Graph API da conta própria, senão peça-link) em /campanha/comunicacao/conteudos. Cada peça tem estado próprio (Processando/Pronto/Falhou + Reprocessar), transcrição/texto e catalogação automática revisável; publicar/despublicar preserva arquivo, slug e publishedAt. - collections contentPiece + contentMedia (upload privado no S3) e migration 20260923_032714_add_content_piece (slug único gerado no 1º publish, sourceUrl única, searchText com índice trigram) - pipeline reusa C199 (job after() + reaper + retry condicional, transcrição DeepInfra, ffmpeg/chunk), o classificador de facetas do acervo e o institutionCatalog; curatedFields impede o job de sobrescrever curadoria - gate único canReadCommunicationCatalog (advisor/leader negados); delete só pelo admin; sem Consent novo - UI portada do design aprovado (lista desktop + cards mobile, diálogo de lote com progresso por arquivo, diálogo de link, ficha editável, kill switch); nav/chrome/column-picker/manifest atualizados - instagramFeed expõe mediaUrl; revalidateTag ganha wrapper seguro fora de request (fixtures/scripts) - testes: 2 unit specs, 1 int spec (16 casos) e 7 e2e na vertical - follow-up de engenharia: #1267 (docs/plans/escala-dry-pos-c211.md) Closes #1254
21 lines
785 B
TypeScript
21 lines
785 B
TypeScript
import 'server-only'
|
|
|
|
import config from '@payload-config'
|
|
import { after } from 'next/server'
|
|
import { getPayload } from 'payload'
|
|
|
|
import { runContentPieceJob } from '@/utilities/content/contentPieceJob'
|
|
|
|
/**
|
|
* C211 — starts the transcription/cataloguing after the upload (or retry)
|
|
* response has been sent (`after` from `next/server`), so the request never
|
|
* waits on ffmpeg or minutes of ASR. Kept apart from the job so
|
|
* `contentPieceJob` stays importable in a plain Node test without the request
|
|
* lifecycle — the same split as the C199 recordings.
|
|
*/
|
|
export const startContentPieceJobInBackground = (contentPieceId: number): void => {
|
|
after(async () => {
|
|
const payload = await getPayload({ config })
|
|
await runContentPieceJob(payload, contentPieceId)
|
|
})
|
|
}
|