feat: painel de marca (white-label), correção de build e análise de p…#6
Open
impa365 wants to merge 2 commits into
Open
feat: painel de marca (white-label), correção de build e análise de p…#6impa365 wants to merge 2 commits into
impa365 wants to merge 2 commits into
Conversation
…lugins 1. Correção de build — Case-sensitivity no Vite (Linux/Docker) O build do frontend falhava no GitHub Actions (Linux) por causa de imports com letra maiúscula @/Components/ em vez de @/components/. Index.vue: Corrigido 2 imports de @/Components/EmailProviderSidebar.vue → @/components/EmailProviderSidebar.vue 2. Nova aba "Marca" nas Configurações (white-label completo) Permite alterar nome, descrição, cor primária, logos e favicon da plataforma diretamente pelo painel admin, sem precisar mexer em variáveis de ambiente. Backend: SettingsController.php: index() agora passa dados de branding do banco (com fallback para getfy.php) update() salva campos de branding (app_name, app_description, theme_primary, logos, favicon) Novo método uploadBranding() para upload de imagens via endpoint dedicado web.php: Nova rota POST /configuracoes/branding/upload HandleInertiaRequests.php: Branding agora lê do banco primeiro (Setting::get()) com fallback para config PanelPwaController.php: Manifest PWA usa branding do banco EmailTestController.php: Nome do app nos emails vem do banco app.blade.php: Title, favicon e theme-color do HTML leem do banco Frontend: Index.vue: Nova aba "Marca" com campos: nome, descrição, cor primária (color picker), 4 uploads de logo (horizontal claro/escuro, ícone claro/escuro) e favicon Tamanhos recomendados exibidos em cada card de upload Preview das imagens após upload 3. Restrição da aba "Marca" apenas para admin (master) Frontend: A aba "Marca" só aparece se auth.user.role === 'admin'; tabs são computados dinamicamente Backend: uploadBranding() retorna 403 se não for admin; update() ignora campos de branding se não for admin Arquivos modificados Arquivo Tipo de alteração Index.vue Fix imports + nova aba Marca + restrição admin SettingsController.php Branding CRUD + upload + guard admin web.php Nova rota branding upload HandleInertiaRequests.php Branding do banco com fallback PanelPwaController.php PWA manifest do banco EmailTestController.php App name do banco app.blade.php HTML title/favicon/theme do banco Notas Sem migrations novas — usa a tabela settings existente (key-value com tenant_id) Sem breaking changes — tudo tem fallback para os valores do getfy.php (variáveis de ambiente) O sistema de plugins foi analisado e está completo, apenas desabilitado intencionalmente com overlay "Em breve.."
…-pagamentos
1. Conteúdo progressivo (Drip Content)
Implementa sistema completo de liberação progressiva de módulos na área de membros. O infoprodutor define quantos dias após a compra cada módulo será disponibilizado ao aluno, e pode desbloquear manualmente para alunos específicos.
Backend:
Nova migration: coluna release_after_days em member_modules + tabela member_content_unlocks para desbloqueios manuais
Novo model MemberContentUnlock com relacionamentos user, module e unlockedByUser
MemberModule ganha método dripUnlocksAt($userId) que calcula a data de liberação com base na data do pedido + dias configurados, respeitando desbloqueios manuais
MemberAreaAppController: módulos bloqueados retornam is_locked: true, unlocks_at e lessons: []; acesso direto via moduleContent() e lesson() é bloqueado com redirect
MemberBuilderController: storeModule e updateModule aceitam release_after_days; 3 novos endpoints para gerenciar desbloqueios manuais (listar, desbloquear, re-bloquear)
3 novas rotas: GET/POST/DELETE .../modules/{module}/unlock[s]
Frontend — Painel do infoprodutor (MemberBuilder):
Campo inline "Liberar após X dias" em cada módulo (seções do tipo courses)
Botão "Desbloqueios" abre modal com select de alunos → desbloquear; lista de desbloqueios existentes com opção de remover
Frontend — Área do aluno:
Show.vue, Modulos.vue, ModuleContent.vue: módulos bloqueados exibem cadeado (ícone Lock) com contagem regressiva ("Disponível em X dias", "Amanhã", "Em breve")
Módulos bloqueados não são clicáveis e aparecem com opacidade reduzida + thumbnail escurecida
Sidebar do player também indica módulos bloqueados
2. Fix página /docs/api-pagamentos
O .gitignore tinha a linha docs (sem / inicial) na linha 27, que funcionava como padrão global e ignorava qualquer pasta chamada docs em qualquer nível — incluindo Docs e docs. Isso impedia que os arquivos da documentação da API fossem commitados e, consequentemente, incluídos no build Docker.
Removidas linhas 27-28 (docs e Docs Gateways) do .gitignore
As linhas /docs e /Docs Gateways (com / inicial, só raiz) já existiam e foram mantidas
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
1. Correção de build — Case-sensitivity no Vite (Linux/Docker)
O build do frontend falhava no GitHub Actions (Linux) por causa de imports com letra maiúscula
@/Components/em vez de@/components/.@/Components/EmailProviderSidebar.vue→@/components/EmailProviderSidebar.vue2. Nova aba "Marca" nas Configurações (white-label completo)
Permite alterar nome, descrição, cor primária, logos e favicon da plataforma diretamente pelo painel admin, sem precisar mexer em variáveis de ambiente.
Backend:
index()agora passa dados de branding do banco (com fallback para getfy.php)update()salva campos de branding (app_name, app_description, theme_primary, logos, favicon)uploadBranding()para upload de imagens via endpoint dedicadoPOST /configuracoes/branding/uploadSetting::get()) com fallback para configFrontend:
3. Restrição da aba "Marca" apenas para admin (master)
auth.user.role === 'admin'; tabs são computados dinamicamenteuploadBranding()retorna 403 se não for admin;update()ignora campos de branding se não for adminArquivos modificados
Notas
settingsexistente (key-value comtenant_id)