Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/lionelsu/blogs-api

RESTful API offers CRUD operations related to posts, user authentication, and post categorization the API adheres to a layered architecture consistent with Model, Service, and Controller (MSC), and the database schema follows the Entity-Relationship Diagram (ERD).
https://github.com/lionelsu/blogs-api

api express mysql nodejs orm sequelize

Last synced: about 2 months ago
JSON representation

RESTful API offers CRUD operations related to posts, user authentication, and post categorization the API adheres to a layered architecture consistent with Model, Service, and Controller (MSC), and the database schema follows the Entity-Relationship Diagram (ERD).

Awesome Lists containing this project

README

        

# Blogs API

[Documentação da API no Postman](https://documenter.getpostman.com/view/30159355/2s9YRCVqxk)

Blogs API é uma solução completa para gerenciar uma plataforma de blogs que organiza postagens por categoria. Esta API oferece operações relacionadas a um CRUD de postagens, autenticação de usuário e categorização de postagens. Desenvolvida com foco na qualidade a API segue uma arquitetura em camadas consistente com Model, Service e Controller (MSC), e o esquema do banco de dados segue o Diagrama de Entidade-Relacionamento (DER).

## Ferramentas Utilizadas

- **Tecnologias Principais:**
- Node.js
- Express.js
- MySQL Server
- Sequelize ORM

- **Testes:**
- Mocha
- Chai
- Sinon

- **Documentação:**
- Postman

## Pré-Requisitos

Node versão igual ou superio a 16.14.0 LTS:

- [Node.js](https://nodejs.org/en/)

Docker e Docker Compose:

- [Docker & Docker Compose](https://docs.docker.com/compose/)

## Instalação

Com Docker

1. Clonar o Repositório

Primeiro, copie ou clone este repositório para o seu sistema local usando o Git:

```bash
git clone [email protected]:lionelsu/blogs-api.git && cd blogs-api
```

2. Iniciar o Contêiner Docker

Utilize o Docker Compose para iniciar o contêiner do Blogs API:

```bash
docker compose up -d
```

3. Popular o Banco de Dados

Utilize o Docker para popular o banco de dados:

```bash
docker exec blogs-api npm run prestart
```

Popule o banco de dados com as seeds:

```bash
docker exec blogs-api npm run seed
```

4. Iniciar o Servidor

Inicie o servidor para executar a API:

```bash
docker exec blogs-api npm run dev
```

Localmente com NodeJs

1. Clonar o Repositório

Primeiro, copie ou clone este repositório para o seu sistema local usando o Git:

```bash
git clone [email protected]:lionelsu/blogs-api.git && cd blogs-api
```

2. Instalar as Dependências

Em seguida, instale as dependências do projeto usando o `npm`:

```bash
npm install
```

3. Popular o Banco de Dados

```bash
npm run prestart && npm run seed
```

4. Iniciar o Servidor

Inicie o servidor para executar a API:

```bash
npm run dev
```

## Uso

Para interagir com o Blogs, você pode usar os seguintes comandos:

Visualização de Logs:

Linha de Comando Interativa, usada para **[testar](#testes)** a aplicação

```bash
docker exec -it blogs_api bash
```

Resetar o Banco de Dados (deve ser executado dentro da **[linha de comando interativa](#uso)**)

```bash
npm run db:reset
```

## Rotas da API

**Login:**

- **`POST /login`**: Realiza o login do usuário e retorna um token de autenticação.

**Posts:**

- **`GET /post`**: Lista todos os posts.
- **`GET /post/:id`**: Lista um post específico.
- **`GET /search?q=term`**: Lista todos os posts que contém o termo de busca.
- **`POST /post`**: Cria um novo post.
- **`PUT /post/:id`**: Atualiza um post específico.
- **`DELETE /post/:id`**: Deleta um post específico.

**Categories:**

- **`GET /categories`**: Lista todos as categorias.
- **`POST /categories`**: Cria uma nova categoria.

**User:**

- **`GET /user`**: Lista todos os users.
- **`GET /user/:id`**: Lista um user específico.
- **`POST /user`**: Cria um novo user.
- **`DELETE /user/me`**: Deleta um user específico baseado no token do usuário autenticado.

## Habilidades desenvolvidas

Desenvolvi minha aplicação usando `Node.js` com `Express.js` como base. Isso me permitiu criar facilmente endpoints `HTTP` para atender às necessidades do sistema.

Escolhi usar o banco de dados `MySQL Server` para armazenar os posts, usuários e categoria de posts. Para interagir com o banco de dados, utilizei o `Sequelize ORM` para criar modelos e consultas.

Para garantir a qualidade do código, realizei testes rigorosos com `Mocha`, `Chai` e `Sinon`. Esses testes verificaram minuciosamente os endpoints, serviços e funções para garantir que tudo funcione corretamente.

Também criei uma Documentação no `Postman` para facilitar os testes e interações com a `API`.

Com essas etapas concluídas, estou confiante na entrega de uma `API` sólida e funcional, pronta para atender às necessidades dos usuários.