Files
marco 38295e7e88 feat(cms): implement complete SysSiteCMS content management system
Initial implementation of the HomeSysPanel CMS built with Laravel 13.0.
Includes complete admin panel, content management, user authentication,
modular architecture for products/services/chatbot, and marketing tools.

Key features:
- User authentication with email verification and password reset
- Role-based access control (Admin/User with granular permissions)
- Content management (pages, news, FAQ, downloads, galleries, banners)
- Contact management system with subjects and responses
- Marketing tools (email campaigns, visitor analytics, social sharing)
- Modular architecture (Products, Services, Chatbot modules)
- AI Chatbot integration with OpenRouter.ai and LlamaCpp support
- Visitor tracking with geolocation
- SEO optimization with meta tags and Open Graph
- Responsive design with Bootstrap 5
- Dark mode support
- Maintenance mode
- Feature request system
2026-09-07 19:06:53 -03:00

202 lines
15 KiB
PHP
Executable File

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PageController;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
// Rotas Institucionais (Públicas Fixas)
Route::get('/', [PageController::class, 'index'])->name('index');
Route::get('/sobre', [PageController::class, 'about'])->name('about');
// Note: /produtos route is registered by the Products module when enabled
// Note: /servicos route is registered by the Services module when enabled
Route::get('/assistentes-digitais-com-ia', [PageController::class, 'assistentesDigitaisIA'])->name('assistentes-digitais-ia');
Route::get('/linux-servers', [PageController::class, 'servidoresLinux'])->name('servidores-linux');
Route::get('/erp', [PageController::class, 'erp'])->name('erp');
Route::get('/fluxo-de-caixa-pro', [PageController::class, 'fluxoDeCaixaPro'])->name('fluxo-de-caixa-pro');
Route::get('/downloads', [PageController::class, 'downloads'])->name('downloads');
Route::get('/downloads/{download}', [PageController::class, 'downloadFile'])->name('downloads.file')->middleware(['auth', 'verified']);
Route::get('/galerias/categoria/{slug}', [PageController::class, 'galleryCategory'])->name('gallery.category');
Route::get('/galeria/{slug}', [PageController::class, 'gallery'])->name('gallery.show');
Route::get('/noticias', [PageController::class, 'newsIndex'])->name('news.index');
Route::get('/noticias/{slug}', [PageController::class, 'newsShow'])->name('news.show');
Route::get('/faq', [PageController::class, 'faq'])->name('faq');
Route::get('/contato', [PageController::class, 'contato'])->name('contato');
Route::post('/contato', [PageController::class, 'sendContact'])
->middleware('throttle:5,1')
->name('contato.send');
Route::get('/politica-privacidade', [PageController::class, 'politicaPrivacidade'])->name('politica-privacidade');
// Rotas de Autenticação (Login, Registro, Recuperação, Verificação)
Auth::routes(['verify' => true, 'register' => true]);
// Dashboard (Protegido)
Route::middleware(['auth', 'verified'])->group(function () {
Route::get('/home', [HomeController::class, 'index'])->name('home');
Route::post('/home/feature-request', [HomeController::class, 'sendFeatureRequest'])->name('home.feature.request');
// Perfil e Preferências
Route::get('/perfil', [ProfileController::class, 'edit'])->name('profile.edit');
Route::put('/perfil', [ProfileController::class, 'update'])->name('profile.update');
Route::get('/preferencias', [ProfileController::class, 'preferences'])->name('profile.preferences');
Route::put('/preferencias', [ProfileController::class, 'updatePreferences'])->name('profile.preferences.update');
});
// Área Administrativa (Apenas Admin)
Route::middleware(['auth', 'verified', 'admin'])->prefix('admin')->name('admin.')->group(function () {
// Gerenciamento de Usuários (Somente Admin)
Route::get('/usuarios', [App\Http\Controllers\Admin\UserController::class, 'index'])->name('users.index');
Route::get('/usuarios/criar', [App\Http\Controllers\Admin\UserController::class, 'create'])->name('users.create');
Route::post('/usuarios', [App\Http\Controllers\Admin\UserController::class, 'store'])->name('users.store');
Route::get('/usuarios/{user}/editar', [App\Http\Controllers\Admin\UserController::class, 'edit'])->name('users.edit');
Route::put('/usuarios/{user}', [App\Http\Controllers\Admin\UserController::class, 'update'])->name('users.update');
Route::delete('/usuarios/{user}', [App\Http\Controllers\Admin\UserController::class, 'destroy'])->name('users.destroy');
// Gerenciamento de Tipos de Usuário (Somente Admin)
Route::get('/tipos-de-usuario', [App\Http\Controllers\Admin\UserTypeController::class, 'index'])->name('user-types.index');
Route::get('/tipos-de-usuario/criar', [App\Http\Controllers\Admin\UserTypeController::class, 'create'])->name('user-types.create');
Route::post('/tipos-de-usuario', [App\Http\Controllers\Admin\UserTypeController::class, 'store'])->name('user-types.store');
Route::get('/tipos-de-usuario/{userType}/editar', [App\Http\Controllers\Admin\UserTypeController::class, 'edit'])->name('user-types.edit');
Route::put('/tipos-de-usuario/{userType}', [App\Http\Controllers\Admin\UserTypeController::class, 'update'])->name('user-types.update');
Route::delete('/tipos-de-usuario/{userType}', [App\Http\Controllers\Admin\UserTypeController::class, 'destroy'])->name('user-types.destroy');
});
// Área Administrativa (Admin e User com permissões específicas)
Route::middleware(['auth', 'verified'])->prefix('admin')->name('admin.')->group(function () {
// Gerenciamento de Contatos (permissão: contacts)
Route::middleware('permission:contacts')->group(function () {
Route::get('/contatos', [App\Http\Controllers\Admin\ContactController::class, 'index'])->name('contacts.index');
Route::get('/contatos/{contact}', [App\Http\Controllers\Admin\ContactController::class, 'show'])->name('contacts.show');
Route::post('/contatos/{contact}/responder', [App\Http\Controllers\Admin\ContactController::class, 'reply'])->name('contacts.reply');
Route::delete('/contatos/{contact}', [App\Http\Controllers\Admin\ContactController::class, 'destroy'])->name('contacts.destroy');
});
// Gerenciamento de Assuntos (permissão: subjects)
Route::middleware('permission:subjects')->group(function () {
Route::get('/assuntos', [App\Http\Controllers\Admin\SubjectController::class, 'index'])->name('subjects.index');
Route::get('/assuntos/criar', [App\Http\Controllers\Admin\SubjectController::class, 'create'])->name('subjects.create');
Route::post('/assuntos', [App\Http\Controllers\Admin\SubjectController::class, 'store'])->name('subjects.store');
Route::get('/assuntos/{subject}/editar', [App\Http\Controllers\Admin\SubjectController::class, 'edit'])->name('subjects.edit');
Route::put('/assuntos/{subject}', [App\Http\Controllers\Admin\SubjectController::class, 'update'])->name('subjects.update');
Route::delete('/assuntos/{subject}', [App\Http\Controllers\Admin\SubjectController::class, 'destroy'])->name('subjects.destroy');
});
// Gerenciamento de Páginas (permissão: pages)
Route::middleware('permission:pages')->group(function () {
Route::get('/paginas', [App\Http\Controllers\Admin\PageController::class, 'index'])->name('pages.index');
Route::get('/paginas/criar', [App\Http\Controllers\Admin\PageController::class, 'create'])->name('pages.create');
Route::post('/paginas', [App\Http\Controllers\Admin\PageController::class, 'store'])->name('pages.store');
Route::get('/paginas/{page}/editar', [App\Http\Controllers\Admin\PageController::class, 'edit'])->name('pages.edit');
Route::put('/paginas/{page}', [App\Http\Controllers\Admin\PageController::class, 'update'])->name('pages.update');
Route::delete('/paginas/{page}', [App\Http\Controllers\Admin\PageController::class, 'destroy'])->name('pages.destroy');
});
// Gerenciamento de FAQ (permissão: faqs)
Route::middleware('permission:faqs')->group(function () {
Route::get('/faq', [App\Http\Controllers\Admin\FaqController::class, 'index'])->name('faqs.index');
Route::get('/faq/criar', [App\Http\Controllers\Admin\FaqController::class, 'create'])->name('faqs.create');
Route::post('/faq', [App\Http\Controllers\Admin\FaqController::class, 'store'])->name('faqs.store');
Route::get('/faq/{faq}/editar', [App\Http\Controllers\Admin\FaqController::class, 'edit'])->name('faqs.edit');
Route::put('/faq/{faq}', [App\Http\Controllers\Admin\FaqController::class, 'update'])->name('faqs.update');
Route::delete('/faq/{faq}', [App\Http\Controllers\Admin\FaqController::class, 'destroy'])->name('faqs.destroy');
});
// Note: Products routes are registered by the Products module when enabled
// Note: Services routes are registered by the Services module when enabled
// Gerenciamento de Notícias (permissão: news)
Route::middleware('permission:news')->group(function () {
Route::get('/noticias', [App\Http\Controllers\Admin\NewsController::class, 'index'])->name('news.index');
Route::post('/noticias/toggle-visibilidade', [App\Http\Controllers\Admin\NewsController::class, 'toggleVisibility'])->name('news.toggle');
Route::get('/noticias/criar', [App\Http\Controllers\Admin\NewsController::class, 'create'])->name('news.create');
Route::post('/noticias', [App\Http\Controllers\Admin\NewsController::class, 'store'])->name('news.store');
Route::get('/noticias/{news}/editar', [App\Http\Controllers\Admin\NewsController::class, 'edit'])->name('news.edit');
Route::put('/noticias/{news}', [App\Http\Controllers\Admin\NewsController::class, 'update'])->name('news.update');
Route::delete('/noticias/{news}', [App\Http\Controllers\Admin\NewsController::class, 'destroy'])->name('news.destroy');
Route::delete('/noticias/{news}/imagem-principal', [App\Http\Controllers\Admin\NewsController::class, 'removeFeaturedImage'])->name('news.remove-featured');
Route::post('/noticias/{news}/imagem', [App\Http\Controllers\Admin\NewsController::class, 'uploadImage'])->name('news.upload');
Route::put('/noticias/imagem/{image}', [App\Http\Controllers\Admin\NewsController::class, 'updateImage'])->name('news.image.update');
Route::delete('/noticias/imagem/{image}', [App\Http\Controllers\Admin\NewsController::class, 'deleteImage'])->name('news.image.delete');
});
// Gerenciamento de Downloads (permissão: downloads)
Route::middleware('permission:downloads')->group(function () {
Route::get('/downloads', [App\Http\Controllers\Admin\DownloadController::class, 'index'])->name('downloads.index');
Route::get('/downloads/criar', [App\Http\Controllers\Admin\DownloadController::class, 'create'])->name('downloads.create');
Route::post('/downloads', [App\Http\Controllers\Admin\DownloadController::class, 'store'])->name('downloads.store');
Route::get('/downloads/{download}/editar', [App\Http\Controllers\Admin\DownloadController::class, 'edit'])->name('downloads.edit');
Route::put('/downloads/{download}', [App\Http\Controllers\Admin\DownloadController::class, 'update'])->name('downloads.update');
Route::delete('/downloads/{download}', [App\Http\Controllers\Admin\DownloadController::class, 'destroy'])->name('downloads.destroy');
});
// Gerenciamento de Galerias (permissão: galleries)
Route::middleware('permission:galleries')->group(function () {
Route::get('/galerias', [App\Http\Controllers\Admin\GalleryController::class, 'index'])->name('galleries.index');
Route::get('/galerias/criar', [App\Http\Controllers\Admin\GalleryController::class, 'create'])->name('galleries.create');
Route::post('/galerias', [App\Http\Controllers\Admin\GalleryController::class, 'store'])->name('galleries.store');
Route::get('/galerias/{gallery}/editar', [App\Http\Controllers\Admin\GalleryController::class, 'edit'])->name('galleries.edit');
Route::put('/galerias/{gallery}', [App\Http\Controllers\Admin\GalleryController::class, 'update'])->name('galleries.update');
Route::delete('/galerias/{gallery}', [App\Http\Controllers\Admin\GalleryController::class, 'destroy'])->name('galleries.destroy');
Route::post('/galerias/{gallery}/imagem', [App\Http\Controllers\Admin\GalleryController::class, 'uploadImage'])->name('galleries.upload');
Route::put('/galerias/imagem/{image}', [App\Http\Controllers\Admin\GalleryController::class, 'updateImage'])->name('galleries.image.update');
Route::delete('/galerias/imagem/{image}', [App\Http\Controllers\Admin\GalleryController::class, 'deleteImage'])->name('galleries.image.delete');
// Categorias de Galerias
Route::get('/galerias/categorias', [App\Http\Controllers\Admin\GalleryCategoryController::class, 'index'])->name('gallery-categories.index');
Route::get('/galerias/categorias/criar', [App\Http\Controllers\Admin\GalleryCategoryController::class, 'create'])->name('gallery-categories.create');
Route::post('/galerias/categorias', [App\Http\Controllers\Admin\GalleryCategoryController::class, 'store'])->name('gallery-categories.store');
Route::get('/galerias/categorias/{galleryCategory}/editar', [App\Http\Controllers\Admin\GalleryCategoryController::class, 'edit'])->name('gallery-categories.edit');
Route::put('/galerias/categorias/{galleryCategory}', [App\Http\Controllers\Admin\GalleryCategoryController::class, 'update'])->name('gallery-categories.update');
Route::delete('/galerias/categorias/{galleryCategory}', [App\Http\Controllers\Admin\GalleryCategoryController::class, 'destroy'])->name('gallery-categories.destroy');
});
// Área de Marketing (permissão: marketing)
Route::middleware('permission:marketing')->prefix('marketing')->name('marketing.')->group(function () {
Route::get('/', [App\Http\Controllers\Admin\MarketingController::class, 'index'])->name('index');
Route::get('/visitantes', [App\Http\Controllers\Admin\MarketingController::class, 'analytics'])->name('analytics');
Route::get('/promover-produtos', [App\Http\Controllers\Admin\MarketingController::class, 'promoteProducts'])->name('promote.products');
Route::get('/promover-servicos', [App\Http\Controllers\Admin\MarketingController::class, 'promoteServices'])->name('promote.services');
Route::get('/email-marketing', [App\Http\Controllers\Admin\MarketingController::class, 'emailMarketing'])->name('email');
Route::post('/email-marketing', [App\Http\Controllers\Admin\MarketingController::class, 'sendEmailMarketing'])->name('email.send');
// Gerenciamento de Banners (Destaques)
Route::resource('banners', App\Http\Controllers\Admin\BannerController::class);
});
// Configurações e SEO Global (permissão: settings)
Route::middleware('permission:settings')->group(function () {
Route::get('/configuracoes', [App\Http\Controllers\Admin\SettingController::class, 'index'])->name('settings.index');
Route::post('/configuracoes', [App\Http\Controllers\Admin\SettingController::class, 'update'])->name('settings.update');
});
// ERP Syspanel Advertisement (available to all logged-in users)
Route::get('/erp-syspanel', [App\Http\Controllers\Admin\SettingController::class, 'erpAd'])->name('erp.ad');
// Manual de Uso (available to all logged-in users)
Route::get('/manual-de-uso', function () {
return view('admin.manual.index');
})->name('manual');
// Notificações (available to all logged-in users)
Route::get('/notificacoes/{id}/lida', function ($id) {
/** @var \App\Models\User $user */
$user = Auth::user();
$notification = $user->notifications()->findOrFail($id);
$notification->markAsRead();
return Redirect::to($notification->data['link']);
})->name('notifications.read');
Route::get('/notificacoes/limpar', function () {
/** @var \App\Models\User $user */
$user = Auth::user();
$user->unreadNotifications->markAsRead();
return Redirect::back();
})->name('notifications.clear');
});
// Rota Dinâmica para Páginas Customizadas (DEVE SER SEMPRE A ÚLTIMA ROTA)
Route::get('/{slug}', [PageController::class, 'show'])->name('pages.show');