feat(ADM-018): completed feature
This commit is contained in:
39
project/migrations/015_shipping.js
Normal file
39
project/migrations/015_shipping.js
Normal file
@@ -0,0 +1,39 @@
|
||||
/** Shipping zones and methods. */
|
||||
|
||||
/** @param {import('node-pg-migrate').MigrationBuilder} pgm */
|
||||
export const up = (pgm) => {
|
||||
pgm.sql(`
|
||||
CREATE TABLE shipping_zones (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
name text NOT NULL,
|
||||
country text NOT NULL,
|
||||
postal_code_prefix text,
|
||||
active boolean NOT NULL DEFAULT true,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now()
|
||||
)
|
||||
`);
|
||||
pgm.sql('CREATE INDEX shipping_zones_country_idx ON shipping_zones (country, active)');
|
||||
|
||||
pgm.sql(`
|
||||
CREATE TABLE shipping_methods (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
zone_id uuid NOT NULL REFERENCES shipping_zones(id) ON DELETE CASCADE,
|
||||
name text NOT NULL,
|
||||
base_cost_cents integer NOT NULL,
|
||||
free_shipping_threshold_cents integer,
|
||||
active boolean NOT NULL DEFAULT true,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now(),
|
||||
CONSTRAINT shipping_methods_base_cost_non_negative CHECK (base_cost_cents >= 0),
|
||||
CONSTRAINT shipping_methods_threshold_non_negative CHECK (free_shipping_threshold_cents IS NULL OR free_shipping_threshold_cents >= 0)
|
||||
)
|
||||
`);
|
||||
pgm.sql('CREATE INDEX shipping_methods_zone_id_idx ON shipping_methods (zone_id)');
|
||||
};
|
||||
|
||||
/** @param {import('node-pg-migrate').MigrationBuilder} pgm */
|
||||
export const down = (pgm) => {
|
||||
pgm.sql('DROP TABLE IF EXISTS shipping_methods');
|
||||
pgm.sql('DROP TABLE IF EXISTS shipping_zones');
|
||||
};
|
||||
Reference in New Issue
Block a user