mirror of
https://origin.cursor.com/mrdevmx/panels.git
synced 2026-10-09 10:43:18 +00:00
<!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Causa El error `duplicate key value violates unique constraint "projects_code_key"` aparece porque: 1. La columna `projects.code` es **UNIQUE en toda la base** (todos los tenants). 2. Al dar de alta, `fn_project_create` llama a `fn_next_project_code`, que hacía `MAX(PRY…)+1` **solo sobre las filas que el tenant ve** (RLS). 3. Si en la base ya existe `PRY-0001` (seed de dev, otra empresa cliente, u otra obra que este tenant no ve), el sistema vuelve a proponer `PRY-0001` → el `INSERT` falla con CONFLICT. No es el nombre del proyecto ni el presupuesto adjunto: es el **código autogenerado**. ## Cambio (Liquibase 039) - `fn_next_project_code`: `SECURITY DEFINER` para leer la secuencia **global** de códigos PRY/OBR. - `fn_project_create`: `pg_advisory_xact_lock` al asignar código (evita duplicado si envían dos veces seguidas). ## Cómo probar 1. Aplicar migraciones (039). 2. Con un tenant que aún no tenga obras (o en un ambiente donde ya exista `PRY-0001` de otro tenant), dar de alta un proyecto nuevo. 3. Debe crearse con `PRY-0002` (o el siguiente libre), sin toast de CONFLICT. Script de demostración RLS: `scripts/verify-project-code-next.sql` + `verify-project-code-next-run.sql`. <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-d8a5d34a-ead9-4912-8296-322cff799783?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-d8a5d34a-ead9-4912-8296-322cff799783&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div>
53 lines
4.1 KiB
XML
53 lines
4.1 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<databaseChangeLog
|
|
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
|
|
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.20.xsd">
|
|
|
|
<!-- panels_product, esquema core: negocio (empresas, personal, obras,
|
|
expedientes, presupuesto, nómina, gafetes). -->
|
|
<include file="changesets/001-baseline.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/002-tenant-settings.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/003-seed-catalogs.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/004-seed-dev-data.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/005-rls.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/006-rpc-infra.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/007-rpc-catalogs.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/008-rpc-companies.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/009-rpc-projects.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/010-rpc-workers.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/011-rpc-budget.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/012-rpc-badges.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/013-rpc-payroll.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/014-rpc-import.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/015-rpc-documents.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/016-rpc-worker-needs-badge.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/017-rpc-worker-normalize-badge.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/018-schema-expenses-cost.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/019-schema-warehouse.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/020-rls-expenses-warehouse.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/021-cost-control-helpers.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/022-rpc-expenses.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/023-rpc-warehouse.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/024-rpc-cost-control.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/025-rpc-payroll-cost-sync.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/026-rpc-project-update-warehouse.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/027-iam-rpc-cross-grants.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/028-fix-cost-settings-ambiguous.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/029-schema-work-program.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/030-rpc-work-program.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/031-project-doc-types-technical.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/032-rpc-document-get-id.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/032-fix-work-program-jsonb-object-length.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/032-document-validity-from-upload.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/032-fn-badge-job-get.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/033-catalog-suppliers-units.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/034-fn-expense-update-reclassify.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/035-warehouse-materials-catalog.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/036-fn-work-program-get-curve.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/037-fn-work-program-get-curve-vrow.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/038-fn-work-program-vs-cost.sql" relativeToChangelogFile="true"/>
|
|
<include file="changesets/039-fn-next-project-code-global.sql" relativeToChangelogFile="true"/>
|
|
|
|
</databaseChangeLog>
|