INSERT INTO public.dms_pdf_generation_tasks
(tenant_id, file_version_id, source_checksum_sha256)
VALUES (#{tenantId}, #{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},
#{sourceChecksum})
ON CONFLICT (tenant_id, file_version_id) DO UPDATE
SET source_checksum_sha256=EXCLUDED.source_checksum_sha256, status='PENDING', attempts=0,
next_attempt_at=statement_timestamp(), lease_token=NULL, lease_until=NULL,
last_error=NULL, completed_at=NULL, updated_at=statement_timestamp()
WHERE dms_pdf_generation_tasks.source_checksum_sha256 <> EXCLUDED.source_checksum_sha256
INSERT INTO public.dms_pdf_generation_tasks
(tenant_id, file_version_id, source_checksum_sha256)
VALUES (#{tenantId}, #{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler},
#{sourceChecksum})
ON CONFLICT (tenant_id, file_version_id) DO UPDATE
SET source_checksum_sha256=EXCLUDED.source_checksum_sha256, status='PENDING', attempts=0,
next_attempt_at=statement_timestamp(), lease_token=NULL, lease_until=NULL,
last_error=NULL, started_at=NULL, completed_at=NULL, updated_at=statement_timestamp()
WHERE dms_pdf_generation_tasks.source_checksum_sha256 <> EXCLUDED.source_checksum_sha256
OR dms_pdf_generation_tasks.status IN ('SUCCEEDED','FAILED')
UPDATE public.dms_file_objects o
SET pdf_object_key=NULL, pdf_size_bytes=NULL, pdf_checksum_sha256=NULL,
pdf_source_checksum_sha256=NULL, pdf_generated_at=NULL
FROM public.dms_file_versions v
WHERE o.tenant_id=#{tenantId}
AND o.file_version_id=#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
AND o.pdf_object_key=#{objectKey}
AND lower(o.pdf_source_checksum_sha256)=#{sourceChecksum}
AND v.tenant_id=o.tenant_id AND v.id=o.file_version_id
AND lower(v.checksum_sha256)=#{sourceChecksum}
INSERT INTO public.dms_pdf_generation_tasks
(tenant_id, file_version_id, source_checksum_sha256)
SELECT v.tenant_id, v.id, lower(v.checksum_sha256)
FROM public.dms_file_versions v
JOIN public.dms_file_objects o ON o.tenant_id=v.tenant_id AND o.file_version_id=v.id
WHERE lower(v.file_name) ~ '\.(doc|docx)$'
AND (o.pdf_object_key IS NULL OR o.pdf_source_checksum_sha256 IS DISTINCT FROM lower(v.checksum_sha256))
ORDER BY o.created_at, o.id
LIMIT #{limit}
ON CONFLICT (tenant_id, file_version_id) DO UPDATE
SET source_checksum_sha256=EXCLUDED.source_checksum_sha256, status='PENDING', attempts=0,
next_attempt_at=statement_timestamp(), lease_token=NULL, lease_until=NULL,
last_error=NULL, completed_at=NULL, updated_at=statement_timestamp()
WHERE dms_pdf_generation_tasks.source_checksum_sha256 <> EXCLUDED.source_checksum_sha256
UPDATE public.dms_pdf_generation_tasks
SET status='RUNNING', lease_token=#{token},
lease_until=statement_timestamp() + (#{leaseSeconds} * INTERVAL '1 second'),
attempts=attempts+1, started_at=COALESCE(started_at, statement_timestamp()),
updated_at=statement_timestamp()
WHERE tenant_id=#{tenantId}
AND file_version_id=#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
AND status IN ('PENDING','RUNNING') AND attempts < #{maxAttempts}
AND next_attempt_at <= statement_timestamp()
AND (lease_until IS NULL OR lease_until <= statement_timestamp())
UPDATE public.dms_file_objects o
SET pdf_object_key=#{pdf.objectKey}, pdf_size_bytes=#{pdf.sizeBytes},
pdf_checksum_sha256=#{pdf.checksumSha256},
pdf_source_checksum_sha256=#{pdf.sourceChecksumSha256},
pdf_generated_at=statement_timestamp()
FROM public.dms_file_versions v
WHERE o.tenant_id=#{tenantId}
AND o.file_version_id=#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
AND v.tenant_id=o.tenant_id AND v.id=o.file_version_id
AND lower(v.checksum_sha256)=#{sourceChecksum}
AND #{pdf.sourceChecksumSha256}=#{sourceChecksum}
UPDATE public.dms_pdf_generation_tasks
SET status='SUCCEEDED', lease_token=NULL, lease_until=NULL, last_error=NULL,
completed_at=statement_timestamp(), updated_at=statement_timestamp()
WHERE tenant_id=#{tenantId}
AND file_version_id=#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
AND lease_token=#{token}
UPDATE public.dms_pdf_generation_tasks
SET status=CASE WHEN #{terminal} THEN 'FAILED' ELSE 'PENDING' END,
lease_token=NULL, lease_until=NULL, last_error=#{error},
next_attempt_at=statement_timestamp() + (#{delaySeconds} * INTERVAL '1 second'),
completed_at=CASE WHEN #{terminal} THEN statement_timestamp() ELSE NULL END,
updated_at=statement_timestamp()
WHERE tenant_id=#{tenantId}
AND file_version_id=#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
AND lease_token=#{token}