Compare commits
No commits in common. "214528ed763da54e2fc262acb0e296d70061da7f" and "506debfcabf44233093063869eadf760bd7ff8a3" have entirely different histories.
214528ed76
...
506debfcab
136
db/db.sql
Normal file
136
db/db.sql
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
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);
|
91
deploy-db.ps1
Normal file
91
deploy-db.ps1
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# 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
|
||||||
|
}
|
35
deploy-db.sh
35
deploy-db.sh
@ -9,8 +9,7 @@ set -e # Exit on any error
|
|||||||
DB_CONTAINER="opencand_db"
|
DB_CONTAINER="opencand_db"
|
||||||
DB_NAME="opencand"
|
DB_NAME="opencand"
|
||||||
DB_USER="root"
|
DB_USER="root"
|
||||||
SQL_URL="https://git.ivanch.me/ivanch/opencand/raw/branch/main/db/db.sql"
|
SQL_FILE="./db/db.sql"
|
||||||
SQL_FILE="./db.sql"
|
|
||||||
|
|
||||||
# Colors for output
|
# Colors for output
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
@ -34,37 +33,16 @@ if ! docker ps --format "table {{.Names}}" | grep -q "^${DB_CONTAINER}$"; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Download the SQL file
|
# Check if SQL file exists
|
||||||
echo -e "${YELLOW}📥 Downloading SQL file...${NC}"
|
|
||||||
if command -v curl &> /dev/null; then
|
|
||||||
if curl -L -o "$SQL_FILE" "$SQL_URL"; then
|
|
||||||
echo "✅ SQL file downloaded successfully"
|
|
||||||
else
|
|
||||||
echo -e "${RED}❌ Error: Failed to download SQL file from ${SQL_URL}${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif command -v wget &> /dev/null; then
|
|
||||||
if wget -O "$SQL_FILE" "$SQL_URL"; then
|
|
||||||
echo "✅ SQL file downloaded successfully"
|
|
||||||
else
|
|
||||||
echo -e "${RED}❌ Error: Failed to download SQL file from ${SQL_URL}${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -e "${RED}❌ Error: Neither curl nor wget is available for downloading${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if SQL file exists (after download)
|
|
||||||
if [ ! -f "$SQL_FILE" ]; then
|
if [ ! -f "$SQL_FILE" ]; then
|
||||||
echo -e "${RED}❌ Error: SQL file '${SQL_FILE}' not found after download${NC}"
|
echo -e "${RED}❌ Error: SQL file '${SQL_FILE}' not found${NC}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${YELLOW}📋 Pre-deployment checks:${NC}"
|
echo -e "${YELLOW}📋 Pre-deployment checks:${NC}"
|
||||||
echo "✅ Docker is running"
|
echo "✅ Docker is running"
|
||||||
echo "✅ Database container is running"
|
echo "✅ Database container is running"
|
||||||
echo "✅ SQL file downloaded"
|
echo "✅ SQL file exists"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Wait for database to be ready
|
# Wait for database to be ready
|
||||||
@ -108,11 +86,6 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clean up downloaded SQL file
|
|
||||||
echo -e "${YELLOW}🧹 Cleaning up...${NC}"
|
|
||||||
rm -f "$SQL_FILE"
|
|
||||||
echo "✅ Temporary SQL file removed"
|
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${GREEN}🎉 Deployment completed successfully!${NC}"
|
echo -e "${GREEN}🎉 Deployment completed successfully!${NC}"
|
||||||
echo "=================================="
|
echo "=================================="
|
||||||
|
Loading…
x
Reference in New Issue
Block a user