Este projeto está escrito em Ruby com uso do framework Hanami. Abaixo tem algumas informações importantes para o entendimento básico do projeto:
Ruby >= 2.5 Hanami = 1.2 PostgreSQL Argon2 JWT
Hanami é baseado em uma arquitetura "Clean" e Monolith First, porém, este projeto foi segmento para escalar de modo fácil usando a técnica da "Umbrella" (escalar sem precisar de microserviços) ou "Container", ou seja, cada evento - create, delete, e outros - está isolado, em caso de necessidade de escalomento é só desacoplar o evento que tem maior demanda e separar em um serviço.
Organizações das pastas:
apps
- Está toda manipulação de roteamento e controle, neste caso, somente a API está habilitado.
config
- Configurações gerais da aplicação, porém, é composta de forma global para qualquer aplicação que esteja em apps
db
- Contém os migratios e estruturação do DB
lib
- É composta por toda estrturação e manipulação entre entidade (Entity) e o dados (Repository)
repositories
- Manipula as informações de DB e controlar
entities
- Informações da entidade, ou seja, é possível fazer restrição de tipagem, gets, sets e outras coisas ligado a classe.
* Importante: O Hanami já faz alguns tratamento na entidade de forma automática, baseado na informações do DB.
Para mais informações: hanamirb.org/guides/1.2/architecture/overview/
POST /sing_up Parâmetros: - first_name => string - last_name => string - email => string - encrypted_password => string - encrypted_password_confirmation => string - admin => bool (defautl: false) Descrição: Cria um novo usuário baseado nas informações de parâmetros. Retorno: JSON com dados do usuário (sem a senha).
POST /sing_in Parâmetros: - email => string - password => string Descrição: Efetua o login. Retorno: JSON com Token para uso em JWT
DELETE /users/:id Parâmetros: - id => uuid Descrição: Remove um usuário baseado no ID Retorno: JSON com mensagem de sucesso ou negativo.
GET /videos Descrição: Mostra todos os vídeos visiveis. Retorno: JSON com vídeos e opções de paginaçõ.
GET /videos/:id Parâmetros: - id => uuid Descrição: Retorna o vídeo solitado por ID. Retorno: JSON com informações do vídeo.
POST /videos Parâmetros: - title => string - thumbnail => string - url_video => string - tags => Array string - visible => bool (default: true) Descrição: Cria um novo vídeo baseado nos parâmetros. Retorno: JSON com informações do vídeo criado.
PATCH /videos/:id Parâmetros: - title => string - thumbnail => string - url_video => string - tags => Array string - visible => bool (default: true) Descrição: Atualiza vídeo de um ID solicitate, baseado nos parâmetros. Retorno: JSON com informações do vídeo atualizado.
DELETE /videos/:id Parâmetros: - id => uuid Descrição: Remove um vídeo baseado no ID solicitante. Retorno: JSON com mensagem.
GET /videos/search Parâmetros: - query => string Descrição: Busca um vídeo baseado na query (title, description, tags) Retorno: JSON com resultado da pesquisa.
/sign_up
e/sing_in
não possui autenticação de endpoint (JWT), os demais tem que ser redirecionado oauth_token
que é gerado e retornado no momento do login. Enviar o token no cabeçalho (header) do request baseado no padrão:Authorization Bearer
.
A configuração básica está baseado em .env
, por meio de váriveis de ambientes, no caso de development e test o Hanami tem gerenciamento automático baseado na situação do HANAMI_ENV
.
Nesses arquivos estão configurações como Banco de dados, JWT secret, Cors, e outros.
Em caso de produção, é necessário exportar, exemplo: export CORS_ALLOW_HEADERS="Content-Type Accept Auth-Token"
, assim, as informações ficam na integridade do sistema onde será executado e não em arquivos, é importante ver as boas práticas da hoespedagem/nuvem ou do sistema onde irá rodar em produção.
É necessário instalar todos os pacotes do backend, para isto execute no terminal bundle install
Também, é necessário fazer a criação e exeução do banco de dados, que está baseado em PostgreSQL.
Comando: bundle exec hanami db prepare
Para habilitar o ambiete de teste pasta setar uma varivel de ambiente HANAMI_ENV=...
Comando: HANAMI_ENV=test bundle exec hanami db prepare
Para executar o servidor do Hanami que está baseado em Puma:
Comando bundle exec hanami server
Ele irá executar na porta 2300 no caminho http://localhost:2300/api
Existe a opção de executar com Webrick, porém, não recomendo. Use Puma, que já está pré-configurado.
Comando: bundle exec hanami server --server=webrick
Use docker-compose somente em ambiente de desenvolvimento, seguindo as boas práticas de Container.
Build: docker build -f Dockerfile.dev .
Executar: docker-compose up
para habilitar
Parar e remover: docker-compose down
Gerar o build: docker build -t ayga-api -f Dockerfile .
Executar: docker run -d -it -p 2300:2300 --name=api ayga-api bundle exec puma -C 'config/puma.rb'
Parar o container: docker stop ayga-api
Remover: docker rm ayga-api
Explore Hanami guides, API docs, or jump in chat for help. Enjoy! 🌸