documents/generate: suporte a edicao in-place + linkage documento_id
document_generated.documento_id (FK pra documents) estava sempre NULL no INSERT — sem isso nao da pra rastrear qual generated belongs to qual documents row, impossibilitando re-edicao. DocumentGenerate.service saveGeneratedDocument: - Modo create (default): INSERT em documents PRIMEIRO pra capturar doc.id, depois INSERT em document_generated com documento_id setado. - Modo edit (editingDocId param novo): UPDATE in-place — substitui PDF no Storage (novo path), atualiza bucket_path/tamanho/nome em documents (preserva id+audit), atualiza dados_preenchidos+pdf_path em document_generated. Se nao houver registro generated (doc legado), INSERT vinculando ao documents.id. Cleanup best-effort do PDF antigo. - Nova fn loadGeneratedFromDocId(documentoId): busca template_id + dados_preenchidos pra pre-popular o dialog de edicao. useDocumentGenerate.generateAndSave: ganha 2o param editingDocId que passa pro service. Backfill SQL pra docs antigos: match dg.pdf_path = d.bucket_path + tenant/patient guard. 3 docs linkados no DB local, 5 ficaram orfaos (paths que nao existem mais em documents — cleanup antigo). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
-- Backfill: linkar document_generated.documento_id em registros antigos
|
||||
-- pra suportar re-edicao in-place de documentos gerados.
|
||||
--
|
||||
-- O codigo novo (DocumentGenerate.service.js saveGeneratedDocument) ja
|
||||
-- preenche o documento_id no INSERT pra criacoes novas. Este script eh
|
||||
-- one-off pra docs gerados ANTES desse fix.
|
||||
--
|
||||
-- Match: dg.pdf_path = d.bucket_path + match de tenant/patient pra evitar
|
||||
-- linkar a doc errado em caso colidente. Registros sem match (paths que
|
||||
-- nao existem mais em documents — docs deletados/cleanup) ficam orfaos
|
||||
-- com documento_id=NULL: nao quebra nada, so nao tem caminho de re-edit.
|
||||
|
||||
BEGIN;
|
||||
|
||||
UPDATE public.document_generated dg
|
||||
SET documento_id = d.id
|
||||
FROM public.documents d
|
||||
WHERE dg.documento_id IS NULL
|
||||
AND dg.pdf_path = d.bucket_path
|
||||
AND dg.patient_id = d.patient_id
|
||||
AND dg.tenant_id = d.tenant_id
|
||||
AND d.deleted_at IS NULL;
|
||||
|
||||
-- Relatorio pos-backfill
|
||||
DO $REPORT$
|
||||
DECLARE
|
||||
v_linked int;
|
||||
v_orphans int;
|
||||
BEGIN
|
||||
SELECT count(*) FILTER (WHERE documento_id IS NOT NULL),
|
||||
count(*) FILTER (WHERE documento_id IS NULL)
|
||||
INTO v_linked, v_orphans
|
||||
FROM public.document_generated;
|
||||
RAISE NOTICE 'document_generated: % linked, % orphans (sem documents correspondente)',
|
||||
v_linked, v_orphans;
|
||||
END;
|
||||
$REPORT$;
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user