# Redes Sociais — Resumo Executivo

> **Versão analisada:** `v6` (também existe na `v5`)
> **Slug do módulo:** `redes-sociais` (tabela `modulos`, id 29, `status = false` — desativado por padrão)
> **Natureza:** Ambos (CMS + Portal público), com exibição apenas em cabeçalho/rodapé
> **Estado:** migrado v5 -> v6

---

## 1. Objetivo

O módulo gerencia os **links das redes sociais oficiais da prefeitura** (Facebook, Instagram, YouTube, X/Twitter etc.). No CMS, o operador cadastra cada rede com nome, ícone, URL, posição de exibição e estado ativo/inativo. No portal, as redes são renderizadas como ícones no cabeçalho e/ou no rodapé, conforme a posição escolhida.

## 2. Efeito / Impacto

| Faixa | Efeito |
|---|---|
| Cidadão | Acesso direto aos canais oficiais da prefeitura a partir do cabeçalho e do rodapé de todas as páginas do portal |
| Prefeitura (CMS) | Cadastro e reordenação drag-and-drop das redes; ativação/desativação imediata |
| Transparência e legalidade | Publicidade dos canais oficiais de comunicação da instituição |
| Operação técnica | Um único `Content` por rede; o portal lê a mesma tabela a partir de 8 templates diferentes |

## 3. Comportamento

- Cada rede é um `contents` da categoria `category_contents` de `slug = 'rede-social'` (id 26).
- Campos usados: `title` (nome exibido), `icon` (classe CSS do ícone), `status` (ativo), `order` (posição na listagem do CMS), `position_id` (onde exibir: 1 Cabeçalho, 2 Rodapé, 3 Ambos).
- A URL **não** fica em `contents`: é gravada na tabela `links` (relação `linksUnique`), junto com a flag `isBlank` (“Abrir em nova guia”).
- Somente redes com `status = true` são exibidas no portal.
- Redes com `position_id = 1` (Cabeçalho) não aparecem no rodapé; redes com `position_id = 2` (Rodapé) não aparecem no cabeçalho; `3` (Ambos) aparece nos dois.
- O módulo do CMS está registrado como **desativado** (`modulos.status = false`).

## 4. Como o Usuário Interage

**Operador (CMS):** a lista é alcançada por `Informações da Instituição` (`/cms/configuracoes/editar/configuracoes`) -> botão “Redes Sociais”, que leva a `/cms/conteudos/rede-social`. A tabela mostra ID, Título, Status e Ações; o botão “Cadastrar Rede Social” abre o formulário; as linhas podem ser reordenadas arrastando (jQuery UI sortable) com gravação via `POST /cms/ajust-banners`; o botão de status alterna ativo/inativo via `POST /cms/set-status`.

**Cidadão (portal):** ícones no cabeçalho (modelos 1, 2, 4, 5, 6) e no rodapé (modelos 1, 2, 3, 4, 6 e o bloco configurável `modelo5`). Não há página pública de redes sociais.

## 5. Detalhes e Particularidades Técnicas

- Camadas: `Route` -> `ContentController`/`DatatableController` -> `ContentRequest` -> `Content` + `Link` -> `contents`/`links` (view `rede_social` no CMS).
- O CMS lê a view SQL `rede_social` (5 colunas, incluindo `status_name` traduzido); o portal lê `contents` diretamente, em **8 templates distintos**, cada um com sua própria query inline (`@inject('redes', 'App\Prefecture\Content')`).
- Existe ainda um *view composer* (`FooterServiceProvider`) que entrega a coleção `$socialNetworkFooter` para os layouts 1 a 5 e para `components.footer`.
- O campo `icon` recebe classes CSS do Font Awesome (ex.: `fab fa-facebook`); o formulário usa o plugin `fontawesome-iconpicker`.
- `modulos.status = false` desliga o módulo no dashboard/sidebar, mas **não** impede a exibição das redes no portal.

## 6. Estrutura de Dados

| Objeto | Papel |
|---|---|
| `contents` | título, ícone, status, ordem e `position_id` de cada rede |
| `links` | URL (`link`) e `isBlank` de cada rede (1:1 com `contents`) |
| `category_contents` | categoria `rede-social` (id 26) |
| `positions` | catálogo de posições (Cabeçalho, Rodapé, Ambos) |
| `rede_social` (view SQL) | `value`, `titulo`, `status_name`, `id`, `status` — usada pelo DataTable do CMS |

Migrations: `v6/database/migrations/2023_04_10_161440_create_view_to_rede-social.php`,
`v6/database/migrations/2023_08_17_094440_position_table_with_data.php`,
`v6/database/migrations/2023_08_17_094529_add_position_id_to_contents_table.php`.

## 7. Como Testar

- Cadastrar uma rede, ativá-la, conferir no cabeçalho e no rodapé do portal, desativar e confirmar o sumiço.
- Reordenar as linhas e conferir a persistência da ordem.
- Feature tests (v7) para: listagem do CMS, criação com validação, alternância de status, e renderização condicional por `position_id`.

## 8. Migração para Laravel Moderno

- Tabela dedicada `social_networks` (`name`, `icon`, `url`, `is_blank`, `position`, `active`, `sort_order`).
- `FormRequest` com regras por campo e `Policy` (`redes-sociais.create|edit|delete`).
- Endpoint público `GET /api/v1/redes-sociais` e views Blade com um único componente `<x-social-links />` incluído por todos os layouts, eliminando as 8 queries duplicadas.
- `enum SocialPosition: Cabeçalho, Rodapé, Ambos` e `enum SocialNetworkProvider` (opcional, para os brands do Font Awesome).

## 9. Resumo Geral

Redes Sociais é um módulo pequeno, mas muito replicado: um `Content` por rede, com o URL em `links` e o ícone em `contents.icon`. O CMS usa o CRUD genérico de conteúdos e um DataTable alimentado pela view SQL `rede_social`, com reordenação por drag-and-drop e chave de status. O portal, por sua vez, consulta a mesma tabela em oito templates diferentes (cabeçalho e rodapé de cada layout), o que é a maior dívida técnica do módulo: a lógica de “quais redes aparecem e onde” está replicada em código de view. Na v7, o caminho natural é um único componente Blade alimentado por uma API, com a posição e o estado como atributos do modelo.

---

## 10. Índice de rotas rápidas

| Contexto | URI | Nome da rota |
|---|---|---|
| CMS listagem | `/cms/conteudos/rede-social` | `listar-conteudo` (parâmetro `slug`) |
| CMS cadastro | `/cms/conteudos/cadastrar/rede-social` | `cadastrar-conteudo` |
| CMS edição | `/cms/conteudos/editar/rede-social/{id}` | `editar-conteudo` |
| CMS DataTable | `/cms/datatable/redes_sociais` | `redes_sociais` |
| CMS status | `/cms/set-status` | `set.status` |
| CMS reordenação | `/cms/ajust-banners` | `ajust.banners` |
| Portal | sem rota pública | — |

## Índice do dossiê

| Arquivo | Conteúdo |
|---|---|
| `00-RESUMO.md` | Este documento |
| `01-ARQUITETURA.md` | Camadas, classes e o diagrama de fluxo |
| `02-MODELAGEM.md` | Estrutura de dados detalhada |
| `03-ROTAS-E-CONTROLADORES.md` | Rotas, controllers, requests, resources |
| `04-VIEWS-E-UX.md` | Telas, componentes, JS, assets |
| `05-REGRAS-E-PORTABILIDADE.md` | Particularidades e armadilhas |
| `06-MIGRACAO-MODERNA.md` | Plano de reconstrução em Laravel moderno |
| `07-TESTES.md` | Estratégia e casos de teste |
| `08-GAPS-E-DIVIDAS.md` | Pendências, riscos, comparativo v5 vs v6 |
