-- +goose Up CREATE TABLE budgets ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, name text NOT NULL, last_modification timestamp with time zone ); CREATE TABLE users ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, email text NOT NULL, name text NOT NULL, password text NOT NULL ); CREATE TABLE user_budgets ( user_id uuid NOT NULL, budget_id uuid NOT NULL ); ALTER TABLE "user_budgets" ADD FOREIGN KEY ("user_id") REFERENCES "users" ("id"); ALTER TABLE "user_budgets" ADD FOREIGN KEY ("budget_id") REFERENCES "budgets" ("id"); CREATE TABLE accounts ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, budget_id uuid NOT NULL, name varchar(50) NOT NULL ); ALTER TABLE "accounts" ADD FOREIGN KEY ("budget_id") REFERENCES "budgets" ("id"); CREATE TABLE payees ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, budget_id uuid NOT NULL, name varchar(50) NOT NULL ); ALTER TABLE "payees" ADD FOREIGN KEY ("budget_id") REFERENCES "budgets" ("id"); CREATE TABLE category_groups ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, budget_id uuid NOT NULL, name varchar(50) NOT NULL ); ALTER TABLE "category_groups" ADD FOREIGN KEY ("budget_id") REFERENCES "budgets" ("id"); CREATE TABLE categories ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, category_group_id uuid NOT NULL, name varchar(50) NOT NULL ); ALTER TABLE "categories" ADD FOREIGN KEY ("category_group_id") REFERENCES "category_groups" ("id"); CREATE TABLE transactions ( id uuid DEFAULT uuid_generate_v4() PRIMARY KEY, date date NOT NULL, memo text NOT NULL, amount decimal(12,2) NOT NULL, account_id uuid NOT NULL, category_id uuid, payee_id uuid ); ALTER TABLE "transactions" ADD FOREIGN KEY ("account_id") REFERENCES "accounts" ("id"); ALTER TABLE "transactions" ADD FOREIGN KEY ("payee_id") REFERENCES "payees" ("id"); ALTER TABLE "transactions" ADD FOREIGN KEY ("category_id") REFERENCES "categories" ("id"); -- +goose Down DROP TABLE transactions; DROP TABLE accounts; DROP TABLE payees; DROP TABLE categories; DROP TABLE category_groups; DROP TABLE user_budgets; DROP TABLE budgets; DROP TABLE users;