feat(loyalty): EnakPoint & EnakCoin #32
@@ -0,0 +1,2 @@
|
|||||||
|
DROP TABLE IF EXISTS loyalty_setting_changes;
|
||||||
|
DROP TABLE IF EXISTS organization_settings;
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
-- Settings that must be the same in every outlet of an organization, starting with the
|
||||||
|
-- loyalty ones (docs/prd-point-coin.md F2, F12): point value, exchange rate, transfer
|
||||||
|
-- limits and expiry. Same key-value shape as outlet_settings.
|
||||||
|
CREATE TABLE organization_settings (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
organization_id UUID NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
|
||||||
|
key VARCHAR(255) NOT NULL,
|
||||||
|
value TEXT,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
UNIQUE(organization_id, key)
|
||||||
|
);
|
||||||
|
|
||||||
|
-- The unique constraint leads with organization_id, so it also serves the plain
|
||||||
|
-- per-organization lookups and there is no separate index on that column.
|
||||||
|
|
||||||
|
-- Who changed which loyalty setting, from what, to what (F2). Covers both the
|
||||||
|
-- organization settings above and the per-outlet loyalty keys in outlet_settings.
|
||||||
|
-- Append-only. Values are stored as text, the same as in the settings tables.
|
||||||
|
CREATE TABLE loyalty_setting_changes (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
organization_id UUID NOT NULL,
|
||||||
|
-- NULL for an organization setting.
|
||||||
|
outlet_id UUID,
|
||||||
|
key VARCHAR(100) NOT NULL,
|
||||||
|
-- NULL when the key had no stored value yet (it was on its default).
|
||||||
|
old_value TEXT,
|
||||||
|
new_value TEXT,
|
||||||
|
changed_by UUID NOT NULL,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_loyalty_setting_changes_organization_id_created_at ON loyalty_setting_changes(organization_id, created_at DESC);
|
||||||
|
CREATE INDEX idx_loyalty_setting_changes_outlet_id_created_at ON loyalty_setting_changes(outlet_id, created_at DESC)
|
||||||
|
WHERE outlet_id IS NOT NULL;
|
||||||
Reference in New Issue
Block a user