/postpress

A blogging API

Primary LanguageTypeScript

Postpress

Uma api de blogging construída utilizando Typescript, Prisma, Postgres e TDD.

🧰 Executando Projeto

🚀 Como executar o projeto em modo desenvolvimento

Para rodar a aplicação em modo desenvolvimento é necessário ter instalado em sua máquina o Node, NPM, Docker e Docker Compose (ou postgres instalado e rodando).

1. Clonar repositório

Clonar o repositório

git clone https://github.com/bmviniciuss/postpress

2. Definir variáveis de ambiente

Usar o arquivo .env.dev como exemplo e criar um arquivo .env na raiz do projeto:

DATABASE_URL="postgresql://user:pass@localhost:15432/postpress-dev?schema=public"
POSTGRES_USER='user'
POSTGRES_PASSWORD='password'
JWT_SECRET="super secret pass"
SALT_NUMBER=10

Obs.: Como é um arquivo de desenvolvimento local, observar que o endereço do banco é localhost:15432 e não db como o .env de produção mostrado acima.

3. Instalar dependências

npm install

4. Inicializar banco de dados

Para inicializar o banco de dados de desenvolvimento:

npm run dev:db:up

Obs.: Caso deseje desligar o banco de dados de produção executar o seguinte comando:

npm run dev:db:down

5. Rodar migrações

npm run prisma:migrate

💡 Só é necessário rodar o comando de aplicar migrações caso sejam criadas outras ou o banco de desenvolvimento seja resetado.

6. Inicializar aplicação

npm run dev:app:run

⭐ Pronto!


✨ Features

  • Documentação via Swagger na rota /docs.
  • User
    • Cadastro de usuário POST /user
    • Listagem de usuários GET /user
    • Busca de usuário por id GET /user/:userId
    • Remoção de usuário DELETE /users/me
  • Login de usuários POST /login
  • Post
    • Criação de post POST /post
    • Listagem de posts GET /post
    • Busca de post por id GET /post/:postId
    • Atualização de post PUT /post/:postId
    • Remoção de post DELETE /post/:postId
    • Busca de post por titulo ou conteudo GET /post/search?q=searchTerm

⚙️ Sobre Desenvolvimento

A api do Postpress foi construída em Node e Typescript utilizando um banco de dados Postgres. Para realizar a comunicação da api com o banco de dados e gerenciar schemas e migrations foi utiliado o ORM Prisma, que através do arquivo de schema escrito na PSL (Prisma Schema Language) cria os modelos tipados e migrações necessárias. O código tem influências da arquitetura limpa tentando separar e restringir as resposabilidates nas camadas e nos principios do SOLID. Além de ter seu desenvolvimento baseado em testes.

Algumas das dependências utilizadas no desenvolvimento da aplicação:

🧪 Testes

O desenvolvimento da aplicação foi realizado com testes unitários e de integração utilizando o framework Jest. Foram utilizando alguns utilitários como o jest-mock-extended, faker e factory-maker.

Execução de testes

A execução de testes da api está apenas disponível no ambiente de desenvolvimento local, sendo necessário instalar as dependências localmente, como explicado no tópico 1.1.

Temos dois tipos de testes (unitários e integração) que necessitam de setups diferentes, eles foram divididos em dois tipos de arquivos. Arquivos com terminações .spec.ts especificam testes unitários de um componente, já arquivos com terminações .test.ts indicam testes de integração de um componente.

Unitários

Para executar os testes unitários execute o seguinte comando:

npm run test:unit

Para executar em modo watch:

npm run test:unit -- --watch

Integração

Para executar os testes utilizar o seguinte comando:

npm run test:integration

Esse comando ira subir uma instância de um banco de dados postgres exclusivo para testes, aplicará as migrations no banco de dados e executará os testes de integração.

Para executar em modo watch:

npm run test:integration -- --watch

Para desligar a instância do banco de dados de teste, rode o comando a seguir:

npm run test:docker:down

Coverage report

Para executar todos os testes e gerar o coverage report, rode o seguinte comando:

npm run test:ci:local

Esse comando ira subir uma instância de um banco de dados postgres exclusivo para testes, aplicará as migrations no banco de dados e executará todos os testes e irá gerar o coverage report e por fim desliga a instância do banco de teste.


Feito com ❤️ por Vinicius Barbosa 👋 Entre em contato!