Files
mercadodevida/project/migrations/011_inventory.js
2026-08-17 22:23:10 +02:00

45 lines
1.7 KiB
JavaScript

/**
* Inventory stock counters and movement audit.
*/
/** @param {import('node-pg-migrate').MigrationBuilder} pgm */
export const up = (pgm) => {
pgm.sql(`
CREATE TABLE inventory_stock (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
variant_id uuid NOT NULL UNIQUE,
available integer NOT NULL DEFAULT 0,
reserved integer NOT NULL DEFAULT 0,
sold integer NOT NULL DEFAULT 0,
incoming integer NOT NULL DEFAULT 0,
created_at timestamptz NOT NULL DEFAULT now(),
updated_at timestamptz NOT NULL DEFAULT now(),
CONSTRAINT inventory_stock_available_non_negative CHECK (available >= 0),
CONSTRAINT inventory_stock_reserved_non_negative CHECK (reserved >= 0),
CONSTRAINT inventory_stock_sold_non_negative CHECK (sold >= 0),
CONSTRAINT inventory_stock_incoming_non_negative CHECK (incoming >= 0)
)
`);
pgm.sql('CREATE INDEX inventory_stock_variant_id_idx ON inventory_stock (variant_id)');
pgm.sql(`
CREATE TABLE inventory_movements (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
variant_id uuid NOT NULL,
operation text NOT NULL,
quantity integer NOT NULL,
created_at timestamptz NOT NULL DEFAULT now(),
CONSTRAINT inventory_movements_quantity_non_negative CHECK (quantity >= 0),
CONSTRAINT inventory_movements_operation_check
CHECK (operation IN ('reserve', 'release', 'confirm', 'set_available'))
)
`);
pgm.sql('CREATE INDEX inventory_movements_variant_id_idx ON inventory_movements (variant_id)');
};
/** @param {import('node-pg-migrate').MigrationBuilder} pgm */
export const down = (pgm) => {
pgm.sql('DROP TABLE IF EXISTS inventory_movements');
pgm.sql('DROP TABLE IF EXISTS inventory_stock');
};