# Resumo de Alterações e Padrões do Projeto Este documento resume as implementações realizadas no módulo de Mídias e estabelece os padrões a serem seguidos na criação de novos módulos. --- ## Padrões para Novos Módulos (Baseado no Módulo de Mídias) **1. Controle de Status (Ativo/Inativo):** - **Coluna:** `status` (TINYINT, default 0). - **Uso:** - `0`: Item **Ativo**. Visível e interage com todo o sistema. - `1`: Item **Inativo**. Visível apenas na listagem principal do seu módulo (com estilo visual atenuado, ex: `text-muted`), não interage com outras partes do sistema. Pode ser reativado. - **Interface:** A troca de status deve ser feita por um ícone de toggle (ligado/desligado) na coluna de ações da listagem principal. **2. Lixeira (Soft Delete):** - **Implementação:** Usar a trait `Illuminate\Database\Eloquent\SoftDeletes` do Laravel. - **Coluna:** A migração deve adicionar a coluna `deleted_at` usando `$table->softDeletes();`. - **Funcionalidade:** A ação de "excluir" um item deve realizar um soft delete. Os itens excluídos só devem ser visíveis em uma "Lixeira", que será implementada como um **modal** na tela de listagem. **3. Auditoria de Usuários (Userstamps):** - **Implementação:** Usar o Trait `App\Traits\Userstamps`. - **Colunas:** A migração deve adicionar as colunas `created_by`, `updated_by`, `deleted_by` (nullable, foreign keys para a tabela `users`). - **Uso:** Ao aplicar o Trait `Userstamps` a um Model, o preenchimento desses campos se torna automático, registrando qual usuário realizou cada ação. - **Relacionamentos:** O model deve conter os métodos de relacionamento `creator()`, `updater()`, e `destroyer()` para facilitar a busca das informações do usuário. --- ## Resumo Detalhado das Alterações no Módulo de Mídias ### Banco de Dados - Adicionada a coluna `status` à tabela `midias`. - Adicionada a coluna `deleted_at` para implementar o Soft Delete. - Adicionada a coluna `views_count` para o futuro contador de visualizações. - Adicionadas as colunas de auditoria `created_by`, `updated_by`, `deleted_by`. ### Backend - **Model `Midia.php`:** - Implementou as traits `SoftDeletes` e `Userstamps`. - Adicionou os relacionamentos `creator`, `updater`, `destroyer`. - **Trait `Userstamps.php`:** - Criado em `app/Traits/` para preencher automaticamente os campos de auditoria em eventos de `creating`, `updating` e `deleting`. - **Controller `MidiaController.php`:** - O método `destroy()` foi ajustado para executar apenas o soft delete. - Adicionado o método `toggleStatus()` para ativar/desativar um item. - O método `trash()` foi refatorado para funcionar como um endpoint de API, retornando um JSON com os itens da lixeira e os usuários que os excluíram. - Adicionado o método `restore()` para restaurar um item da lixeira. - **Rotas `web.php`:** - Adicionadas rotas para `toggleStatus`, `trash`, e `restore`. ### Frontend (`index.blade.php`) - A coluna "Status" foi removida. - Linhas de itens inativos (`status = 1`) agora recebem a classe `text-muted` para diferenciação visual. - O botão "Lixeira" foi convertido para abrir um modal. - Adicionado um modal `#trashModal` que é populado dinamicamente via AJAX: - Ao abrir, faz uma requisição para a rota `midias.trash`. - Exibe uma tabela com a mídia, data da exclusão, nome do usuário que excluiu e um botão para restaurar. - Adicionada a coluna "Views" (anteriormente "Analytics") com um ícone e um contador formatado. - Adicionado um modal `#analyticsModal` para visualização futura de analytics. - Corrigido o layout principal (`master.blade.php`) com a adição de `@stack('scripts')` para garantir que os scripts JavaScript das páginas funcionem corretamente. ### Testes - Criado o arquivo `MidiaModuleTest.php` com testes de feature para todas as novas funcionalidades (soft delete, restore, toggle status, etc.). - Testes antigos que verificavam a exclusão permanente de registros foram atualizados para `assertSoftDeleted`. --- ## Atualizações em 2025-10-12 06:15:00 ### Padronização do Módulo de Empresas Seguindo o padrão estabelecido pelo módulo de Mídias, as seguintes funcionalidades foram replicadas no módulo de Empresas: - **Banco de Dados:** - Adicionadas as colunas `status`, `deleted_at`, `created_by`, `updated_by`, `deleted_by` à tabela `empresas`. - **Backend:** - O model `Empresa` agora utiliza as traits `SoftDeletes` e `Userstamps` e possui os relacionamentos de auditoria. - O `EmpresaController` foi atualizado com os métodos `toggleStatus`, `trash` (endpoint JSON) e `restore`. - As rotas correspondentes foram adicionadas. - **Frontend:** - A view `empresas/index.blade.php` foi refatorada para incluir o botão de Lixeira com modal (via AJAX), o botão de toggle para status e o estilo `text-muted` para itens inativos. - As views de formulário (`create` e `edit`) foram traduzidas para Português (pt-BR). ### Funcionalidade de Busca (Módulo de Mídias) - **Backend:** - O método `index` do `MidiaController` agora aceita um parâmetro de busca (`q`) para filtrar mídias por título. - A paginação foi adicionada ao resultado da busca. - **Frontend:** - Um formulário de busca foi adicionado à tela de listagem de mídias. - Links de paginação foram adicionados e configurados para manter o filtro de busca ao navegar entre as páginas. --- ## Atualizações em 2025-10-12 12:30:00 ### Padronização Visual e Funcional (Módulo de Empresas) Dando continuidade à padronização, foram feitos ajustes visuais e funcionais nos formulários do módulo de Empresas. - **Padronização de Formulários:** - O cabeçalho (título e breadcrumb) das páginas de criação e edição foi atualizado para incluir ícones, seguindo o padrão do módulo de Mídias. - Os botões de submissão ("Salvar", "Cancelar") foram agrupados e receberam ícones para manter a consistência visual com o resto da aplicação. - **Máscara de Entrada para Telefone:** - Foi implementada uma máscara de entrada no campo de telefone para formatar o número dinamicamente, aceitando formatos de telefone fixo e celular do Brasil. - **Tecnologia:** A implementação foi feita com a biblioteca `jquery-mask-plugin` de Igor Escobar. - **Dependências:** Para isso, as bibliotecas `jquery` e `jquery-mask-plugin` foram adicionadas ao projeto, e a biblioteca `imask` foi removida. - **Build:** Os assets do frontend foram recompilados para aplicar as mudanças. --- ## Atualizações em 2025-10-12 13:00:00 ### Correção de Conflito de JavaScript Foi diagnosticado e corrigido um erro de JavaScript (`Uncaught TypeError: $(...).mask is not a function`) que impedia o funcionamento da máscara de telefone. - **Causa Raiz:** O erro foi causado por um conflito entre duas versões do jQuery sendo carregadas na aplicação: uma versão estática (de `public/assets/js`) e uma versão gerenciada pelo `npm`/`Vite`. O plugin de máscara estava sendo associado a uma versão, enquanto o script da página tentava usar a outra. - **Solução Aplicada:** 1. **Remoção de Dependência Duplicada:** A dependência `jquery` do `npm` foi removida do `package.json`. 2. **Centralização do Carregamento:** O carregamento do plugin `jquery-mask-plugin` foi movido do `bootstrap.js` (gerenciado pelo Vite) para o layout principal (`script.blade.php`), sendo carregado como um arquivo estático logo após o jQuery principal do tema. 3. **Organização de Assets:** O arquivo do plugin foi copiado de `node_modules` para `public/assets/vendor/jquery-mask/` para manter a organização dos scripts de terceiros. 4. **Limpeza e Rebuild:** O `bootstrap.js` foi revertido para seu estado original e os assets do frontend foram recompilados para garantir a consistência.