{"id":15612139,"url":"https://github.com/fabianoleittes/mob2con-challenge","last_synced_at":"2026-04-13T16:32:05.467Z","repository":{"id":54810915,"uuid":"302087997","full_name":"fabianoleittes/mob2con-challenge","owner":"fabianoleittes","description":"Backend engineer challenge","archived":false,"fork":false,"pushed_at":"2024-05-01T16:37:51.000Z","size":119,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-04T15:49:28.957Z","etag":null,"topics":["docker","jwt-authentication","postgresql","rails","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/fabianoleittes.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":"2020-10-07T16:00:04.000Z","updated_at":"2024-05-01T16:37:56.000Z","dependencies_parsed_at":"2024-10-22T17:31:09.184Z","dependency_job_id":null,"html_url":"https://github.com/fabianoleittes/mob2con-challenge","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabianoleittes%2Fmob2con-challenge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabianoleittes%2Fmob2con-challenge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabianoleittes%2Fmob2con-challenge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabianoleittes%2Fmob2con-challenge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fabianoleittes","download_url":"https://codeload.github.com/fabianoleittes/mob2con-challenge/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246200322,"owners_count":20739566,"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":["docker","jwt-authentication","postgresql","rails","ruby"],"created_at":"2024-10-03T06:21:59.434Z","updated_at":"2026-04-13T16:32:00.443Z","avatar_url":"https://github.com/fabianoleittes.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mob2ConLabs API\n\n![Tests \u0026 Linters](https://github.com/fabianoleittes/mob2con-challenge/workflows/Tests%20\u0026%20Linters/badge.svg?branch=main) [![Maintainability](https://api.codeclimate.com/v1/badges/6b3d2fa66f0fb2408c63/maintainability)](https://codeclimate.com/github/fabianoleittes/mob2con-challenge/maintainability)\n\n\n\u003ch4 align=\"center\"\u003e\n\t🚧  Mob2ConLabs API em construção 🚀 🚧\n\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n \u003ca href=\"#-sobre-o-projeto\"\u003eSobre\u003c/a\u003e •\n \u003ca href=\"#-funcionalidades\"\u003eFuncionalidades\u003c/a\u003e •\n \u003ca href=\"#-como-executar-o-projeto\"\u003eComo executar\u003c/a\u003e •\n \u003ca href=\"#-tecnologias\"\u003eTecnologias\u003c/a\u003e\n •\n \u003ca href=\"#-autor\"\u003eAutor\u003c/a\u003e •\n \u003ca href=\"#user-content--licença\"\u003eLicença\u003c/a\u003e\n\u003c/p\u003e\n\n\n## 💻 Sobre o projeto\n\nMob2ConLabs - é um API Restful feita como teste para a vaga de backend engineer.\n\n---\n\n## ⚙️ Funcionalidades\n\n- [x] RESTful API\n- [x] JSON Schema implementation\n- [x] RSpec testing\n- [x] Setup scripts\n- [x] Usage of http methods/verbs\n- [x] Structured endpoints\n- [x] Return appropriate status code\n- [x] JWT Token Based Authentication\n- [x] API versioning\n- [x] API subdomain\n- [x] O administrador pode gerenciar Redes Varejistas (crud) para dar entrada em novos clientes.\n\n- [x] O administrador pode pesquisar redes varejistas pelo nome para ter acesso as informações.\n\n- [x] O administrador pode gerenciar visiantes (crud) de cada rede para que mais pessoas utilizem o sistema.\n\n- [x] O administrador pode enviar fotos dos visitantes para identificá-los.\n\n- [x] O administrador pode pesquisar visitantes por nome para ter acesso as informações.\n\n- [x] Usuário da rede pode se deslogar no sistema.\n\n- [x] Usuário da rede pode fazer login\n\n- [x] Usuário da rede pode registrar entradas e saidas de visitantes.\n\n- [x] Usuário externo, não autenticado, pode ver o número total de redes e seus visitantes.\n\n---\n\n## 🚀 Como executar o projeto\n\nEste projeto é uma API Restful:\n1. Backend\n\n### Pré-requisitos\n\nAntes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:\n[docker](https://docs.docker.com/install/) e [docker compose](https://docs.docker.com/compose/install/)\n\n#### 🎲 Rodando a API (servidor)\n\n```bash\n\n# Clone este repositório\n$ git clone https://github.com/fabianoleittes/mob2con-challenge.git\n\n# Acesse a pasta do projeto no terminal/cmd\n$ cd mob2con-challenge\n\n# Instalando as dependências e Execute a aplicação em modo de desenvolvimento\n$ docker-compose up --build\n# O servidor inciará na porta:3000 - acesse http://api.dev.local:3000\n\n# Rodando dos testes\n$ docker-compose run --rm api bundle exec rspec\n\n# Criando simples dados para ambiente de development\n$ docker-compose run --rm api bundle exec rake dev:prime\n\n```\n\n## Endpoints\n\n### Login\n\n| URL / ENDPOINT          | VERB | DESCRIPTION      |\n| ----------------------- | ---- | ---------------- |\n| /v1/signup              | POST | Create user      |\n| /v1/auth/login          | POST | Generate token   |\n\n### Retail Chains\n| URL / ENDPOINT          | VERB | DESCRIPTION      |\n| ----------------------- | ---- | ---------------- |\n| /v1/admin/retail_chains | POST | Create Retail Chains      |\n| /v1/admin/retail_chains      | GET  | Return all Retail Chains |\n| /v1/admin/retail_chains/:id  | PUT  | Update Retail Chain |\n| /v1/admin/retail_chains/:id  | GET  | Show Retail Chain |\n| /v1/admin/retail_chains/:id  | DELETE  | Destroy Retail Chains |\n\n### Visitors\n\n| URL / ENDPOINT          | VERB | DESCRIPTION      |\n| ----------------------- | ---- | ---------------- |\n| /v1/admin/retail_chains/:id/visitors | POST | Create Visitor |\n| /v1/admin/retail_chains/:id/visitors      | GET  | Return all Visitors |\n| /v1/admin/retail_chains/:id/visitors:id  | PUT  | Update Visitor |\n| /v1/admin/retail_chains/:id/visitors/:id  | GET  | Show Visitor |\n| /v1/admin/retail_chains/:id/visitors/:id  | DELETE  | Destroy Visitor |\n\n### Visits\n\n| URL / ENDPOINT          | VERB | DESCRIPTION      |\n| ----------------------- | ---- | ---------------- |\n| /v1/visitors/:id/visits | POST | Create Visits     |\n| /v1/visitors/:id/visits | GET  | Return all Visits |\n\n### Summaries\n\n| URL / ENDPOINT          | VERB | DESCRIPTION      |\n| ----------------------- | ---- | ---------------- |\n| /v1/retail_chains/summaries | GET | Retail Chain summaries |\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://insomnia.rest/run/?label=Mob2Con%20Labs%20API\u0026uri=https%3A%2F%2Fraw.githubusercontent.com%2Ffabianoleittes%2Fvisitors-api%2Fmain%2FInsomnia.json\" target=\"_blank\"\u003e\u003cimg src=\"https://insomnia.rest/images/run.svg\" alt=\"Run in Insomnia\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 🛠 Tecnologias\n\nAs seguintes ferramentas foram usadas na construção do projeto:\n\n#### **API**  ([Ruby on Rails](https://rubyonrails.org/)  +  [PostgreSQL](https://www.postgresql.org/))\n\n-   **[rspec](https://github.com/rspec/rspec-rails)**\n-   **[Factory Bot](https://github.com/thoughtbot/factory_bot_rails)**\n-   **[Shoulda Matchers](https://github.com/thoughtbot/shoulda-matchers)**\n-   **[JWT](https://github.com/jwt/ruby-jwt)**\n-   **[ffaker](https://github.com/ffaker/ffaker)**\n-   **[Rack Cors](https://github.com/cyu/rack-cors)**\n\n\u003e Veja o arquivo  [Gemfile](https://github.com/fabianoleittes/mob2con-challenge/blob/main/Gemfile)\n\n#### Utilitários\n\n-   Conventional commits:  **[Commits](https://www.conventionalcommits.org/en/v1.0.0/)**\n-   Teste de API:  **[Insomnia](https://insomnia.rest/)**\n\n---\n\n## Autor\n\n\u003ca href=\"https://fabianoleittes.me/\"\u003e\n \u003cimg style=\"border-radius: 50%;\" src=\"https://avatars3.githubusercontent.com/u/279344?v=4\" width=\"100px;\" alt=\"\"/\u003e\n \u003cbr /\u003e\n \u003csub\u003e\u003cb\u003eFabiano Leite\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\n \u003cbr /\u003e\n\n[![Twitter Badge](https://img.shields.io/badge/-@fabianoleittes-1ca0f1?style=flat-square\u0026labelColor=1ca0f1\u0026logo=twitter\u0026logoColor=white\u0026link=https://twitter.com/fabianoleittes)](https://twitter.com/fabianoleittes) [![Linkedin Badge](https://img.shields.io/badge/-Fabiano-blue?style=flat-square\u0026logo=Linkedin\u0026logoColor=white\u0026link=https://www.linkedin.com/in/fabianoleittes/)](https://www.linkedin.com/in/fabianoleittes/)\n\n---\n\n## 📝 Licença\n\nEste projeto esta sobe a licença [MIT](./LICENSE).\n\nFeito com ❤️ por Fabiano Leite 👋🏽 [Entre em contato!](https://www.linkedin.com/in/fabianoleittes/)\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabianoleittes%2Fmob2con-challenge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffabianoleittes%2Fmob2con-challenge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabianoleittes%2Fmob2con-challenge/lists"}