Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Uso do SQLite e o arquivo database.js

Olá! No fórum tem duas perguntas sobre isso que não foram respondidas, por isso retomo o assunto:

Nessa aula o professor não explicou o motivo de estarmos utilizando o SQLite e também não mostrou o funcionamento do arquivo database.js; informando que na sequência já estaria disponível um "para saber mais" com o detalhamento sobre estes dois pontos.

Cheguei ao final da aula 03 e não localizei essa informação, sabem onde está?

Obrigada :)

1 resposta
solução!

Olá Maria, tudo bem ?

A opção do sqlite foi apenas por ser uma solução em memória, e que dificilmente causa problema, e tem pouca configuração a ser feita, de forma que possa focar nos conceitos do desenvolvimento mvc, nos outros cursos, principalmente de API Rest, voltam a ser falado dos bancos mais tradicionais como o Mysql

Em relação ao arquivo database.js ele é apenas um arquivo de configuração dos dados do banco, praticamente um código sql puro, se dermos uma olhada:

const USUARIOS_SCHEMA = `
CREATE TABLE IF NOT EXISTS usuarios (
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    nome_completo VARCHAR(40) NOT NULL UNIQUE, 
    email VARCHAR(255) NOT NULL, 
    senha VARCHAR(255) NOT NULL
)
`;

Temos a definição da tabela de usuários e de livros

INSERT INTO usuarios (
    nome_completo, 
    email,
    senha
) SELECT 'Gabriel Leite', 'gabriel@alura.com.br', '123' WHERE NOT EXISTS (SELECT * FROM usuarios WHERE email = 'gabriel@alura.com.br')
`;

E depois há a inserção de um usuário e 2 livros apenas para popular de forma inicial o banco, tudo isso utilizando a função run:

bd.serialize(() => {
    bd.run("PRAGMA foreign_keys=ON");
    bd.run(USUARIOS_SCHEMA);
    bd.run(INSERIR_USUARIO_1);
    bd.run(LIVROS_SCHEMA);
    bd.run(INSERIR_LIVRO_1);
    bd.run(INSERIR_LIVRO_2);

    bd.each("SELECT * FROM usuarios", (err, usuario) => {
        console.log('Usuario: ');
        console.log(usuario);
    });
});

Esse bd.serialize é apenas uma função para que a execução dos códigos dentro do banco seja sequencial e não paralela, e o bd.run faz a execução da query, então criamos as tabelas e fazemos a inserção, além disso tem aquele select que você observa quando da o npm start :)

Para finalizar temos uma definição do próprio node

process.on('SIGINT', () =>
    bd.close(() => {
        console.log('BD encerrado!');
        process.exit(0);
    })
);

Então quando você da CTRL + C na aplicação, é disparado um evento de SIGINT dessa forma estamos pedindo que para que quando haja esse evento, execute essa função que irá apenas fechar o banco de dados, para evitar que tenha algum problema

E é exportado também o bd para que as classes DAO consigam utilizar essa funções para se comunicar com o banco de dados

Conseguiu Compreender?

Abraços e Bons Estudos!