Files
carvalho-finances/apps/api/migrations/001_initial.sql
T
Mlcavalho1andClaude Sonnet 4.6 a3d8f363a5 feat: setup monorepo infra — Go API + Vue 3 + PostgreSQL + Dockerfile Dokploy
Monorepo com apps/api (Go 1.23 + chi + pgx) e apps/web (Vue 3 + Vite + TypeScript).
Dockerfile multi-stage consolida tudo em imagem única (~25MB) para deploy no Dokploy.
Migrations rodando na inicialização; Vue embedado no binário Go via //go:embed.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-05-26 20:06:37 -03:00

60 lines
2.4 KiB
SQL

CREATE TABLE IF NOT EXISTS schema_migrations (
version BIGINT PRIMARY KEY,
applied_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS categories (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
color VARCHAR(7) NOT NULL DEFAULT '#6B7280',
is_default BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS transactions (
id SERIAL PRIMARY KEY,
date DATE NOT NULL,
amount NUMERIC(12, 2) NOT NULL,
description TEXT NOT NULL,
type VARCHAR(10) NOT NULL CHECK (type IN ('income', 'expense')),
source VARCHAR(10) NOT NULL DEFAULT 'manual' CHECK (source IN ('manual', 'import')),
category_id INTEGER REFERENCES categories (id) ON DELETE SET NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS recurring_expenses (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
expected_amount NUMERIC(12, 2) NOT NULL,
day_of_month INTEGER NOT NULL CHECK (day_of_month BETWEEN 1 AND 31),
category_id INTEGER REFERENCES categories (id) ON DELETE SET NULL,
active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS import_logs (
id SERIAL PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
format VARCHAR(10) NOT NULL CHECK (format IN ('ofx', 'csv')),
imported_count INTEGER NOT NULL DEFAULT 0,
duplicate_count INTEGER NOT NULL DEFAULT 0,
error_count INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
INSERT INTO categories (name, color, is_default)
VALUES
('Saúde / Insulina', '#EF4444', TRUE),
('Veleiro', '#3B82F6', TRUE),
('Jogos de Tabuleiro', '#8B5CF6', TRUE),
('Alimentação', '#F59E0B', TRUE),
('Lazer', '#10B981', TRUE),
('Freelance', '#6366F1', TRUE),
('Outros', '#6B7280', TRUE)
ON CONFLICT DO NOTHING;
INSERT INTO schema_migrations (version) VALUES (1) ON CONFLICT DO NOTHING;