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).
Clonar o repositório
git clone https://github.com/bmviniciuss/postpress
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.
npm install
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
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.
npm run dev:app:run
⭐ Pronto!
- 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
- Cadastro de usuário
- 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
- Criação de post
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:
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.
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.
Para executar os testes unitários execute o seguinte comando:
npm run test:unit
Para executar em modo watch
:
npm run test:unit -- --watch
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
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!