{"id":36749350,"url":"https://github.com/peulearning/farm-manager-symfony","last_synced_at":"2026-01-12T12:42:22.710Z","repository":{"id":319944187,"uuid":"1080163506","full_name":"peulearning/farm-manager-symfony","owner":"peulearning","description":"Teste para Empresa DFranquias cujo objetivo e avaliar os conhecimentos para um desenvolvedor Web Full Stack. (Versão em Symfony) ","archived":false,"fork":false,"pushed_at":"2025-10-31T18:03:27.000Z","size":138,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-31T20:14:55.674Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","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/peulearning.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-21T00:54:54.000Z","updated_at":"2025-10-31T16:42:35.000Z","dependencies_parsed_at":"2025-10-21T04:34:29.756Z","dependency_job_id":null,"html_url":"https://github.com/peulearning/farm-manager-symfony","commit_stats":null,"previous_names":["peulearning/farm-manager-symfony"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/peulearning/farm-manager-symfony","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peulearning%2Ffarm-manager-symfony","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peulearning%2Ffarm-manager-symfony/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peulearning%2Ffarm-manager-symfony/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peulearning%2Ffarm-manager-symfony/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peulearning","download_url":"https://codeload.github.com/peulearning/farm-manager-symfony/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peulearning%2Ffarm-manager-symfony/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338983,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2026-01-12T12:42:21.962Z","updated_at":"2026-01-12T12:42:22.704Z","avatar_url":"https://github.com/peulearning.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🐄 Farm Manager — Sistema de Gestão de Fazendas e Gados\n\nProjeto desenvolvido como parte do **teste técnico para Full Stack Web Developer**.\nO sistema foi construído em **Symfony 6**, com foco em **boas práticas**, **organização de código**, e **regras de negócio claras e encapsuladas** nas entidades.\n\n---\n\n## 🚀 Tecnologias Utilizadas\n\n- **PHP 8.2+**\n- **Symfony 6 (WebApp)** — Estrutura MVC\n- **Doctrine ORM** — Mapeamento objeto-relacional\n- **Twig** — Templates e views\n- **Bootstrap** — Layout simples e responsivo\n- **KnpPaginatorBundle** — Paginação de dados\n- **Doctrine Fixtures** — Geração de dados fictícios\n- **MySQL 8.0**\n\n---\n\n## ⚙️ Instalação e Execução do Projeto\n\n### 1. Criar e configurar o projeto Symfony\n\n```bash\ncomposer create-project symfony/skeleton farm-manager-symfony\ncd farm-manager-symfony\n```\n\n### 2. Instalar Dependências Essenciais\n\n```\ncomposer require webapp\ncomposer require doctrine maker doctrine/migrations\ncomposer require symfony/validator symfony/form\ncomposer require knplabs/knp-paginator-bundle\ncomposer require --dev orm-fixtures\n```\n\n### 3. Configuração de Banco de dados\n\nNo arquivo .env\n```\nDATABASE_URL=\"mysql://root:root@127.0.0.1:3306/farm_manager?serverVersion=8.0\"\n```\n\n⚠️ Ajuste o usuário, senha e nome do banco de dados conforme sua configuração local.\n\n### 4. Criar o Schema do Banco de Dados\n\n```\nphp bin/console doctrine:database:create\nphp bin/console doctrine:migrations:migrate\n```\n\n---\n\n### 5. Populando Banco de Dados\n\n```\nphp bin/console doctrine:fixtures:load\n```\n\n---\n\n### 6. Rodar Servidor Local\n```\nsymfony server:start\n```\n\nAcesse: 👉 http://127.0.0.1:8000\n\n---\n\n## 🧩 7. Estrutura de Entidades e Relacionamentos\n\nO sistema é composto por três entidades principais:\n\n### 🧑‍⚕️ Veterinário\nResponsável por acompanhar e supervisionar as fazendas.\n\n| Campo | Tipo | Regras de Negócio |\n|--------|------|-------------------|\n| **id** | integer | Identificador único |\n| **crmv** | string | Deve ser único |\n| **nome** | string | Obrigatório |\n| **fazendas** | ManyToMany | Um veterinário pode atender várias fazendas |\n\n🔒 **Regra de Negócio:**\nNão pode existir mais de um veterinário com o mesmo CRMV (`@UniqueEntity`).\n\n---\n\n### 🏡 Fazenda\nRepresenta uma propriedade rural responsável pelos animais e supervisionada por veterinários.\n\n| Campo | Tipo | Regras de Negócio |\n|--------|------|-------------------|\n| **id** | integer | Identificador único |\n| **nome** | string | Único e obrigatório |\n| **tamanho** | float | Deve ser positivo |\n| **responsavel** | string | Obrigatório |\n| **veterinarios** | ManyToMany | Pode possuir vários veterinários |\n| **gados** | OneToMany | Contém vários animais (gados) |\n\n🔒 **Regra de Negócio:**\nCada fazenda deve ter um nome único e ao adicionar um gado, a fazenda é automaticamente associada.\n\n---\n\n### 🐄 Gado\nAnimal criado em uma fazenda, com dados de produção e condições de abate.\n\n| Campo | Tipo | Regras de Negócio |\n|--------|------|-------------------|\n| **id** | integer | Identificador único |\n| **codigo** | string | Único e obrigatório |\n| **leite** | float | Produção diária em litros |\n| **racao** | float | Consumo diário em kg |\n| **peso** | float | Peso em kg |\n| **dataNascimento** | date | Obrigatório |\n| **vivo** | boolean | Define se está vivo |\n| **dataAbate** | datetime (nullable) | Data do abate |\n| **fazenda** | ManyToOne | Associação obrigatória |\n\n🔒 **Regras de Negócio (método `podeSerAbatido()`):**\nUm animal pode ser abatido se atender **pelo menos uma** das condições:\n- Idade \u003e 5 anos\n- Leite \u003c 40 litros/dia\n- Leite \u003c 70 litros/dia **e** consome \u003e 50 kg de ração/dia\n- Peso \u003e 18 arrobas (1 arroba = 15 kg)\n\n---\n\n## 🧠 8. Regras de Negócio Implementadas\n\n| Entidade | Regra |\n|-----------|-------|\n| **Veterinário** | CRMV deve ser único |\n| **Fazenda** | Nome deve ser único |\n| **Gado** | Código deve ser único |\n| **Gado** | Um gado deve pertencer a uma fazenda obrigatoriamente |\n| **Gado** | Lógica de abate automática |\n| **Fazenda** | Adiciona ou remove gados e mantém vínculo bidirecional |\n| **Veterinário** | Pode estar vinculado a várias fazendas (ManyToMany) |\n\n---\n\n## 📊 9. Relatórios Implementados (Requisito 2.3)\n\nLocalizados na rota principal `/` e processados pelo **RelatorioController**.\n\n| Relatório | Descrição |\n|------------|------------|\n| 🩸 **Animais Abatidos** | Lista todos os gados com `vivo = false` |\n| 🥛 **Leite Produzido por Semana** | Soma total de `leite * 7` de todos os animais |\n| 🌾 **Ração Necessária por Semana** | Soma total de `racao * 7` de todos os animais |\n| 🐮 **Animais Jovens com Alto Consumo de Ração** | Gados com ≤ 1 ano e consumo \u003e 500 kg/semana |\n\nCada relatório é exibido em uma **view Twig** com design limpo e intuitivo.\n\n---\n\n## 🧩 10. Estrutura do Projeto\n\n```\nsrc/\n├── Controller/\n│ ├── VeterinarioController.php\n│ ├── FazendaController.php\n│ ├── GadoController.php\n│ └── RelatorioController.php\n├── Entity/\n│ ├── Veterinario.php\n│ ├── Fazenda.php\n│ └── Gado.php\n├── Form/\n│ ├── VeterinarioType.php\n│ ├── FazendaType.php\n│ └── GadoType.php\n├── Repository/\n│ ├── VeterinarioRepository.php\n│ ├── FazendaRepository.php\n│ └── GadoRepository.php\n└── DataFixtures/\n└── AppFixtures.php\n```\n\n\n---\n\n## 🧩 11. Padrões e Boas Práticas\n\n✅ **Clean Architecture:**\nAs entidades encapsulam as regras de negócio e o controller apenas orquestra as operações.\n\n✅ **Doctrine ORM + Repositórios customizados:**\nConsultas personalizadas e métodos reutilizáveis.\n\n✅ **Validação automática:**\nRegras declaradas via `Symfony\\Validator` e `UniqueEntity`.\n\n✅ **Feedback ao usuário:**\nMensagens amigáveis e visuais com Bootstrap e Flash Messages.\n\n✅ **Paginação com KnpPaginatorBundle:**\nMelhor desempenho em listagens extensas.\n\n---\n\n## 🧾 12. Rotas Principais\n\n| Entidade | Caminho | Método | Descrição |\n|-----------|----------|---------|------------|\n| Veterinários | `/veterinarios/` | GET | Listagem |\n| 〃 | `/veterinarios/new` | GET/POST | Criação |\n| Fazendas | `/fazendas/` | GET | Listagem |\n| 〃 | `/fazendas/new` | GET/POST | Criação |\n| Gados | `/gados/` | GET | Listagem |\n| 〃 | `/gados/new` | GET/POST | Criação |\n| Relatórios | `/` | GET | Tela inicial com relatórios |\n\n---\n\n## 🧮 13. Cálculos Implementados\n\n| Método | Descrição | Exemplo |\n|---------|------------|----------|\n| `getLeiteSemana()` | Leite diário × 7 | 15L/dia → 105L/semana |\n| `getRacaoSemana()` | Ração diária × 7 | 60kg/dia → 420kg/semana |\n| `getPesoArroba()` | Peso ÷ 15 | 450kg → 30 arrobas |\n| `getIdadeAnos()` | Idade atual em anos | 2017 → 8 anos |\n\n---\n\n## 🗂️ 14. Banco de Dados — Modelo Lógico\n\n```\nVeterinario (id, nome, crmv)\n⬋⬊ ManyToMany\nFazenda (id, nome, tamanho, responsavel)\n⬋⬊ OneToMany\nGado (id, codigo, leite, racao, peso, dataNascimento, vivo, dataAbate, fazenda_id)\n```\n\n\n---\n\n## 🧾 15. Autor\n\n- 👨‍💻 **Pedro Henrique Araújo Mattos Ribeiro** \n- 💡 Desenvolvedor Web Full Stack\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeulearning%2Ffarm-manager-symfony","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeulearning%2Ffarm-manager-symfony","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeulearning%2Ffarm-manager-symfony/lists"}