Siglyane / On14-TodasEmTech-s12-BD-Integracao

Turma Online 14 - Back-end | Introdução ao Banco de Dados e Integração com o Backend

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

On14-TodasEmTech-s12-BD-Integracao

Apresentação


Chopper Feliz






Bio


Meu nome é Beatriz, atuo como pessoa desenvolvedora back-end na Creditas e curso ADS no Senac, sou ex-aluna da reprograma . Em 2019 tive que não só iniciar uma transicão de carreira, mas de genero também, então tive que aprender muita coisa até chorar,e durante esse processo eu aprendi muito me conheci melhor. Gosto de passar meu tempo livre jogando ou vendo um pirata que estica, eu tive um contato muito cedo com a programação e amo por paixão o meu JS.

recadinho da professora

  • Bebam água meninas
  • Sinta-se a vontade para fazer perguntas, pode perguntar pelo chat também ou perguntar as monitoras
  • Qualquer pergunta é válida.
  • Pode deixar a camera aberta para a prof não se sentir sozinha



Conteúdo da Aula

  • Introdução ao Banco de Dados
  • SQL vs NoSQL
  • Introdução ao MongoDB
  • Introdução ao Mongoose
  • Projeto Prático


Introdução ao Banco de Dados

Banco de dados é a organização e a armazenagem de informações sobre determinada aplicação.

Pensando em back-end, ele é fundamental para o funcionamento adquado de nossas aplicações, pois precisamos salvar dados dos nossos clientes.

Motivos para utilizar um Banco de Dados

  • Salvar dados da aplicação
  • Deixa a aplicação escalavel
  • Desempenho
  • Segurança
  • Confiabilidade

Banco de dados SQL vs NOSQL

SQL NOSQL
Os bancos de dados SQL, também conhecidos como bancos de dados relacionais, foram projetados para armazenar dados que possuem um esquema estruturado, surgiu devido a necessidade de um sistema mais barato e eficiente para armazenar dados. Surgiu como alternativa aos bancos relacionais, o MongoDB uns do mais conhecido, foi lançado aproximadamente em 2009.
Bancos de dados relacionais são compostos por tabelas que possuem relacionamento entre si, essas tabelas possui colunas(columns) e linhas(rows), que são a forma que os dados são organizados Banco de dados não relacionais são compostos por dados não estruturados, no MongoDB por exemplo, possuímos Collections que são coleção de documentos e os documentos são armazenados são os documentos em formato JSON, possuindo uma chave e valor.
O cenário para o uso do SQL e quando necessitamos de dados precisamente estruturados com relação entre si Um cenario ideal para uso do NOSQL quando uma BigData por exemplo, que precisamos que a aplicacao tenha um bom desepenho e escale horizontalmente


Introdução ao MongoDB

O MongoDB é um banco de dados direcionado a Documentos e de código aberto, sendo multiplataforma. Foi escrito na linguagem C++ e é classificado como um programa de banco de dados NoSQL, o MongoDB usa documentos semelhantes a JSON para o registro dos dados.

 // Document - Pessoa
 {
     nome: String,
     idade: Number,
     profissao: Array
     rg: Object
 }

Databases

A database é a camada superior que tem como finalidade separar as informações por collections.




Collections

A Collection é aonde ficam armazenados os documentos, similar a um array. Fazendo um comparativo ao SQL, ela seria proximo a uma Tabela, no entanto, ela não possui as limitações da mesma.

 [
      {
        nome: "Beatriz",
        idade: 24,
        profissao: ["Desenvolvedora Back-end", "Professora"]
     },
    {
        nome: "",
        idade: 0,
        profissao: [],
        formação: "",
        altura: ""
     }
]

Documentos

A estrutura do documento é muito similar a um objeto javascript, possuindo chave-valor.

 // document
 {
     nome: "Beatriz",
     idade: 24,
     profissao: ["Desenvolvedora Back-end", "Professora"]
 }


Comparativo de termos e conceitos



Relação de metodos com o CRUD

OPERAÇÃO MONGODB DESCRIÇÃO
CREATE db.insertOne() cria um documento
READ db.find() ler um documento
UPDATE db.updateOne() atualiza um documento
DELETE db.deleteOne() deleta um documento



Mongo Atlas

Mongo Atlas é um banco de dados em Cloud, atualmente é o lider de banco de dados, devido sobretudo a sua facilidade de uso, desempenho e escalabilidade.

Seu banco fica armazenado em Cluster que é um espaço numa VM que o seu banco de dados fica hospedado.

Como criar um Cluster documentação

Contectando o banco com Mongo Atlas




Mongo COMPASS

MongoDB Compass é uma interface gráfica poderosa para consultar, agregar e analisar seus dados MongoDB em um ambiente visual.

É possivel analisar as base de dados já existente bem como inserir ou exportar dados, em formato JSON ou CSV

Conectando o banco ao MongoCompass




Introdução ao Moogose

Mongoose ORM/ODM é uma ferramenta de modelagem de dados para Mongo, ele permite facilitar a armazenagem e modelamento de dados, bem como facilita a busca de documentos e a segurança do banco.

Termos/Conceitos

  • ORM Mapeamento objeto-relacional é uma técnica de desenvolvimento utilizada para fazer uma relação dos objetos com os dados que eles representam.
  • ODM Object Data Model , modela os dados baseado em Orientação a Objeto OOP



URI

uri é uma parte da URL, ela pode ser um trecho específico relacionado a configuração de um banco de dados por exemplo.

Abaixo um exemplo em javascript

const MONGO_URI = "mongodb://localhost:27017/reprogramaMusic"

Criando a função de conexão

const connect = async () => {
    try {
        await mongoose.connect(MONGO_URI, {
            {
                useNewUrlParser: true,
                useUnifiedTopology: true,
            }
        )
        console.log('Banco de dados conectado')
    } catch (error) {
        console.error(error)
    }
}

Exportando a função de conexão

module.exports = { connect }

Conectando ao banco

const db = require('dbconfig.js')
db.connect()


Schema/Model

Schema ou model é o nosso modelo de dados, assim podemos mapear o nossa model, exemplo: uma Pessoa, ela possui um nome, sobrenome, uma data de nascimento...

Criando o Schema/Model

Quando criamos a nossa Schema, precisamos definir a tipagem da propriedade bem como as regras, existe cenarios que o campo é requirido, que o campo é unico e sucessivamente.

Tipo Definição Exemplo de uso
String texto para nomes, email, senhas...
Number numero para idades, likes, contadores...
Date data data de criação, data de modificação...
Array array que seria equivalente a lista lista de objetos, como por exemplo: Filmes, Profissão, Comentários, etc

... e outros tipos do Javascript



Exemplo de uso em javascript

const Schema = new mongoose.Schema({
    artista: {
        type: String,
        required: true,
    },
    titulo: {
        type: String,
        required: true,
    },
    album: {
        type: String,
        required: true,
    },
    ano: {
        type: Number,
        required: true,
    },
 })

exportando nosso Schema ou seja nossa model e criando a collection

module.exports =  mongoose.model('musica', Schema)

Métodos do CRUD com Moogose

vamos conhecer o basico do mongoose

Obter toda a coleção

Ao utilizar esse metodo retornamos todos as musicas da collection

const musica = await Musica.find()

Busca com parametros

Caso queira filtrar algum dado da collection, basta passar um objeto como parametro para o metodo find

const musica = await Musica.find({
    artista: req.query.artista,
    titulo: req.query.titulo,
    album: req.query.album,
    ano: req.query.ano,
})

obter somente uma musica(document) da collection por ID

const musica = await Musica.findById(req.params.id)	

salvar um documento na collection

const musica =  Musica.create({
    artista: req.body.artista,
    titulo: req.body.titulo,
    album: req.body.album,
    ano: req.body.ano,
})

await musica.save()

deletar um documento da collection

const musica = await musica.delete()

Resumo dos métodos vistos até aqui.

OPERAÇÃO MONGODB MONGOOSE
CREATE db.insertOne() musica.save()
READ db.find() musica.find()
UPDATE db.updateOne() musica.save()
DELETE db.deleteOne() musica.delete()



Dotenv

Variaveis de ambiente permite que a desenvolvedora tenha maior controle e segurança sobre a aplicação, permite por exemplo salvar uma senha do banco de dados. Para essa nosssa API, utilizaremos o dontenv-safe, que adiciona uma camada adicional de segurança para o desenvolvedor.

Para instalar o dotenv-safe, basta utilizar o comando:

npm install dotenv-safe

Para habilitar as variaves de ambiente.

require('dotenv-safe').config()


// para utiliza-la
const MONGO_URI = process.env.MONGO_URI
const PORT = process.env.PORT

Para decrarar as variaves basta criar um arquivo .env e um arquivo .env.example.

No arquivo .env salvamos as variaveis de ambiente.

PORT=3000
MONGODB_URI=mongodb://localhost:27017/reprogramaMusic

No arquivo .env.example salvamos somente a variavel vazia para que o proximo desenvolvedor que baixar o projeto, saber que precisa definir essas variaveis.

MONGODB_URI
PORT



Hora de criar nossa API e integrada-la ao nosso banco de dados

Arquitetura da nossa API

ReprogramaMusic             
├─ src                       
│  ├─ controllers            
│  │  └─ musicController.js  
│  ├─ database               
│  │  └─ mongoConfig.js      
│  ├─ models                 
│  │  └─ musicSchema.js      
│  ├─ routes                 
│  │  └─ musicRouter.js      
│  └─ app.js                 
├─ package-lock.json         
├─ package.json  
├─ .gitignore   
├─ README.md        
└─ server.js          

Dependências que serão utilizadas

Dependencia Descrição
Express Framework para construção de micro-serviços com Node
Cors Expoe nossa api a outros dominios
Mongoose Uma lib ORM/ODM que facilita a criação de modelos de dados para o MongoDB.
dotenv-safe Garante que todas as variáveis ​​de ambiente necessárias sejam definidas após a leitura
nodemon Recarrega nossa API, cada vez que fazemos uma alteração no código

ROTAS DA NOSSA API

  • [GET] /musicas
  • [POST] /musicas/create
  • [PUT] /musicas/:id
  • [DELETE] /musicas/:id
  • [GET] /musicas/:id






Videos de apoio




Referências




Trabalho entegrável

vamos fazer um API dos cantores das musicas?

O entregável obrigatório consiste em um getAll, getById e um Post. Caso queira e se sinta confortável pode fazer um CRUD completo.

Sugestão de Rotas

[GET] "artistas/all" - retorna todos os autores de
[GET] "artistas/{id}" - retorna um unico autor por id
[POST] "artistas/create" - cria um novo autor

Sugestão de Schema

    {
        artista : string,
        likes: number,
        deslikes: number,
        musicas: array, // ["musica1", "musica2", ...]

    }

Obrigada!

luffy

Qualquer dúvida pode entrar em contato.

Me encontre nas Redes

Instagram - @isjanebia
Linkedin - Beatriz Ramerindo
Telegran - @littlejanne

About

Turma Online 14 - Back-end | Introdução ao Banco de Dados e Integração com o Backend