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}