Escrito com Node.js, Fastify, Vite, React, Postgres e Docker.
São 3 servicos principais: Database, API e Frontend.
graph LR
API --> Database
Frontend --> API
O banco de dados é um Postgres. Escolhi este por ser um banco de dados relacional e por ser um dos mais utilizados no mercado.
backend/database/01.sql
- Criação do banco de dados, tabelas e functions
A API é um servidor Fastify. Escolhi este por ser um servidor web extremamente rápido, com facilidade para validar requests/responses e também pode ser facilmente extendido.
backend/api/src/routes/auth.route.ts
- Logica de autenticação usando token PASETObackend/api/src/routes/post.route.ts
- Logica de CRUD de postsbackend/api/src/entities.ts
- Tipos das entidades do banco de dadosbackend/api/src/config.ts
- Dados de configuracao usando o Convictbackend/api/src/index.ts
- Inicialização do servidor Fastify
A ideia foi a simplicidade e velocidade na hora de criar os endpoints. Ações simples na base de dados sao feitas com SQL simples, as mais complexas eu criei uma function. Principais rotas estão protegidas com autenticação via o token PASETO.
O frontend é um projeto React com Vite. Escolhi o Vite por ser um bundler extremamente rápido e fácil de utilizar.
Coloquei o NextUI para facilitar a criação de componentes e o SWR para facilitar a criação de hooks para requests.
frontend/src/routes/index.tsx
- Organizei as rotas com React Routerfrontend/src/routes/home.tsx
- A home após login, onde mostra todos os postsfrontend/src/routes/post/index.tsx
- A página de criação de postfrontend/src/routes/auth/index.tsx
- A página com componente de cadastro e login
Abrindo o terminal na pasta raiz, o comando abaixo irá subir os 3 serviços.
docker-compose up -d --build
Após a subida apenas acessar no browser http://localhost:5000