lsancho / blog-challenge

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Blog

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
Loading

Database

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

Api

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 PASETO
  • backend/api/src/routes/post.route.ts - Logica de CRUD de posts
  • backend/api/src/entities.ts - Tipos das entidades do banco de dados
  • backend/api/src/config.ts - Dados de configuracao usando o Convict
  • backend/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.

Frontend

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 Router
  • frontend/src/routes/home.tsx - A home após login, onde mostra todos os posts
  • frontend/src/routes/post/index.tsx - A página de criação de post
  • frontend/src/routes/auth/index.tsx - A página com componente de cadastro e login

Como rodar

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

compose running

auth page

About


Languages

Language:TypeScript 82.9%Language:PLpgSQL 9.4%Language:JavaScript 4.5%Language:Dockerfile 2.4%Language:HTML 0.7%Language:CSS 0.2%