Initial commit - Physiotherapy Clinic Management System
This commit is contained in:
commit
dbb326f2cc
300 files changed
+144285
No files matched your search
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\Api\AuthController;
|
||||
use App\Http\Controllers\Api\TwoFactorController;
|
||||
use App\Http\Controllers\Api\DashboardController;
|
||||
use App\Http\Controllers\Api\PatientController;
|
||||
use App\Http\Controllers\Api\AppointmentController;
|
||||
use App\Http\Controllers\Api\TherapistController;
|
||||
use App\Http\Controllers\Api\InvoiceController;
|
||||
use App\Http\Controllers\Api\PaymentController;
|
||||
use App\Http\Controllers\Api\PackageController;
|
||||
use App\Http\Controllers\Api\LedgerController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| API Routes
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// Public API routes
|
||||
Route::post('/register', [AuthController::class, 'register']);
|
||||
Route::post('/login', [AuthController::class, 'login']);
|
||||
Route::post('/verify-2fa', [AuthController::class, 'verify2FA']);
|
||||
|
||||
// Protected API routes
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
// Auth
|
||||
Route::post('/logout', [AuthController::class, 'logout']);
|
||||
Route::get('/user', [AuthController::class, 'user']);
|
||||
|
||||
// 2FA
|
||||
Route::get('/2fa/status', [TwoFactorController::class, 'status']);
|
||||
Route::get('/2fa/enable', [TwoFactorController::class, 'enable']);
|
||||
Route::post('/2fa/confirm', [TwoFactorController::class, 'confirm']);
|
||||
Route::post('/2fa/disable', [TwoFactorController::class, 'disable']);
|
||||
Route::get('/2fa/recovery-codes', [TwoFactorController::class, 'regenerateRecoveryCodes']);
|
||||
|
||||
// Dashboard
|
||||
Route::get('/dashboard', [DashboardController::class, 'index']);
|
||||
|
||||
// Patients
|
||||
Route::apiResource('patients', PatientController::class);
|
||||
Route::get('/patients/{patient}/profile', [PatientController::class, 'profile']);
|
||||
|
||||
// Appointments
|
||||
Route::apiResource('appointments', AppointmentController::class);
|
||||
Route::get('/appointments/calendar/feed', [AppointmentController::class, 'calendar']);
|
||||
Route::get('/appointments/available-slots', [AppointmentController::class, 'availableSlots']);
|
||||
|
||||
// Therapists
|
||||
Route::apiResource('therapists', TherapistController::class);
|
||||
Route::get('/therapists/{user}/performance', [TherapistController::class, 'performance']);
|
||||
Route::get('/therapists/{user}/wage-calculate', [TherapistController::class, 'calculateWage']);
|
||||
Route::post('/therapists/{user}/wage', [TherapistController::class, 'storeWage']);
|
||||
|
||||
// Invoices
|
||||
Route::apiResource('invoices', InvoiceController::class);
|
||||
Route::get('/invoices/summary/report', [InvoiceController::class, 'summary']);
|
||||
|
||||
// Payments
|
||||
Route::apiResource('payments', PaymentController::class)->except(['update']);
|
||||
Route::get('/payments/summary/report', [PaymentController::class, 'summary']);
|
||||
|
||||
// Packages
|
||||
Route::apiResource('packages', PackageController::class);
|
||||
Route::post('/packages/assign', [PackageController::class, 'assignToPatient']);
|
||||
Route::get('/patient-packages', [PackageController::class, 'patientPackages']);
|
||||
|
||||
// Ledger
|
||||
Route::apiResource('ledger', LedgerController::class)->except(['show', 'update', 'destroy']);
|
||||
Route::get('/ledger/summary/pl', [LedgerController::class, 'summary']);
|
||||
Route::get('/ledger/summary/income', [LedgerController::class, 'incomeSummary']);
|
||||
Route::get('/ledger/summary/expenses', [LedgerController::class, 'expenseSummary']);
|
||||
});
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Broadcast;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Broadcast Channels
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may register all of the event broadcasting channels that your
|
||||
| application supports. The given channel authorization callbacks are
|
||||
| used to check if an authenticated user can listen to the channel.
|
||||
|
|
||||
*/
|
||||
|
||||
Broadcast::channel('App.Models.User.{id}', function ($user, $id) {
|
||||
return (int) $user->id === (int) $id;
|
||||
});
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Inspiring;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Console Routes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This file is where you may define all of your Closure based console
|
||||
| commands. Each Closure is bound to a command instance allowing a
|
||||
| simple approach to interacting with each command's IO methods.
|
||||
|
|
||||
*/
|
||||
|
||||
Artisan::command('inspire', function () {
|
||||
$this->comment(Inspiring::quote());
|
||||
})->purpose('Display an inspiring quote');
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\Auth\WebAuthController;
|
||||
use App\Http\Controllers\Auth\TwoFactorController;
|
||||
use App\Http\Controllers\DashboardController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Web Routes
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// Guest routes
|
||||
Route::middleware('guest')->group(function () {
|
||||
Route::get('/login', [WebAuthController::class, 'showLogin'])->name('login');
|
||||
Route::post('/login', [WebAuthController::class, 'login']);
|
||||
Route::get('/register', [WebAuthController::class, 'showRegister'])->name('register');
|
||||
Route::post('/register', [WebAuthController::class, 'register']);
|
||||
Route::get('/2fa/challenge', [WebAuthController::class, 'show2FAChallenge'])->name('2fa.challenge');
|
||||
Route::post('/2fa/challenge', [WebAuthController::class, 'verify2FA']);
|
||||
});
|
||||
|
||||
// Authenticated routes
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::post('/logout', [WebAuthController::class, 'logout'])->name('logout');
|
||||
|
||||
// Dashboard
|
||||
Route::get('/', [DashboardController::class, 'index'])->name('dashboard');
|
||||
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
|
||||
|
||||
// 2FA Settings
|
||||
Route::get('/2fa', [TwoFactorController::class, 'show'])->name('2fa.settings');
|
||||
Route::get('/2fa/enable', [TwoFactorController::class, 'enable'])->name('2fa.enable');
|
||||
Route::post('/2fa/confirm', [TwoFactorController::class, 'confirm'])->name('2fa.confirm');
|
||||
Route::post('/2fa/disable', [TwoFactorController::class, 'disable'])->name('2fa.disable');
|
||||
Route::get('/2fa/recovery-codes', [TwoFactorController::class, 'regenerateRecoveryCodes'])->name('2fa.recovery-codes');
|
||||
});
|
||||
|
||||
// Language switcher
|
||||
Route::get('/language/{locale}', function ($locale) {
|
||||
if (in_array($locale, ['en', 'ar'])) {
|
||||
session(['locale' => $locale]);
|
||||
app()->setLocale($locale);
|
||||
}
|
||||
return redirect()->back();
|
||||
})->name('language.switch');
|
||||
Reference in new issue
Block a user