diff --git a/db/db.sql b/db/db.sql deleted file mode 100644 index 8a08847..0000000 --- a/db/db.sql +++ /dev/null @@ -1,136 +0,0 @@ -DROP TABLE IF EXISTS bem_candidato CASCADE; -DROP TABLE IF EXISTS candidato_mapping CASCADE; -DROP TABLE IF EXISTS rede_social CASCADE; -DROP TABLE IF EXISTS candidato CASCADE; -DROP TABLE IF EXISTS partido CASCADE; -DROP TABLE IF EXISTS despesas_candidato CASCADE; -DROP TABLE IF EXISTS receitas_candidato CASCADE; - -CREATE TABLE candidato ( - idcandidato UUID NOT NULL PRIMARY KEY, - cpf VARCHAR(11), - nome VARCHAR(255) NOT NULL, - apelido VARCHAR(255), - datanascimento TIMESTAMPTZ, - email TEXT, - sexo CHAR(15), - estadocivil VARCHAR(50), - escolaridade VARCHAR(50), - ocupacao VARCHAR(150) -); -CREATE INDEX idx_candidato_nome ON candidato (nome); -CREATE INDEX idx_candidato_apelido ON candidato (apelido); - --- Each candidato (idcandidato, cpf, nome) will be mapped to a (sqcandidato, ano, tipo_eleicao, sg_uf, cargo, resultado) -CREATE TABLE candidato_mapping ( - idcandidato UUID NOT NULL, - cpf VARCHAR(11), - nome VARCHAR(255) NOT NULL, - apelido VARCHAR(255), - sqcandidato VARCHAR(50) NOT NULL, - turno VARCHAR(2) NOT NULL, - ano INT NOT NULL, - tipoeleicao VARCHAR(50), - siglauf VARCHAR(2), - nomeue VARCHAR(100), - cargo VARCHAR(50), - sgpartido VARCHAR(50), - nrcandidato VARCHAR(20), - resultado VARCHAR(50), - CONSTRAINT pk_candidato_mapping PRIMARY KEY (idcandidato, ano, siglauf, nomeue, cargo, nrcandidato, resultado), - CONSTRAINT fk_candidato_mapping_candidato FOREIGN KEY (idcandidato) REFERENCES candidato(idcandidato) ON DELETE CASCADE ON UPDATE CASCADE -); -CREATE INDEX idx_candidato_mapping_cpf ON candidato_mapping (cpf); -CREATE INDEX idx_candidato_mapping_nome ON candidato_mapping (nome); -CREATE INDEX idx_candidato_mapping_apelido ON candidato_mapping (apelido); -CREATE INDEX idx_candidato_mapping_ano ON candidato_mapping (ano); -CREATE INDEX idx_candidato_mapping_sqcandidato ON candidato_mapping (sqcandidato); - ----- Table for storing assets of candidates -CREATE TABLE bem_candidato ( - idcandidato UUID NOT NULL, - ano INT NOT NULL, - ordembem INT, - tipobem VARCHAR(150), - descricao VARCHAR(500), - valor NUMERIC(20, 2), - CONSTRAINT fk_bem_candidato_candidato FOREIGN KEY (idcandidato) REFERENCES candidato(idcandidato) ON DELETE CASCADE ON UPDATE CASCADE -); -ALTER TABLE bem_candidato ADD CONSTRAINT pk_bem_candidato PRIMARY KEY (idcandidato, ano, ordembem); -CREATE INDEX idx_bem_candidato_idcandidato ON bem_candidato (idcandidato); -CREATE INDEX idx_bem_candidato_valor ON bem_candidato (valor); - ----- Table for storing social media links of candidates -CREATE TABLE rede_social ( - idcandidato UUID NOT NULL, - rede VARCHAR(50) NOT NULL, - siglauf VARCHAR(2), - ano INT NOT NULL, - link TEXT NOT NULL, - CONSTRAINT pk_rede_social PRIMARY KEY (idcandidato, rede, siglauf, ano), - CONSTRAINT fk_rede_social_candidato FOREIGN KEY (idcandidato) REFERENCES candidato(idcandidato) ON DELETE CASCADE ON UPDATE CASCADE -); -CREATE INDEX idx_rede_social_idcandidato ON rede_social (idcandidato); - ----- Table for storing party information -CREATE TABLE partido ( - sigla VARCHAR(50) NOT NULL PRIMARY KEY, - nome VARCHAR(255) NOT NULL, - numero INT NOT NULL -); -CREATE INDEX idx_partido_nome ON partido (nome); -CREATE INDEX idx_partido_numero ON partido (numero); - ----- Tables for storing despesas e receitas of candidacies -CREATE TABLE despesas_candidato ( - idreceita UUID NOT NULL DEFAULT gen_random_uuid(), - idcandidato UUID NOT NULL, - ano INT NOT NULL, - turno VARCHAR(2) NOT NULL, - sqcandidato VARCHAR(50) NOT NULL, - sgpartido VARCHAR(50) NOT NULL, - tipofornecedor VARCHAR(150), - cnpjfornecedor VARCHAR(14), - cpffornecedor VARCHAR(11), - nomefornecedor VARCHAR(255), - nomefornecedorrfb VARCHAR(255), - municipiofornecedor VARCHAR(100), - tipodocumento VARCHAR(50), - datadespesa TIMESTAMPTZ, - descricao TEXT, - origemdespesa TEXT, - valor NUMERIC(20, 2), - CONSTRAINT pk_despesas_candidato PRIMARY KEY (idreceita), - CONSTRAINT fk_despesas_candidato_candidato FOREIGN KEY (idcandidato) REFERENCES candidato(idcandidato) ON DELETE CASCADE ON UPDATE CASCADE -); -CREATE INDEX idx_despesas_candidato_idcandidato ON despesas_candidato (idcandidato); -CREATE INDEX idx_despesas_candidato_ano ON despesas_candidato (ano); -CREATE INDEX idx_despesas_candidato_sqcandidato ON despesas_candidato (sqcandidato); -CREATE INDEX idx_despesas_candidato_sgpartido ON despesas_candidato (sgpartido); - -CREATE TABLE receitas_candidato ( - idreceita UUID NOT NULL DEFAULT gen_random_uuid(), - idcandidato UUID NOT NULL, - ano INT NOT NULL, - turno VARCHAR(2) NOT NULL, - sqcandidato VARCHAR(50) NOT NULL, - sgpartido VARCHAR(50) NOT NULL, - fontereceita VARCHAR(150), - origemreceita VARCHAR(250), - naturezareceita VARCHAR(250), - especiereceita VARCHAR(250), - cnpjdoador VARCHAR(14), - cpfdoador VARCHAR(11), - nomedoador VARCHAR(255), - nomedoadorrfb VARCHAR(255), - municipiodoador VARCHAR(100), - datareceita TIMESTAMPTZ, - descricao TEXT, - valor NUMERIC(20, 2), - CONSTRAINT pk_receitas_candidato PRIMARY KEY (idreceita), - CONSTRAINT fk_receitas_candidato_candidato FOREIGN KEY (idcandidato) REFERENCES candidato(idcandidato) ON DELETE CASCADE ON UPDATE CASCADE -); -CREATE INDEX idx_receitas_candidato_idcandidato ON receitas_candidato (idcandidato); -CREATE INDEX idx_receitas_candidato_ano ON receitas_candidato (ano); -CREATE INDEX idx_receitas_candidato_sqcandidato ON receitas_candidato (sqcandidato); -CREATE INDEX idx_receitas_candidato_sgpartido ON receitas_candidato (sgpartido); \ No newline at end of file diff --git a/deploy-db.ps1 b/deploy-db.ps1 deleted file mode 100644 index ab92393..0000000 --- a/deploy-db.ps1 +++ /dev/null @@ -1,91 +0,0 @@ -# OpenCand Database Deployment Script (PowerShell) -# This script deploys the database schema changes to the PostgreSQL container - -param( - [string]$ContainerName = "opencand_db", - [string]$DatabaseName = "opencand", - [string]$DatabaseUser = "root", - [string]$SqlFile = ".\db\db.sql" -) - -# Configuration -$ErrorActionPreference = "Stop" - -Write-Host "🚀 OpenCand Database Deployment Script" -ForegroundColor Yellow -Write-Host "==================================" -ForegroundColor Yellow - -try { - # Check if Docker is running - Write-Host "📋 Pre-deployment checks:" -ForegroundColor Yellow - docker info | Out-Null - Write-Host "✅ Docker is running" -ForegroundColor Green - - # Check if the database container is running - $runningContainers = docker ps --format "{{.Names}}" - if ($runningContainers -notcontains $ContainerName) { - throw "Database container '$ContainerName' is not running. Please start with: docker-compose up -d" - } - Write-Host "✅ Database container is running" -ForegroundColor Green - - # Check if SQL file exists - if (-not (Test-Path $SqlFile)) { - throw "SQL file '$SqlFile' not found" - } - Write-Host "✅ SQL file exists" -ForegroundColor Green - Write-Host "" - - # Wait for database to be ready - Write-Host "⏳ Waiting for database to be ready..." -ForegroundColor Yellow - $timeout = 30 - $counter = 0 - do { - $ready = $false - try { - docker exec $ContainerName pg_isready -U $DatabaseUser -d $DatabaseName | Out-Null - $ready = $true - } - catch { - Start-Sleep -Seconds 1 - $counter++ - if ($counter -ge $timeout) { - throw "Database failed to become ready within $timeout seconds" - } - } - } while (-not $ready) - - Write-Host "✅ Database is ready" -ForegroundColor Green - Write-Host "" - - # Create backup before deployment - Write-Host "💾 Creating database backup..." -ForegroundColor Yellow - $backupFile = "backup_$(Get-Date -Format 'yyyyMMdd_HHmmss').sql" - docker exec $ContainerName pg_dump -U $DatabaseUser -d $DatabaseName | Out-File -FilePath $backupFile -Encoding UTF8 - Write-Host "✅ Backup created: $backupFile" -ForegroundColor Green - Write-Host "" - - # Deploy the SQL file - Write-Host "🔧 Deploying database changes..." -ForegroundColor Yellow - Write-Host "Executing: $SqlFile" - - # Execute the SQL file - Get-Content $SqlFile | docker exec -i $ContainerName psql -U $DatabaseUser -d $DatabaseName - - Write-Host "✅ Database deployment completed successfully!" -ForegroundColor Green - Write-Host "" - - # Show table information - Write-Host "📊 Current database tables:" -ForegroundColor Yellow - docker exec $ContainerName psql -U $DatabaseUser -d $DatabaseName -c "\dt" - - Write-Host "" - Write-Host "🎉 Deployment completed successfully!" -ForegroundColor Green - Write-Host "==================================" -ForegroundColor Green - -} catch { - Write-Host "❌ Error: $($_.Exception.Message)" -ForegroundColor Red - if (Test-Path $backupFile) { - Write-Host "💡 You can restore from backup using:" -ForegroundColor Yellow - Write-Host "Get-Content $backupFile | docker exec -i $ContainerName psql -U $DatabaseUser -d $DatabaseName" -ForegroundColor Yellow - } - exit 1 -}