{"id":29178364,"url":"https://github.com/luinedev/url-encurtador-fullstack","last_synced_at":"2026-04-10T11:32:51.733Z","repository":{"id":301643597,"uuid":"1009902056","full_name":"LuineDEV/url-encurtador-fullstack","owner":"LuineDEV","description":"Aplicação de encurtador de URL full-stack construída com Python (FastAPI), React e orquestração de containers com Docker.","archived":false,"fork":false,"pushed_at":"2025-06-27T23:38:12.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-28T00:26:29.920Z","etag":null,"topics":["api-rest","docker","docker-compose","fastapi","full-stack","mysql","mysql-database","python","react","url-shortener"],"latest_commit_sha":null,"homepage":"","language":"Python","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/LuineDEV.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,"zenodo":null}},"created_at":"2025-06-27T23:30:40.000Z","updated_at":"2025-06-27T23:45:38.000Z","dependencies_parsed_at":"2025-06-28T00:26:38.166Z","dependency_job_id":"796ecd7a-2f18-40eb-ad4c-4f7ce27855ce","html_url":"https://github.com/LuineDEV/url-encurtador-fullstack","commit_stats":null,"previous_names":["luinedev/url-encurtador-fullstack"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LuineDEV/url-encurtador-fullstack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuineDEV%2Furl-encurtador-fullstack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuineDEV%2Furl-encurtador-fullstack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuineDEV%2Furl-encurtador-fullstack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuineDEV%2Furl-encurtador-fullstack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LuineDEV","download_url":"https://codeload.github.com/LuineDEV/url-encurtador-fullstack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuineDEV%2Furl-encurtador-fullstack/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263019621,"owners_count":23400934,"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":["api-rest","docker","docker-compose","fastapi","full-stack","mysql","mysql-database","python","react","url-shortener"],"created_at":"2025-07-01T18:46:09.116Z","updated_at":"2026-04-10T11:32:51.700Z","avatar_url":"https://github.com/LuineDEV.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Encurtador de URL Full-stack (`url-encurtador-fullstack`)\n\n![Status](https://img.shields.io/badge/status-concluído-green)\n![Python](https://img.shields.io/badge/Python-3.11-blue?logo=python\u0026logoColor=white)\n![FastAPI](https://img.shields.io/badge/FastAPI-blue?logo=fastapi\u0026logoColor=white)\n![React](https://img.shields.io/badge/React-18-blue?logo=react\u0026logoColor=white)\n![Docker](https://img.shields.io/badge/Docker-blue?logo=docker\u0026logoColor=white)\n![MySQL](https://img.shields.io/badge/MySQL-8.0-blue?logo=mysql\u0026logoColor=white)\n\nUm serviço completo de encurtamento de URLs, construído com uma arquitetura moderna e desacoplada. Este projeto demonstra a criação de uma API RESTful robusta com FastAPI, um frontend reativo com React, e a orquestração de serviços com Docker Compose, seguindo as melhores práticas de desenvolvimento.\n\n## 🎯 Sobre o Projeto\n\nO objetivo deste projeto foi construir uma aplicação web full-stack funcional e escalável, simulando um ambiente de desenvolvimento profissional. A arquitetura foi projetada para ser modular, com uma clara separação de responsabilidades entre o frontend, o backend e o banco de dados, todos executando em containers Docker isolados.\n\n## ✨ Features Principais\n\n-   🔗 **Encurtamento de URL:** Gera um código curto e único para qualquer URL longa.\n-   ✏️ **Apelidos Customizados:** Permite que os usuários escolham seus próprios apelidos para os links (ex: `meu-link-secreto`).\n-   📊 **Analytics de Cliques:** Rastreia e exibe o número de vezes que cada link encurtado foi acessado.\n-   🚀 **Redirecionamento Rápido:** Utiliza redirecionamentos HTTP eficientes (`302 Found`) para garantir a contagem de cliques e uma boa experiência de usuário.\n-   🔒 **Segurança:** As configurações sensíveis (como senhas de banco de dados) são gerenciadas através de variáveis de ambiente, seguindo as melhores práticas de segurança.\n\n## 🛠️ Tecnologias Utilizadas\n\n| Camada      | Tecnologia                                                                                                             |\n| :---------- | :--------------------------------------------------------------------------------------------------------------------- |\n| **Backend** | Python 3.11, FastAPI, SQLAlchemy, Uvicorn, Pydantic                                                                    |\n| **Frontend**| React, Vite, JavaScript (JSX), CSS                                                                                     |\n| **Banco de Dados**| MySQL 8.0                                                                                                              |\n| **Infra \u0026 DevOps** | Docker, Docker Compose, Nginx                                                                                        |\n\n## 📂 Estrutura de Pastas\n\nO projeto é organizado em dois diretórios principais, representando a arquitetura desacoplada:\n\n```\nurl-encurtador-fullstack/\n├── url_shortener/          # Projeto Backend (API FastAPI)\n└── url-shortener-frontend/ # Projeto Frontend (React)\n```\n\n## 🚀 Como Rodar o Projeto Localmente\n\nEste projeto é 100% containerizado, tornando sua execução extremamente simples.\n\n### Pré-requisitos\n-   [Docker](https://www.docker.com/products/docker-desktop/)\n-   [Docker Compose](https://docs.docker.com/compose/) (já vem com o Docker Desktop)\n-   [Git](https://git-scm.com/)\n\n### Passos para Execução\n\n1.  **Clone este repositório:**\n    ```bash\n    git clone [https://github.com/inlus/url-encurtador-fullstack.git](https://github.com/inlus/url-encurtador-fullstack.git)\n    cd url-encurtador-fullstack\n    ```\n\n2.  **Configure as Variáveis de Ambiente do Backend:**\n    -   Navegue até a pasta do backend: `cd url_shortener`.\n    -   Copie o arquivo de exemplo `.env.example` para um novo arquivo chamado `.env`.\n        ```bash\n        cp .env.example .env\n        ```\n    -   Abra o arquivo `.env` e defina uma senha segura para `MYSQL_PASSWORD`.\n\n3.  **Suba os Containers:**\n    -   Ainda na pasta `url_shortener/`, execute o Docker Compose. O comando precisa ser rodado desta pasta para que ele encontre o `docker-compose.yml`.\n        ```bash\n        docker compose up --build\n        ```\n    -   Este comando irá construir as imagens e iniciar os 3 containers (API, Banco de Dados e Frontend). Aguarde até que os logs se estabilizem.\n\n4.  **Acesse a Aplicação:**\n    -   Abra seu navegador e acesse a interface do usuário: [**http://localhost:8080**](http://localhost:8080)\n    -   A documentação interativa da API (gerada pelo FastAPI/Swagger) estará disponível em: [**http://localhost:8000/docs**](http://localhost:8000/docs)\n\n## 🔀 Endpoints da API\n\nAqui estão os principais endpoints disponíveis:\n\n| Método | Rota                  | Descrição                                         |\n| :----- | :-------------------- | :------------------------------------------------ |\n| `POST` | `/shorten`            | Cria uma nova URL encurtada (normal ou customizada). |\n| `GET`  | `/{short_code}`       | Redireciona para a URL longa correspondente.      |\n| `GET`  | `/stats/{short_code}` | Retorna os detalhes e estatísticas de um link.      |\n\n---\n\nFeito por **[Luis Felipe Costa]**.\n\n[https://www.linkedin.com/in/luis-felipe-costa-pedro/] | [inlusive22@gmail.com]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluinedev%2Furl-encurtador-fullstack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluinedev%2Furl-encurtador-fullstack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluinedev%2Furl-encurtador-fullstack/lists"}