Created
July 18, 2024 21:58
-
-
Save tgmarinho/b0dd72e198b12429593f975f7c7efe7a to your computer and use it in GitHub Desktop.
import-lgnd-csv
We can make this file beautiful and searchable if this error is corrected: It looks like row 10 should actually have 1 column, instead of 2 in line 9.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const csv = require('csv-parser'); | |
const { PrismaClient } = require('@prisma/client'); | |
const moment = require('moment'); | |
const prisma = new PrismaClient(); | |
async function importCSV(filePath) { | |
const pessoas = []; | |
fs.createReadStream(filePath) | |
.pipe(csv({ separator: '\t' })) | |
.on('data', (row) => { | |
pessoas.push({ | |
cpf: row['CPF'], | |
nome: row['Nome Completo'], | |
rg: row['RG'], | |
orgaoExpedidor: row['ÓRGÃO EXPEDITOR'], | |
dataNascimento: moment(row['DATA DE NASCIMENTO'], 'DD/MM/YYYY').toDate(), | |
estadoCivil: row['ESTADO CIVIL'], | |
celular: row['CELULAR'], | |
email: row['EMAIL'], | |
cep: row['CEP'], | |
rua: row['RUA'], | |
ruaNumero: row['NÚMERO'], | |
ruaComplemento: row['COMPLEMENTO'], | |
bairro: row['BAIRRO'], | |
cidade: row['CIDADE'], | |
estado: row['ESTADO'], | |
peso: parseFloat(row['PESO (APENAS NUMEROS)']), | |
altura: parseFloat(row['ALTURA (APENAS NÚMERO)']), | |
temFilhos: row['TEM FILHOS?'] === 'Sim', | |
qtdFilhos: parseInt(row['SE TIVER FILHOS, QUANTOS?']) || null, | |
nomeContatoEmergencia: row['NOME DO CONTATO DE EMERGÊNCIA'], | |
emailContatoEmergencia: row['E-MAIL DO CONTATO DE EMERGÊNCIA'], | |
celularContatoEmergencia: row['CELULAR DO CONTATO DE EMERGÊNCIA'], | |
tipoVinculoContatoEmergencia: row['VÍNCULO CONTATO DE EMEGÊNCIA'], | |
igreja: row['Nome da sua igreja/comunidade?'], | |
igrejaPastor: row['Nome do seu pastor/padre/lider?'], | |
comoConheceuLegendarios: row['Como soube dos Legendários?'], | |
possuiPlanoSaude: row['Possui Plano de Saúde?'] === 'Sim', | |
nomePlanoSaude: row['Se sim, qual o nome do plano de saúde?'], | |
possuiAlergia: row['Alergias?'] === 'Sim', | |
possuiDiabetes: row['Diabetes?'] === 'Sim', | |
possuiConvulsoes: row['Convulsões'] === 'Sim', | |
possuiDesmaios: row['Episódios de desmaio?'] === 'Sim', | |
possuiProblemasCardiacos: row['Problemas cardíacos?'] === 'Sim', | |
possuiDisturbiosAlimentares: row['Transtornos alimentares ou problemas estomacais?'] === 'Sim', | |
possuiProblemasRespiratorios: row['Problemas respiratórios como asma, enfisema, DPOC?'] === 'Sim', | |
cuidadosPsiquiatricos: row['Cuidados psiquiátricos?'] === 'Sim', | |
medicacaoDepressao: row['Faz uso de medicamentos para depressão ou problemas de comportamento?'] === 'Sim', | |
possuiProblemasMusculoesqueleticos: row['Transtornos músculo-esquelético (artrodese, lesões na coluna, etc)?'] === 'Sim', | |
doencaOuCondicao: row['Se você respondeu SIM a alguma das perguntas anteriores, explique qual é a doença e/ou condição:'], | |
medicacoes: row['Faz uso de qualquer medicação atualmente (indique)'], | |
outrasInformacoesMedicas: row['Detalhe qualquer outra informação médica importante que a equipe organizadora deva saber durante a sua estadia no evento de LEGENDÁRIOS:'], | |
motivosDietaEspecial: row['Por razões médicas requer uma dieta especial? (descreva):'], | |
tamanhoFarda: row['TAMANHO DA CAMISA'], | |
aceitaTermos: row['ACEITA TERMOS E CONDIÇÕES'] === 'Sim', | |
pagamento_status: row['Informe como está a questão do pagamento, já pagou? se sim envie o comprovante, se precisa pagar solicite o link de pagamento para nós'], | |
}); | |
}) | |
.on('end', async () => { | |
console.log('CSV file successfully processed'); | |
for (const pessoa of pessoas) { | |
await prisma.pessoa.create({ | |
data: pessoa, | |
}); | |
} | |
console.log('All data imported successfully'); | |
prisma.$disconnect(); | |
}); | |
} | |
importCSV('path_to_your_csv_file.csv'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment