# Redes Sociais — Gaps, Dívidas e Comparativo v5 -> v6

## 1. Bugs e erros conhecidos

| # | Achado | Evidência | Severidade |
|---|---|---|---|
| B1 | A reordenação por drag-and-drop não funciona: o JS coleta os elementos `.item-list`, mas as linhas do DataTable de redes sociais não recebem essa classe (ao contrário de banners/acesso rápido) | `v6/resources/views/prefecture/contents/rede-social/index.blade.php` vs `v6/public/assets/js/custom/contents/banners/datatable.js` | Alta (funcionalidade morta) |
| B2 | As permissões do seed (`redes-sociais.*`) não correspondem às avaliadas no código (`rede-social.*`) | `v6/database/seeds/RolesTableSeeder.php:84` vs `has_access(['rede-social.create'])` e `struct_views($data, 'rede-social')` | Média |
| B3 | `modulos.status = false` não desliga nada deste módulo: nenhuma view do módulo consulta `$modulos` | `v6/app/Providers/ModulosServiceProvider.php` (lista de views sem redes sociais) | Média (expectativa enganosa) |
| B4 | A lógica de “quem aparece onde” está replicada em ~11 templates, com a query repetida | `modelo1..6` + `default` | Média (manutenção) |
| B5 | O `modelo6` ficou fora do composer do `FooterServiceProvider` e faz a própria query | `v6/app/Providers/FooterServiceProvider.php:89-95` | Baixa |
| B6 | `isBlank` e `status` não são validados no servidor | `v6/app/Http/Requests/ContentRequest.php:182-191` | Baixa |
| B7 | URLs sem protocolo recebem `http://` forçado; o presenter e as views replicam a regra | `ContentPresenter::socialNetworkLink()` e as views | Baixa |
| B8 | A URL passa por `sanitizeLink(normalizeVideoLink($link))`, função genérica de vídeos que converte `https://` sem ponto em caminho interno | `v6/app/Http/Controllers/Prefecture/ContentController.php:600-607` e `:719` | Média |
| B9 | `Content::position()` é `hasOne` com chave não padrão (`'id', 'position_id'`), semanticamente `belongsTo` | `v6/app/Http/Model/Prefecture/Content.php:77` | Baixa |
| B10 | `AppTrait::reorder` atualiza um item por vez (N+1) | `v6/app/Http/Traits/AppTrait.php:741-750` | Baixa |
| B11 | A view SQL `rede_social` não expõe `icon`, `order` nem `position_id` | `v6/database/migrations/2023_04_10_161440_create_view_to_rede-social.php` | Baixa |

## 2. Funcionalidades incompletas ou mortas

| Item | Situação |
|---|---|
| Reordenação por drag-and-drop | Morta na prática (ver B1) |
| Módulo “Redes Sociais” no menu lateral do CMS | Não existe item em `v6/app/Providers/MenuServiceProvider.php`; o acesso é indireto, pelo botão “Informações da Instituição” |
| Página pública de redes sociais | Não existe rota, view nem breadcrumb |
| API de redes sociais | Não existe em `v6/routes/api.php` |
| Componente `components/inputs/icon-picker.blade.php` (lista de brands) | Existe no projeto (`v6/resources/views/components/inputs/icon-picker.blade.php`) mas **não** é usado pelo módulo, que usa o plugin `fontawesome-iconpicker` |
| Ícone da rede como imagem | Não existe: apenas classe CSS (`contents.icon`) |

## 3. Riscos de dados

| Risco | Detalhe |
|---|---|
| Redes sem registro em `links` | o portal acessa `$rede->linksUnique->link` sem checar nulo: erro 500 se a rede não tiver link |
| `links` é `hasOne` mas nada impede mais de um link por conteúdo | a consulta pode trazer o primeiro link arbitrariamente; a query do portal usa `with('linksUnique')` |
| Slug do conteúdo derivado do nome | duas redes com o mesmo nome colidem (`store`/`update` aplicam sufixos) |
| `contents.order` pode ficar com valores repetidos após a migração da v5 | a ordenação do rodapé depende dele |
| `position_id` nulo em registros antigos | a migration de 2023 preencheu 2 para a categoria 26, mas registros criados fora do CMS podem ficar nulos (aí aparecem em cabeçalho e rodapé, pois `!= 1` e `!= 2`) |

## 4. Estado atual no banco (`prefeituras_v5`)

| Consulta | Resultado |
|---|---|
| `select count(*) from rede_social` | 0 |
| `select id, slug, status from modulos where slug = 'redes-sociais'` | 29, `redes-sociais`, `false` |

Módulo desativado e sem dados: nada é exibido no portal hoje.

## 5. Perguntas em aberto para o negócio

1. O módulo deve continuar desativado por padrão (`modulos.status = false`) ou ser ativado?
2. Redes sociais devem ter imagem (logo) em vez de apenas o ícone?
3. Deve existir uma página pública “Redes Sociais” ou o portal continua mostrando apenas ícones?
4. O campo “Local” (posição) deve admitir mais posições (ex.: sidebar, home)?
5. A ordenação definida no CMS deve valer para cabeçalho e rodapé?
6. Deve haver validação de URL com domínio permitido (redes oficiais) para evitar links indevidos?

## 5.1 Impacto por parte interessada

| Stakeholder | Impacto |
|---|---|
| Comunicação da prefeitura | Os canais oficiais exibidos hoje são apenas os que estão ativos; com o módulo desativado e sem registros, não há nenhum canal exibido |
| Operação do CMS | O operador pode não encontrar o módulo (não há item no menu lateral) e a reordenação não funciona |
| Equipe técnica | 11 consultas duplicadas em views; a correção de um layout não cobre os outros |

## 6. Mapa v5 -> v6

| Aspecto | v5 | v6 | Impacto |
|---|---|---|---|
| Categoria de conteúdo | `rede-social` (id 26) | idem | sem mudança |
| Slug do módulo no CMS | inexistente (só `resources`/`menu_orders`) | `modulos` id 29 `redes-sociais`, `status = false` | **novo na v6** |
| Resource/permissões | `resources.slug = rede-social` | `resources.slug = redes-sociais` (via `v6/database/seeds/AjustesMigracao.php:103-112`) | renomeado; ver B2 |
| View SQL | `v5/database/migrations/2023_04_10_161440_create_view_to_rede-social.php` | mesmo arquivo e mesmo SQL | sem mudança |
| Posições (`position_id`) | `v5/database/migrations/2023_08_17_094440_position_table_with_data.php` e `2023_08_17_094529_add_position_id_to_contents_table.php` | idem | sem mudança |
| Rodapé do `modelo5` | `v5/resources/views/portal/layouts/modelo5/layout/footer/social.blade.php` | idem | sem mudança |
| Rodapé do `modelo6` | `v5/resources/views/portal/layouts/modelo6/layout/footer/social.blade.php` (usava o composer `$socialNetworkFooter`) | `v6/resources/views/portal/layouts/modelo6/layout/footer/footer-social.blade.php` (query própria, com título “Redes sociais”) | **reescrito** |
| Footer composer | `v6/app/Providers/FooterServiceProvider.php` (layouts 1-5 e `components.footer`) | idem | o `modelo6` ficou de fora |
| Formulário do CMS | `v5/resources/views/prefecture/contents/rede-social/form.blade.php` | idem | na v6 o Font Awesome 5.15.4 é carregado por CDN no formulário |
| Ícones | Font Awesome local do AdminLTE (FA 4) | Font Awesome 5.15.4 por CDN + `fontawesome-iconpicker` | **mudança de biblioteca**: classes `fab fa-*` |
| Menu lateral do CMS | sem item | sem item | o acesso continua pelo botão “Informações da Instituição” |

### Itens da v5 que não existem na v6

- Nenhuma funcionalidade foi removida. A única partial alterada foi a do rodapé do `modelo6`, que
  foi reescrita (mesma informação, implementação própria).

### Itens novos na v6

- Tabela `modulos` e a chave liga/desliga por módulo (`ModulosServiceProvider`, `WidgetRegistry`).
- `resources.modulo_id` e `menu_orders.modulo_id` apontando para `modulos`.
- `components/inputs/icon-picker.blade.php` com a lista de brands do Font Awesome, disponível para
  outros módulos (não usado pelo módulo de redes sociais).

## 7. Checklist de migração v6 -> v7

| Passo | Ação | Verificação |
|---|---|---|
| 1 | Exportar `contents` da categoria `rede-social` + `links` correspondentes | contagem de redes |
| 2 | Exportar `position_id`, `status`, `order`, `icon` | planilha com todos os campos |
| 3 | Detectar redes sem `links` | relatório de inconsistências |
| 4 | Importar para `social_networks` | contagem idêntica |
| 5 | Recriar as permissões com prefixo único (`redes-sociais.*`) | `php artisan tinker` verificando `can()` |
| 6 | Criar o componente único `<x-social-links />` e incluir em todos os layouts | conferência visual em cada modelo |
| 7 | Desativar/ativar o módulo conforme decisão do negócio | `modulos` ou equivalente na v7 |
