/Projeto-Blogs-API

Foi desenvolvido uma API e um banco de dados para produção de conteúdo para um blog, onde os endpoints seguem os princípios REST.

Primary LanguageJavaScript

Bem vindos ao repositório Blogs-API

👨‍💻 O que foi desenvolvido
Aqui você vai encontrar os detalhes de como foi estruturado este projeto e instruções para rodar. Este projeto foi desenvolvido uma API e um banco de dados para a produção de conteúdo para um blog! É uma aplicação em Node.js usando o pacote sequelize para fazer um CRUD de posts.

1. Foi desenvolvido os endpoints que estarão conectados ao banco de dados seguindo os princípios do REST;

2. Para fazer um post é necessário usuário e login, possui relacionamentos,  **relação entre** `user` e `post`; 

3. É necessário utilização das categorias para os posts, trabalhando, assim, a **relação de** `posts` para `categories` e de `categories` para `posts`.

Orientações

🐋 Rodando no Docker vs Localmente

👉 Com Docker

ℹ️ Rode os serviços node e db com o comando docker-compose up -d --build.

  • Lembre-se de parar o mysql se estiver usando localmente na porta padrão (3306), ou adapte, caso queria fazer uso da aplicação em containers;

  • Esses serviços irão inicializar um container chamado blogs_api e outro chamado blogs_api_db;

  • A partir daqui você pode rodar o container blogs_api via CLI ou abri-lo no VS Code;

ℹ️ Use o comando docker exec -it blogs_api bash.

  • Ele te dará acesso ao terminal interativo do container criado pelo compose, que está rodando em segundo plano.

ℹ️ Instale as dependências [Caso existam] com npm install. (Instale dentro do container)


👉 Sem Docker

ℹ️ Instale as dependências [Caso existam] com npm install

  • Dica: Para rodar o projeto desta forma, obrigatoriamente você deve ter o node instalado em seu computador.

Como ter acesso ao projeto e instalar as dependências
1. Entre na pasta do repositório que você acabou de clonar ou fazer o download do arquivo zip:
* `cd pasta-do-repositório`

2. Instale as dependências:
*`npm install`

3. Suba os imagens do servidor node e do banco de do docker-compose com o comando:
*`docker-compose up -d --build

<br />
👀 REST

Status HTTP

Tenha em mente que todas as "respostas" devem respeitar os status do protocolo HTTP com base no que o REST prega.

Alguns exemplos:

  • Requisições que precisam de token mas não o receberam devem retornar um código de status 401;

  • Requisições que não seguem o formato pedido pelo servidor devem retornar um código de status 400;

  • Um problema inesperado no servidor deve retornar um código de status 500;

  • Um acesso ao criar um recurso, no nosso caso usuário ou post, deve retornar um código de status 201.

🎲 Entidades

Formato das entidades

O seu projeto deverá usar o ORM Sequelize para criar e atualizar o seu banco de dados.

Os primeiros requisitos do projeto devem orientar a produção de suas migrations para gerar:

  • Uma tabela chamada users, contendo dados com a seguinte estrutura:

    id display_name email password image
    1 Brett Wiltshire brett@email.com // tem quer ser único 123456 http://4.bp.blogspot.com/_YA50adQ-7vQ/S1gfR_6ufpI/AAAAAAAAAAk/1ErJGgRWZDg/S45/brett.png
  • Uma tabela chamada categories, contendo dados com a seguinte estrutura:

    id name
    18 News
  • Uma tabela chamada blog_posts, contendo dados com a seguinte estrutura:

    id title content user_id published updated
    21 Latest updates, August 1st The whole text for the blog post goes here in this key 14 // Chave estrangeira, referenciando o id de users 2011-08-01T19:58:00.000Z 2011-08-01T19:58:51.947Z
  • Uma tabela chamada PostCategories, contendo uma chave primária composta utilizando os dois atributos da estrutura:

    post_id category_id
    50 // Chave primária e estrangeira, referenciando o id de BlogPosts 20 // Chave primária e estrangeira, referenciando o id de Categories

    Os dados acima são fictícios, e estão aqui apenas como exemplo

    Dicas de scripts prontos

    • Deleta o banco de dados:
    "drop": "npx sequelize-cli db:drop"
    • Cria o banco e gera as tabelas:
    "prestart": "npx sequelize-cli db:create && npx sequelize-cli db:migrate"
    • Insere dados/Popula a tabela:
    "seed": "npx sequelize-cli db:seed:all"