166 lines
12 KiB
PHP
Executable File
166 lines
12 KiB
PHP
Executable File
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Http\Controllers\ProfileController;
|
|
use App\Http\Controllers\Admin\SubjectController;
|
|
use App\Http\Controllers\Admin\InsightController;
|
|
use App\Http\Controllers\Admin\TelegramController;
|
|
use App\Http\Controllers\Admin\InterestController;
|
|
use App\Http\Controllers\SuperAdmin\UserController;
|
|
use App\Http\Controllers\SuperAdmin\SystemController;
|
|
use App\Http\Controllers\LegalController;
|
|
use App\Http\Controllers\LanguageController;
|
|
use App\Http\Controllers\DashboardController;
|
|
use Illuminate\Support\Facades\Route;
|
|
use App\Http\Controllers\Auth\AuthenticatedSessionController;
|
|
use App\Http\Controllers\Auth\RegisteredUserController;
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Web Routes
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Here is where you can register web routes for your application.
|
|
|
|
|
*/
|
|
|
|
// Public routes
|
|
Route::get('/', function () {
|
|
return view('welcome');
|
|
})->name('home');
|
|
|
|
Route::get('language/{locale}', [LanguageController::class, 'switch'])->name('language.switch');
|
|
|
|
// Legal routes
|
|
Route::prefix('legal')->name('legal.')->group(function () {
|
|
Route::get('/terms', [LegalController::class, 'terms'])->name('terms');
|
|
Route::get('/privacy', [LegalController::class, 'privacy'])->name('privacy');
|
|
Route::get('/cookies', [LegalController::class, 'cookies'])->name('cookies');
|
|
Route::post('/accept', [LegalController::class, 'accept'])->name('accept');
|
|
Route::get('/history', [LegalController::class, 'history'])->name('history');
|
|
Route::post('/cookie-banner/accept', [LegalController::class, 'acceptCookieBanner'])->name('cookie-banner.accept');
|
|
});
|
|
|
|
// Guest routes
|
|
Route::middleware(['web', 'guest'])->group(function () {
|
|
Route::get('login', [AuthenticatedSessionController::class, 'create'])->name('login');
|
|
Route::post('login', [AuthenticatedSessionController::class, 'store']);
|
|
Route::get('register', [RegisteredUserController::class, 'create'])->name('register');
|
|
Route::post('register', [RegisteredUserController::class, 'store']);
|
|
});
|
|
|
|
// Authenticated routes
|
|
Route::middleware('auth')->group(function () {
|
|
Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])->name('logout');
|
|
|
|
// Dashboard
|
|
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
|
|
Route::get('/dashboard/chat', [\App\Http\Controllers\ChatController::class, 'index'])->name('chat.index');
|
|
Route::post('/dashboard/chat', [\App\Http\Controllers\ChatController::class, 'store'])->name('chat.store');
|
|
Route::delete('/dashboard/chat', [\App\Http\Controllers\ChatController::class, 'destroy'])->name('chat.destroy');
|
|
Route::get('/notifications', [\App\Http\Controllers\NotificationController::class, 'index'])->name('notifications.index');
|
|
Route::post('/notifications/{notification}/read', [\App\Http\Controllers\NotificationController::class, 'markAsRead'])->name('notifications.read');
|
|
Route::post('/notifications/read-all', [\App\Http\Controllers\NotificationController::class, 'markAllAsRead'])->name('notifications.read-all');
|
|
|
|
// Profile routes
|
|
Route::middleware('verified')->group(function () {
|
|
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
|
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
|
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
|
});
|
|
});
|
|
|
|
// Admin routes (for authenticated users with admin or superadmin role)
|
|
Route::middleware(['auth', 'verified', 'role:admin|superadmin'])
|
|
->prefix('admin')
|
|
->name('admin.')
|
|
->group(function () {
|
|
// Subjects
|
|
Route::get('/subjects', [SubjectController::class, 'index'])->name('subjects.index');
|
|
Route::post('/subjects', [SubjectController::class, 'store'])->name('subjects.store');
|
|
Route::post('/subjects/{subject}/subscribe', [SubjectController::class, 'subscribe'])->name('subjects.subscribe');
|
|
Route::put('/subjects/{subject}', [SubjectController::class, 'update'])->name('subjects.update');
|
|
Route::delete('/subjects/{subject}', [SubjectController::class, 'destroy'])->name('subjects.destroy');
|
|
Route::post('/subjects/{userSubject}/toggle', [SubjectController::class, 'toggle'])->name('subjects.toggle');
|
|
Route::put('/subjects/{userSubject}/schedule', [SubjectController::class, 'updateSchedule'])->name('subjects.schedule');
|
|
Route::delete('/subjects/{userSubject}/unsubscribe', [SubjectController::class, 'unsubscribe'])->name('subjects.unsubscribe');
|
|
Route::post('/subjects/{subject}/send-insight', [SubjectController::class, 'sendInsight'])->name('subjects.send-insight');
|
|
Route::post('/subjects/{subject}/send-introduction', [SubjectController::class, 'sendIntroduction'])->name('subjects.send-introduction');
|
|
Route::post('/subjects/generate-ai', [SubjectController::class, 'generateAiSubject'])->name('subjects.generateAi');
|
|
|
|
// Insights
|
|
Route::get('/insights', [InsightController::class, 'index'])->name('insights.index');
|
|
Route::post('/insights', [InsightController::class, 'store'])->name('insights.store');
|
|
Route::post('/insights/generate', [InsightController::class, 'generate'])->name('insights.generate');
|
|
Route::post('/insights/{insight}/translate', [InsightController::class, 'translate'])->name('insights.translate');
|
|
Route::delete('/insights/{insight}', [InsightController::class, 'destroy'])->name('insights.destroy');
|
|
|
|
// Telegram
|
|
Route::get('/telegram', [TelegramController::class, 'index'])->name('telegram.index');
|
|
Route::post('/telegram/connect', [TelegramController::class, 'connect'])->name('telegram.connect');
|
|
Route::post('/telegram/test', [TelegramController::class, 'test'])->name('telegram.test');
|
|
Route::post('/telegram/disconnect', [TelegramController::class, 'disconnect'])->name('telegram.disconnect');
|
|
|
|
// Billing
|
|
Route::get('/billing', [\App\Http\Controllers\Admin\BillingController::class, 'index'])->name('billing.index');
|
|
Route::post('/billing/subscribe/{plan}', [\App\Http\Controllers\Admin\BillingController::class, 'subscribe'])->name('billing.subscribe');
|
|
Route::get('/billing/invoices/{invoice}/download', [\App\Http\Controllers\Admin\BillingController::class, 'downloadInvoice'])->name('billing.invoices.download');
|
|
Route::get('/billing/notifications', [\App\Http\Controllers\Admin\BillingController::class, 'notifications'])->name('billing.notifications');
|
|
Route::post('/billing/notifications/{notification}/read', [\App\Http\Controllers\Admin\BillingController::class, 'markNotificationRead'])->name('billing.notifications.read');
|
|
Route::post('/billing/notifications/read-all', [\App\Http\Controllers\Admin\BillingController::class, 'markAllNotificationsRead'])->name('billing.notifications.read-all');
|
|
|
|
// Custom Subjects (PDF)
|
|
Route::get('/custom-subjects', [\App\Http\Controllers\Admin\CustomSubjectController::class, 'index'])->name('custom-subjects.index');
|
|
Route::post('/custom-subjects', [\App\Http\Controllers\Admin\CustomSubjectController::class, 'store'])->name('custom-subjects.store');
|
|
Route::get('/custom-subjects/{customSubject}', [\App\Http\Controllers\Admin\CustomSubjectController::class, 'show'])->name('custom-subjects.show');
|
|
Route::get('/custom-subjects/{customSubject}/edit', [\App\Http\Controllers\Admin\CustomSubjectController::class, 'edit'])->name('custom-subjects.edit');
|
|
Route::put('/custom-subjects/{customSubject}', [\App\Http\Controllers\Admin\CustomSubjectController::class, 'update'])->name('custom-subjects.update');
|
|
Route::post('/custom-subjects/{customSubject}/ask', [\App\Http\Controllers\Admin\CustomSubjectController::class, 'ask'])->name('custom-subjects.ask');
|
|
Route::delete('/custom-subjects/{customSubject}', [\App\Http\Controllers\Admin\CustomSubjectController::class, 'destroy'])->name('custom-subjects.destroy');
|
|
Route::delete('/custom-subjects/{customSubject}/questions/{question}', [\App\Http\Controllers\Admin\CustomSubjectController::class, 'destroyQuestion'])->name('custom-subjects.questions.destroy');
|
|
Route::post('/custom-subjects/{customSubject}/questions/{question}/translate', [\App\Http\Controllers\Admin\CustomSubjectController::class, 'translateQuestion'])->name('custom-subjects.questions.translate');
|
|
|
|
// Interests
|
|
Route::get('/interests', [InterestController::class, 'index'])->name('interests.index');
|
|
Route::post('/interests', [InterestController::class, 'store'])->name('interests.store');
|
|
Route::delete('/interests/{userInterest}', [InterestController::class, 'destroy'])->name('interests.destroy');
|
|
Route::post('/interests/generate-suggestions', [InterestController::class, 'generateSuggestions'])->name('interests.generateSuggestions');
|
|
Route::post('/interests/create-subject', [InterestController::class, 'createSubjectFromSuggestion'])->name('interests.createSubject');
|
|
});
|
|
|
|
// SuperAdmin routes
|
|
Route::middleware(['auth', 'verified', 'role:superadmin'])
|
|
->prefix('superadmin')
|
|
->name('superadmin.')
|
|
->group(function () {
|
|
// User management
|
|
Route::get('/users', [UserController::class, 'index'])->name('users.index');
|
|
Route::post('/users/{user}/approve', [UserController::class, 'approve'])->name('users.approve');
|
|
Route::post('/users/{user}/reject', [UserController::class, 'reject'])->name('users.reject');
|
|
Route::post('/users/{user}/toggle-active', [UserController::class, 'toggleActive'])->name('users.toggle-active');
|
|
Route::post('/users/{user}/verify-email', [UserController::class, 'verifyEmail'])->name('users.verify-email');
|
|
Route::get('/users/{user}/edit', [UserController::class, 'edit'])->name('users.edit');
|
|
Route::put('/users/{user}', [UserController::class, 'update'])->name('users.update');
|
|
Route::delete('/users/{user}', [UserController::class, 'destroy'])->name('users.destroy');
|
|
|
|
// Billing management
|
|
Route::get('/billing', [\App\Http\Controllers\SuperAdmin\BillingController::class, 'index'])->name('billing.index');
|
|
Route::post('/billing/plans', [\App\Http\Controllers\SuperAdmin\BillingController::class, 'storePlan'])->name('billing.plans.store');
|
|
Route::put('/billing/plans/{plan}', [\App\Http\Controllers\SuperAdmin\BillingController::class, 'updatePlan'])->name('billing.plans.update');
|
|
Route::post('/billing/subscriptions/{subscription}/approve', [\App\Http\Controllers\SuperAdmin\BillingController::class, 'approvePayment'])->name('billing.approve');
|
|
Route::post('/billing/subscriptions/{subscription}/cancel', [\App\Http\Controllers\SuperAdmin\BillingController::class, 'cancelSubscription'])->name('billing.cancel');
|
|
Route::get('/billing/invoices', [\App\Http\Controllers\SuperAdmin\BillingController::class, 'invoices'])->name('billing.invoices');
|
|
Route::get('/billing/invoices/{invoice}/download', [\App\Http\Controllers\SuperAdmin\BillingController::class, 'downloadInvoice'])->name('billing.invoices.download');
|
|
|
|
// System management
|
|
Route::get('/system', [SystemController::class, 'index'])->name('system.index');
|
|
Route::post('/system/subjects', [SystemController::class, 'createSubject'])->name('system.subjects.store');
|
|
Route::post('/system/subjects/generate-ai', [SystemController::class, 'generateAiSubject'])->name('system.subjects.generateAi');
|
|
Route::put('/system/subjects/{subject}', [SystemController::class, 'updateSubject'])->name('system.subjects.update');
|
|
Route::delete('/system/subjects/{subject}', [SystemController::class, 'destroySubject'])->name('system.subjects.destroy');
|
|
Route::post('/system/ai-settings', [SystemController::class, 'updateAiSettings'])->name('system.ai-settings.update');
|
|
Route::post('/system/chat-settings', [SystemController::class, 'updateChatSettings'])->name('system.chat-settings.update');
|
|
|
|
});
|