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

https://github.com/andrebeolchi/newsee-fastify-api


https://github.com/andrebeolchi/newsee-fastify-api

Last synced: 5 months ago
JSON representation

Awesome Lists containing this project

README

          

# Projeto Newsee Fiap Blog

![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/andrebeolchi/newsee-fastify-api/test.yml?style=flat&label=hourly%20tests)
[![Better Stack Badge](https://uptime.betterstack.com/status-badges/v2/monitor/1q8no.svg)](https://uptime.betterstack.com/?utm_source=status_badge)

A API Newsee Blog permite que professores possam compartilhar conteúdo didático e informativo com seus alunos.
Este manual oferece uma visão geral de como usar os endpoints disponíveis, incluindo detalhes
de autenticação, exemplos de requisições e respostas, e tratamento de erros.

**Índice**

- [Projeto Newsee Fiap Blog](#projeto-newsee-fiap-blog)
- [Arquitetura da Aplicação](#arquitetura-da-aplicação)
- [Diagrama de Componentes](#diagrama-de-componentes)
- [Fluxo de Dados e Interações](#fluxo-de-dados-e-interações)
- [Estrutura](#estrutura)
- [/adapters](#adapters)
- [/models](#models)
- [/env](#env)
- [/repositories](#repositories)
- [/services](#services)
- [/http](#http)
- [app.ts](#appts)
- [server.ts](#serverts)
- [Instalação e configuração](#instalação-e-configuração)
- [Instalação de dependências](#instalação-de-dependências)
- [Inicialização do banco](#inicialização-do-banco)
- [Configuração do banco](#configuração-do-banco)
- [Atualização do banco](#atualização-do-banco)
- [Configurar variáveis de ambiente](#configurar-variáveis-de-ambiente)
- [Inicialização do projeto](#inicialização-do-projeto)
- [Ambiente de desenvolvimento](#ambiente-de-desenvolvimento)
- [Ambiente de produção](#ambiente-de-produção)
- [CI/CD](#cicd)
- [Autores](#autores)

## Arquitetura da Aplicação

### Diagrama de Componentes

O sistema é dividido atualmente em dois componentes principais:

- **Backend**: Contém a lógica de negócios e a API, construído com Node.js (fastify).
- **Banco de Dados**: Gerenciamento de dados com PostgreSQL.

### Fluxo de Dados e Interações

O fluxo de dados ocorre da seguinte forma:

1. É feita uma requisição á API
2. Middlewares são usados para fazer a validação de autenticação
3. Os controladores fazem a associação da rota e método da requisição ao respectivo serviço
4. Os serviços realizam ações e alterações necessárias ao repositório
5. O repositório armazena a informação e persiste em um banco postgresql

## Estrutura

### /adapters

- **db**: inicialização do client do prisma (banco postgres)

### /models

Definição de tipagem para modelos de usuários e posts

### /env

Garante a configuração correta das variáveis de ambiente

### /repositories

Definição de interfaces dos repositórios base para usuários e posts

- **/in-memory**: Definição de classe de repositório "em memória" para gerenciamento de dados locais sem persistência
- **/prisma**: Definição de classe de repositório integrado ao prisma para gerenciamento de dados persistidos no banco

### /services

Definição de serviços para interação com modelos posts e users

- **/\_errors**: Definição de classes customizadas de erro, e handler que mapeia o erro à sua classe adequada a partir do código de status
- **/factory**: Definição de funções que acoplam o repositório do prisma aos serviços para uso simplificado na aplicação
- **/posts** e **/users**: Definições de serviços para posts e usuários

### /http

- **/controllers**: Definição das rotas da API, utilizando os serviços definidos em /services
- **/middlewares**: Definição de middlewares para interceptar e validar requisições

### app.ts

Configura o servidor fastify e acopla rotas ao app, além de incluir a inicialização do swagger para documentação da API.

### server.ts

Inicializa o servidor

## Instalação e configuração

### Instalação de dependências

```bash
yarn
```

### Inicialização do banco

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

Argumento "-d" usado para rodar o container em background

### Configuração do banco

```bash
yarn prisma generate
```

### Atualização do banco

```bash
yarn prisma migrate dev
```

Esse comando deve ser utilizado em caso de alterações ao schema do prisma

### Configurar variáveis de ambiente

Seguir exemplo demonstrado em `.env.example`, criando um arquivo `.env` na raiz do projeto

## Inicialização do projeto

### Ambiente de desenvolvimento

```bash
yarn dev
```

### Ambiente de produção

Gera versão de build da aplicação

```bash
yarn build
```

Inicializa versão de build

```bash
yarn start
```

## CI/CD

Foi configurado um fluxo utilizando GithubActions para validação do projeto com testes unitários automatizados

## Autores

[André Beolchi](https://github.com/andrebeolchi) (RM 359648)

[Fellipe Corominas](https://github.com/LeFelps) (RM 359677)