# Suporte — Arquitetura

> O módulo tem **duas metades**: uma **viva** (página de contato do
> fornecedor, 1 rota) e uma **morta** (sistema de tickets, 0 rotas).

---

## 1. Fluxo da implementação viva

```
Navegador
   ▼
GET /cms/suporte   (rota 'informacoes-instituicao', middleware check.logged)
   ▼
Admin\MainController@about
   │  return view('admin.layouts.about');
   ▼
resources/views/admin/layouts/about.blade.php
   │  @inject('dadosFornecedor', 'App\Http\Model\Prefecture\Supplier')
   │  $fornecedor = $dadosFornecedor->where('fornecedor_ativo', true)->first();
   ▼
App\Http\Model\Prefecture\Supplier  →  tabela suppliers
```

Não há Repository, Request, Policy nem auditoria nesse caminho.

## 2. Fluxo da implementação órfã (sistema de tickets)

```
(rota inexistente — nenhum ponto de entrada)
   ▼
Prefecture\SupportController
   ├─ index()             Support::all()                       → view 'prefecture.support.index'
   ├─ create()            SupportCategory::all()               → view 'prefecture.support.create'
   ├─ show($id)           Support::find($id)                  → view 'prefecture.support.show'
   └─ enviarEmail(Request $request)
        ├─ $this->_validate($request)      (assunto, descricao)
        ├─ Configuration::where('key','email_suporte')   → destinatário
        ├─ Configuration::where('key','titulo_site')     → nome da prefeitura
        ├─ $protocolo = strtoupper(substr(str_slug($categoria->name),0,2)) . (Support::max('id')+1) . date('Y')
        ├─ DB::transaction( fn () => Support::create($data) )
        ├─ Mail::send('prefecture.emails.support.email_admin', ...)   → suporte
        ├─ Mail::send('prefecture.emails.support.email_user',  ...)   → usuário
        └─ activity()->withProperty('Detalhe', ...)->log('Página de suporte')
   ▼
App\Http\Model\Prefecture\Support        → tabela supports
App\Http\Model\Prefecture\SupportCategory → tabela supports_categories
```

## 3. Diagrama das duas metades

```
                     ┌──────────────────────────────────────────┐
                     │  MÓDULO "suporte" (modulos.id = 9)      │
                     └───────────────┬──────────────────────────┘
                                     │
             ┌───────────────────────┴────────────────────────┐
             │                                                │
   ┌─────────▼──────────┐                        ┌────────────▼────────────┐
   │ IMPLEMENTAÇÃO VIVA │                        │ IMPLEMENTAÇÃO ÓRFÃ     │
   │ GET /cms/suporte   │                        │ SEM ROTAS               │
   │ Admin\MainController│                       │ Prefecture\SupportController
   │   @about            │                        │ Support / SupportCategory
   │ admin.layouts.about│                        │ prefecture/support/**
   └─────────┬──────────┘                        └────────────┬────────────┘
             │                                                │
             │  depende de                                   │  tabela
             ▼                                                ▼
   ┌─────────────────────┐                        ┌────────────────────────┐
   │ módulo "fornecedores"│                       │ supports              │
   │ Supplier (ativo)     │                       │ supports_categories   │
   └─────────────────────┘                        └────────────────────────┘
```

## 4. Classes envolvidas

### 4.1 Implementação viva

| Classe | Caminho | Papel |
|---|---|---|
| `Admin\MainController` | `v6/app/Http/Controllers/Admin/MainController.php` | `about()` renderiza a página de suporte |
| `App\Http\Model\Prefecture\Supplier` | `v6/app/Http/Model/Prefecture/Supplier.php` | Fonte do dado (fornecedor ativo) |
| `App\Http\Model\Admin\Modulos` | `v6/app/Http/Model/Admin/Modulos.php` | Registro do módulo (id 9) |
| `App\Http\Model\Admin\Resource` | `v6/app/Http/Model/Admin/Resource.php` | **Nenhum** recurso `suporte` cadastrado |

### 4.2 Implementação órfã

| Classe | Caminho | Papel |
|---|---|---|
| `Prefecture\SupportController` | `v6/app/Http/Controllers/Prefecture/SupportController.php` | CRUD + envio de e-mail do ticket |
| `App\Http\Model\Prefecture\Support` | `v6/app/Http/Model/Prefecture/Support.php` | `supports`; relações `users()` e `category()` |
| `App\Http\Model\Prefecture\SupportCategory` | `v6/app/Http/Model/Prefecture/SupportCategory.php` | `supports_categories` |
| `App\Prefecture\Configuration` | `v6/app/Http/Model/Prefecture/Configuration.php` | `email`, `email_suporte`, `titulo_site` |
| `App\Admin\User` | `v6/app/Http/Model/Admin/User.php` | Usuário logado (importado e **não usado** no controller) |

### 4.3 Middleware e helpers

| Item | Caminho | Papel |
|---|---|---|
| `check.logged` | `v6/app/Http/Middleware/CheckLogged.php` | Exige sessão; redireciona ao dashboard |
| `flash()` | `v6/app/Library/Helper/appHelpers.php` / `laralabs/toaster` | Mensagens de sucesso/erro |
| `activity()` | `spatie/laravel-activitylog` | Registro de auditoria (só no controller órfão) |

---

## 5. Dependências externas

| Pacote | Versão | Uso |
|---|---|---|
| `laravel/framework` | `5.5.*` | rotas, Eloquent, Mail, view |
| `laravelcollective/html` | `^5.5` | `Form::` nos Blades do sistema de tickets |
| `laralabs/toaster` | `^2.0` | `flash()->success()/error()` |
| `spatie/laravel-activitylog` | `^2.8` | auditoria (implementação órfã) |
| `intervention/image` | (via `FileTrait`) | `phonefix`/`phone` no CSS do telefone |

---

## 6. Onde o módulo é consumido

| Consumidor | Dependência | Onde |
|---|---|---|
| Menu do AdminLTE | `route('informacoes-instituicao')` | `v6/resources/views/vendor/adminlte/page.blade.php:302-309` |
| `Admin\MainController@about` | view `admin.layouts.about` | — |
| `admin.layouts.about` | `App\Http\Model\Prefecture\Supplier` | `@inject` |
| views `prefecture/support/**` | `route('suporte.*')`, `route('email')` | **rotas inexistentes** |
| Portal público | **nada** | — |

---

## 7. Mapa de arquivos

```
app/Http/Controllers/Admin/MainController.php        (about)
app/Http/Controllers/Prefecture/SupportController.php (órfão)
app/Http/Model/Prefecture/Supplier.php
app/Http/Model/Prefecture/Support.php
app/Http/Model/Prefecture/SupportCategory.php
app/Http/Model/Prefecture/Configuration.php
app/Http/Middleware/CheckLogged.php

resources/views/admin/layouts/about.blade.php         (ativa)
resources/views/prefecture/support/
├── index.blade.php     (órfã)
├── create.blade.php    (órfã)
├── form.blade.php      (órfã)
├── show.blade.php      (órfã)
├── support.blade.php   (órfã — layout do portal, outro conceito)
└── tutorial.blade.php  (órfã — layout do portal, outro conceito)

resources/views/prefecture/emails/support/
├── email_admin.blade.php
└── email_user.blade.php

database/migrations/2018_12_26_140420_create_supports_categories_table.php
database/migrations/2018_12_26_140430_create_supports_table.php
database/seeds/SupportCategorySeeder.php
routes/basepro.php:39
```
