Documentacao do Projeto LEGACY

Historico completo da migracao .NET Framework 4.7.2 para .NET 8

Voltar
Informacoes do Projeto
Responsavel: Cassiano Gomes
Projeto: Legacy - Sistema de Gestao de Associacoes
Dominio: cplylegacy.com.br
Origem: .NET Framework 4.7.2 (Windows)
Destino: .NET 8 (Linux/Replit)
Data Inicio: 18/12/2024 - 14:00
Banco Origem: SQL Server / MongoDB (AWS)
Banco Destino: PostgreSQL (Replit)
Total Entidades: 598 classes migradas

Historico de Tarefas

Fase 1: Configuracao Inicial do Ambiente
2h 30min
18/12/2024 | Inicio: 14:00 | Termino: 16:30
Fase 2: Migracao da Camada de Dados (DAL)
12h 00min
18-19/12/2024 | Inicio: 16:30 | Termino: 04:30 (dia seguinte)
Fase 3: Migracao da Camada de Negocios (BLL)
4h 00min
19/12/2024 | Inicio: 08:00 | Termino: 12:00
Fase 4: Interface Web (AdminLTE)
6h 00min
19/12/2024 | Inicio: 13:00 | Termino: 19:00
Fase 5: Sistema de Autenticacao
3h 00min
19/12/2024 | Inicio: 19:30 | Termino: 22:30
Fase 6: Modulos CRUD
8h 00min
19-20/12/2024 | Inicio: 23:00 | Termino: 07:00
Fase 7: Pagina Landing e Documentacao
2h 00min
20/12/2024 | Inicio: 08:00 | Termino: 10:00
Fase 8: Importacao de Dados AWS
Pendente
Proxima etapa

Guia de Importacao de Dados do AWS

Atencao: Volume de Dados

O sistema possui 8 anos de operacao. Isso significa um volume significativo de dados. Recomendamos fazer a importacao em etapas, por modulo/tabela, para evitar timeout e problemas de memoria.

Passo 1: Exportar Dados do SQL Server (AWS)

1.1 Conectar ao SQL Server na AWS

Use o SQL Server Management Studio (SSMS) ou Azure Data Studio para conectar:

Server: seu-servidor.rds.amazonaws.com Database: COMPLY_Producao User: seu_usuario Password: sua_senha
1.2 Exportar tabelas para CSV

Execute o script abaixo para cada tabela principal:

-- Exemplo: Exportar Pessoas SELECT * FROM tb_pessoa -- Clique direito no resultado > Save Results As > CSV -- Tabelas prioritarias: -- tb_pessoa, tb_associado, tb_organizacao -- tb_produto, tb_evento, tb_atendimento -- tb_contribuicao, tb_titulo_receita
1.3 Alternativa: Usar BCP (Bulk Copy)
bcp "SELECT * FROM COMPLY_Producao.dbo.tb_pessoa" queryout "C:\export\tb_pessoa.csv" -c -t"," -S seu-servidor.rds.amazonaws.com -U usuario -P senha

Passo 2: Exportar Dados do MongoDB (AWS)

2.1 Usar mongoexport
# Instalar MongoDB Tools # https://www.mongodb.com/try/download/database-tools # Exportar colecoes mongoexport --uri="mongodb://usuario:senha@seu-mongo.amazonaws.com:27017/comply" --collection=logs --out=logs.json mongoexport --uri="mongodb://usuario:senha@seu-mongo.amazonaws.com:27017/comply" --collection=documentos --out=documentos.json

Passo 3: Fazer Upload para o Replit

3.1 Via Interface do Replit
  1. No painel esquerdo do Replit, clique em "Files"
  2. Crie uma pasta chamada "data_import"
  3. Arraste os arquivos CSV para essa pasta
  4. Para arquivos grandes (>50MB), use o metodo 3.2
3.2 Via AWS S3 + wget (arquivos grandes)
# No AWS S3, torne o arquivo temporariamente publico ou gere URL pre-assinada # No terminal do Replit: mkdir -p data_import cd data_import wget "https://seu-bucket.s3.amazonaws.com/tb_pessoa.csv?AWSAccessKeyId=xxx&Signature=yyy&Expires=zzz"

Passo 4: Importar para PostgreSQL

4.1 Usar COPY do PostgreSQL
-- Conectar ao PostgreSQL do Replit -- Use as variaveis de ambiente: PGHOST, PGPORT, PGDATABASE, PGUSER, PGPASSWORD -- Criar tabela temporaria para staging CREATE TEMP TABLE staging_pessoa ( id INT, nome VARCHAR(255), documento VARCHAR(50), -- ... outras colunas conforme CSV ); -- Importar CSV \COPY staging_pessoa FROM '/home/runner/workspace/data_import/tb_pessoa.csv' WITH CSV HEADER; -- Inserir na tabela definitiva INSERT INTO tb_pessoa (id, nome, documento, ...) SELECT id, nome, documento, ... FROM staging_pessoa ON CONFLICT (id) DO UPDATE SET nome = EXCLUDED.nome, documento = EXCLUDED.documento;
4.2 Script Python para importacao em lotes
import pandas as pd import psycopg2 from psycopg2.extras import execute_values import os conn = psycopg2.connect( host=os.environ['PGHOST'], port=os.environ['PGPORT'], database=os.environ['PGDATABASE'], user=os.environ['PGUSER'], password=os.environ['PGPASSWORD'] ) # Ler CSV em chunks de 10000 linhas for chunk in pd.read_csv('data_import/tb_pessoa.csv', chunksize=10000): data = [tuple(x) for x in chunk.to_numpy()] cursor = conn.cursor() execute_values(cursor, """ INSERT INTO tb_pessoa (id, nome, documento, email, ...) VALUES %s ON CONFLICT (id) DO UPDATE SET nome = EXCLUDED.nome """, data) conn.commit() print(f"Importado {len(data)} registros") conn.close()
Dicas para Grandes Volumes
  • Divida por ano: Exporte dados de cada ano separadamente
  • Comece pelos cadastros base: Pessoas, Organizacoes, Usuarios primeiro
  • Depois transacionais: Contribuicoes, Atendimentos, Eventos
  • Por ultimo: Logs, Historicos, Arquivos
  • Valide a cada etapa: Confira contagem de registros
  • Limite do Replit: Se necessario, use VM externa para processar e depois sincronizar

Passo 5: Validacao

5.1 Conferir contagem de registros
-- No SQL Server (origem) SELECT 'tb_pessoa' as tabela, COUNT(*) as total FROM tb_pessoa UNION ALL SELECT 'tb_associado', COUNT(*) FROM tb_associado UNION ALL SELECT 'tb_evento', COUNT(*) FROM tb_evento; -- No PostgreSQL (destino) SELECT 'tb_pessoa' as tabela, COUNT(*) as total FROM tb_pessoa UNION ALL SELECT 'tb_associado', COUNT(*) FROM tb_associado UNION ALL SELECT 'tb_evento', COUNT(*) FROM tb_evento;
5.2 Verificar integridade referencial
-- Verificar associados sem pessoa SELECT COUNT(*) FROM tb_associado a LEFT JOIN tb_pessoa p ON a."idPessoa" = p.id WHERE p.id IS NULL; -- Deve retornar 0
Voltar para Pagina Inicial