- Create 002_templates.sql: item_tier enum, ALTER budget_items, templates and template_items tables with CHECK constraint - Add ItemTier type with fixed/variable/one_off constants to models.go - Add ItemTier field to BudgetItem struct - Add Template, TemplateItem, TemplateDetail structs
28 lines
1.1 KiB
SQL
28 lines
1.1 KiB
SQL
CREATE TYPE item_tier AS ENUM ('fixed', 'variable', 'one_off');
|
|
|
|
ALTER TABLE budget_items ADD COLUMN item_tier item_tier NOT NULL DEFAULT 'fixed';
|
|
|
|
CREATE TABLE IF NOT EXISTS templates (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL DEFAULT 'My Template',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE UNIQUE INDEX idx_templates_user_id ON templates (user_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS template_items (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
template_id UUID NOT NULL REFERENCES templates(id) ON DELETE CASCADE,
|
|
category_id UUID NOT NULL REFERENCES categories(id) ON DELETE RESTRICT,
|
|
item_tier item_tier NOT NULL,
|
|
budgeted_amount NUMERIC(12, 2),
|
|
sort_order INT NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
CONSTRAINT chk_template_items_no_one_off CHECK (item_tier IN ('fixed', 'variable'))
|
|
);
|
|
|
|
CREATE INDEX idx_template_items_template_id ON template_items (template_id);
|