{"id":20299337,"url":"https://github.com/samuelrocha91/delivery_back","last_synced_at":"2025-04-11T13:14:50.241Z","repository":{"id":244563430,"uuid":"794343292","full_name":"SamuelRocha91/delivery_back","owner":"SamuelRocha91","description":"Repositório Ruby On Rails de uma aplicação de delivery com autenticação, threads, docker, testes. Back-end e interface :admin e developer. ","archived":false,"fork":false,"pushed_at":"2024-10-06T01:49:48.000Z","size":69818,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-25T09:47:28.219Z","etag":null,"topics":["activecable","activestorage","devise","discard","docker","event-machine","faraday","geocode","kaminari","r","redis","rspec-rails","ruby","ruby-on-rails","shoulda-matchers","sidekiq","simplecov","sqlite3","sse","swagger"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SamuelRocha91.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-01T00:02:32.000Z","updated_at":"2025-02-20T02:12:34.000Z","dependencies_parsed_at":"2024-09-17T23:26:38.731Z","dependency_job_id":null,"html_url":"https://github.com/SamuelRocha91/delivery_back","commit_stats":null,"previous_names":["samuelrocha91/delivery_back"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelRocha91%2Fdelivery_back","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelRocha91%2Fdelivery_back/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelRocha91%2Fdelivery_back/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelRocha91%2Fdelivery_back/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SamuelRocha91","download_url":"https://codeload.github.com/SamuelRocha91/delivery_back/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248406726,"owners_count":21098282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["activecable","activestorage","devise","discard","docker","event-machine","faraday","geocode","kaminari","r","redis","rspec-rails","ruby","ruby-on-rails","shoulda-matchers","sidekiq","simplecov","sqlite3","sse","swagger"],"created_at":"2024-11-14T16:14:21.478Z","updated_at":"2025-04-11T13:14:50.206Z","avatar_url":"https://github.com/SamuelRocha91.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"https://cdn-icons-png.flaticon.com/128/83/83522.png\" alt=\"Java Projects Logo\" width=\"42\" height=\"30\" /\u003e Aplicação de Delivery  \u003cimg src=\"https://cdn-icons-png.flaticon.com/128/83/83522.png\" alt=\"Java Projects Logo\" width=\"42\" height=\"30\" /\u003e\n\n## 🌐 Idiomas\n[![Português](https://img.shields.io/badge/Português-green)](https://github.com/SamuelRocha91/delivery_back/blob/main/README.md) \n[![Español](https://img.shields.io/badge/Español-yellow)](https://github.com/SamuelRocha91/delivery_back/blob/main/README_es.md) \n[![English](https://img.shields.io/badge/English-blue)](https://github.com/SamuelRocha91/delivery_back/blob/main/README_en.md) \n[![Русский](https://img.shields.io/badge/Русский-lightgrey)](https://github.com/SamuelRocha91/delivery_back/blob/main/README_ru.md) \n[![中文](https://img.shields.io/badge/中文-red)](https://github.com/SamuelRocha91/delivery_back/blob/main/README_ch.md) \n[![العربية](https://img.shields.io/badge/العربية-orange)](https://github.com/SamuelRocha91/delivery_back/blob/main/README_ar.md)\n\nEste repositório representa o backend em Rails para uma aplicação de delivery, incluindo uma interface de gerenciamento de dados para usuários com as roles admin e developer.\n\n![Ilustração de uso da interface do admin](./assets/admin.gif)\n\n---\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e🔗 Repositórios Relacionados\u003c/strong\u003e\u003c/summary\u003e\n\n  - 🛒 [Consumy Application](https://github.com/SamuelRocha91/consumy) - Aplicação do consumidor\n  - 👨‍💼 [Seller Application](https://github.com/SamuelRocha91/seller_application) - Aplicação do vendedor\n  - 💲 [Paymenty API](https://github.com/SamuelRocha91/paymenty) - API de pagamento\n\n\u003c/details\u003e\n\n---\n\n## \u003ch2\u003e📚 Conceitos e Gems Utilizadas\u003c/h2\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e🔍 Clique para expandir os detalhes das Gems e Conceitos\u003c/strong\u003e\u003c/summary\u003e\n\n- **Processos em Background**: Utilização do **Sidekiq** para o processamento assíncrono de tarefas. O **Redis** é utilizado como fila de armazenamento para essas tarefas.\n  \n- **Paginação**: Implementação de paginação para listagem de recursos utilizando a gem **Kaminari**.\n\n- **Testes com RSpec e Shoulda Matchers**: Utilização de **RSpec** para escrever testes de unidade, integração e funcionalidade. \n\n- **Cobertura de Testes com SimpleCov**: Integração com a gem **SimpleCov** para realizar análises de cobertura de código.\n\n- **Soft Delete com Discard**: Implementação de exclusão suave (soft delete) com a gem **Discard**.\n\n- **Bullet para Detecção de N+1 Queries**: A gem **Bullet** é utilizada para detectar e prevenir problemas de desempenho como **N+1 queries**.\n\n- **Anonimização de Dados**: Aplicação de técnicas para anonimizar dados sensíveis, garantindo a conformidade com normas de privacidade e segurança, como a **LGPD**.\n\n- **API RESTful**: Desenvolvimento de uma API **RESTful** que segue os princípios de arquiteturas de software para permitir uma comunicação eficiente entre o backend e o frontend.\n\n- **Swagger**: Documentação automática da API utilizando a gem **Rswag** (baseada no Swagger).\n\n- **Docker**: Opção de containerização utilizando **Docker** para facilitar o desenvolvimento, teste e deployment.\n\n- **Manipulação de Imagens**: Utilização da gem **ImageProcessing** para manipulação de imagens, como redimensionamento e compressão.\n\n- **WebSockets e SSE**: Implementação de comunicação em tempo real usando **WebSockets**.\n\n- **Cálculo de Distância**: Utilização da gem **Geocoder** para implementar o cálculo de distância entre o cliente e o estabelecimento comercial.\n\n- **Threads**: Uso de **threads** para melhorar a concorrência e o desempenho da aplicação em operações paralelas.\n\n- **Gerenciamento de Sessão e Autenticação**: Implementação de autenticação de usuários com **Devise** e autenticação via **JWT**.\n\n- **Controle de CORS**: Utilização da gem **rack-cors** para gerenciar as permissões de **CORS**.\n\n- **Máquinas de Estado com State Machines**: Utilização da gem **state_machines-activerecord** para implementação de **máquinas de estado** nos modelos ActiveRecord.\n\n- **Faraday para Consumo de APIs Externas**: Integração com serviços externos utilizando a gem **Faraday**.\n\n- **Automação de Tarefas e DevOps**: A estrutura **DevOps** é suportada por ferramentas como **Sidekiq** e **Docker**.\n\n\u003c/details\u003e\n\n---\n\n## \u003ch2\u003e⚙️ Setup do Projeto\u003c/h2\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e🛠️ Com Docker\u003c/strong\u003e\u003c/summary\u003e\n\n  ### Pré-requisitos\n\n  - Certifique-se de ter o Docker e o Docker Compose instalados em sua máquina.\n  - [Docker](https://docs.docker.com/get-docker/)\n  - [Docker Compose](https://docs.docker.com/compose/install/)\n\n  ### Configuração\n\n  1. Clone os repositórios relacionados:\n\n     ```\n     git clone https://github.com/SamuelRocha91/consumy.git\n     git clone https://github.com/SamuelRocha91/seller_application.git\n     git clone https://github.com/SamuelRocha91/paymenty.git\n     git clone https://github.com/SamuelRocha91/delivery_back.git\n     ```\n\n  2. Baixe o arquivo `docker-compose.yml`:\n\n     - [Baixar docker-compose.yml](https://drive.google.com/file/d/1kzs-DJGCvYImBQAqr1GI-zwoNha_b8tA/view?usp=drive_link)\n\n  3. Na raiz do projeto, execute o seguinte comando:\n\n     ```sh\n     docker-compose up --build\n     ```\n\n  4. Clique em \"RUN PENDING MIGRATES\" na aplicação back-end.\n\n  5. Entre no container do back-end e rode as seeds:\n\n     ```sh\n     docker exec -it nomeDoContainerBackEnd /bin/sh \n     rails db:seed\n     ```\n\n  6. Configure as variáveis de ambiente:\n\n     ```sh\n     JWT_SECRET_KEY=xxxxxxxxxxxxxxxxxxxxx\n     ```\n\n  7. Reinicie os containers para as variáveis serem carregadas.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e🛠️ Sem Docker\u003c/strong\u003e\u003c/summary\u003e\n\n  ### Pré-requisitos\n\n  - Certifique-se de ter o Redis e o Sidekiq configurados e rodando localmente.\n  \n  - Instale as dependências do R:\n\n     ```sh\n     install.packages(\"FactoMineR\")\n     install.packages(\"ggplot2\")\n     install.packages(\"reshape2\")\n     ```\n\n  ### Instalação das Dependências\n\n  ```sh\n  bundle install\n  ```\n\n  ### Configurar o Banco de Dados\n\n  Crie o banco de dados e execute as migrações:\n\n  ```sh\n  rails db:create\n  rails db:migrate\n  ```\n\n  ### Iniciar o Servidor Local\n\n  ```sh\n  rails server\n  ```\n\n  ### Executar Testes\n\n  ```sh\n  bundle exec rspec\n  ```\n\n  ### Iniciar Redis e Sidekiq\n\n  ```sh\n  redis-server\n  bundle exec sidekiq\n  ```\n\n\u003c/details\u003e\n\n---\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e📝 Outros projetos\u003c/strong\u003e\u003c/summary\u003e\n\n  - 📏 [React Precision Application](https://github.com/SamuelRocha91/precisionReactApplication) - Interface de cadastro de medições de gás e de água\n  - 🤖 [Node API](https://github.com/SamuelRocha91/apiMeasureWaterAndGas) - Api de medição e cadastro de consumo\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamuelrocha91%2Fdelivery_back","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamuelrocha91%2Fdelivery_back","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamuelrocha91%2Fdelivery_back/lists"}