Esses sistema foi feito para cadastrar contatos usando serviços externos para buscar endereços e geolocalização usando VIA CEP e a própria api do Google Maps. A arquitetura desse projeto foi montado em cima da Hexagonal, mas possui algumas bases da Arquitetura Limpa. Foi usado também conceitos do SOLID e Design Patterns Esse projeto está quase 100% de cobertura de testes, o fato de não estar 100% é por conta da falta de testes referente as funcionalidade do devise (TODO)
- Docker
- Docker Compose
- Conta Google Cloud (Para acessar apis do Google Maps)
Este projeto está configurado para ser executado usando Docker e Docker Compose. Isso simplifica a configuração e garante que o ambiente de todos os desenvolvedores seja consistente.
-
Clonar o repositório:
git clone https://seurepositorio.com/projeto.git cd projeto
-
Configurar as variáveis de ambiente: Crie um arquivo .env na raiz do projeto e preencha-o com as variáveis necessárias conforme o exemplo .env.example.
POSTGRES_DB=nome_do_db
POSTGRES_USER=usuario
POSTGRES_PASSWORD=senha
RAILS_ENV=development
RAILS_MASTER_KEY=chave_mestra_rails
GMAIL_USERNAME=seu_usuario@gmail.com
GMAIL_PASSWORD=sua_senha
VIA_CEP_HOST=url_api_cep
GOOGLE_MAPS_HOST=url_api_maps
GOOGLE_MAPS_KEY=sua_chave_google_maps
- Construir e rodar o aplicativo usando Docker Compose:
docker-compose up --build
Este comando constrói a imagem do aplicativo se necessário e inicia todos os serviços definidos no docker-compose.yml, incluindo o banco de dados e a aplicação Rails.
- Acessar o aplicativo:
- O aplicativo estará disponível em http://localhost:3000.
- Executar comandos dentro do container:
- Para executar comandos Rails ou Rake, você pode usar:
docker-compose run contacts_api <comando>
- Por exemplo, para criar o banco de dados:
docker-compose run contacts_api rails db:create db:migrate
- Para rodar os testes:
docker-compose run contacts_api rspec
- Encerrar os serviços:
docker-compose down
Está disponível a documentação referente aos endopints criados utilizando esse link http://localhost:3000/api-docs
Este projeto utiliza várias gems para facilitar o desenvolvimento e garantir funcionalidades robustas. Abaixo estão algumas das principais gems utilizadas e suas funções no projeto:
- Rails (
rails
): Framework web utilizado para construir toda a aplicação. Escolhido pela sua extensa comunidade e facilidades para desenvolvimento de aplicações web complexas.
- PostgreSQL (
pg
): Gem que permite a conexão com o banco de dados PostgreSQL, escolhido pela sua robustez e suporte a recursos avançados de bancos de dados.
- Devise Token Auth (
devise_token_auth
): Utilizada para adicionar autenticação baseada em tokens à aplicação. Essa gem facilita a implementação de registro, login e logout seguros em APIs Rails.
- Faraday (
faraday
): Gem para realizar requisições HTTP. Usada para integrar com APIs externas como a do Google Maps e ViaCEP.
- CPF CNPJ (
cpf_cnpj
): Gem para validar e gerar CPFs e CNPJs, usada para garantir que os CPFs dos contatos sejam válidos.
- RSpec (
rspec-rails
): Framework de teste para Rails, utilizado para escrever e executar testes unitários e de integração. - FactoryBot (
factory_bot_rails
): Utilizada para criar e gerenciar objetos de teste de forma fácil e eficiente. - Faker (
faker
): Gem que gera dados falsos para uso em testes e seed de banco de dados. - Database Cleaner (
database_cleaner-active_record
): Garante um estado limpo para os testes ao limpar o banco de dados entre os testes.
- RSwag (
rswag
): Integra a geração de especificações OpenAPI/Swagger com aplicações Rails para ajudar na documentação e teste de APIs.
- Pry (
pry-byebug
): Combinação depry
ebyebug
para proporcionar uma interface interativa de debugging em Rails. - Letter Opener (
letter_opener
): Utilizada em desenvolvimento para abrir emails enviados em uma janela do navegador, facilitando a visualização durante o desenvolvimento.