Selaa lähdekoodia

Branch multi db

Luca Parisio 7 kuukautta sitten
vanhempi
commit
9394f1a909

+ 1 - 0
app/Http/Kernel.php

@@ -63,5 +63,6 @@ class Kernel extends HttpKernel
         'signed' => \App\Http\Middleware\ValidateSignature::class,
         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
         'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
+        'tenant' => \App\Http\Middleware\TenantMiddleware::class,
     ];
 }

+ 61 - 0
app/Http/Middleware/TenantMiddleware.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace App\Http\Middleware;
+use Illuminate\Support\Facades\Auth;
+use Closure;
+use Illuminate\Http\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Illuminate\Support\Facades\Route;
+use Illuminate\Routing\Redirect;
+use Illuminate\Support\Facades\Config;
+use Illuminate\Support\Facades\DB;
+
+class TenantMiddleware
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
+     */
+    public function handle(Request $request, Closure $next): Response
+    {
+        //return $next($request);
+        //$user = Auth::user(); // oppure $request->user()
+
+        // Esempio: controlla se l'utente è admin
+        if (! $request->user()) {
+            return redirect('/');            
+        }
+  
+        $this->setDatabase($request->user());
+
+        return $next($request);
+        //abort(403); // accesso negato
+    }
+
+    function setDatabase($user)
+    {
+        
+        // Recupero i dati di connessione
+        $database = $user->tenant_database;
+        $username = $user->tenant_username;
+        $password = $user->tenant_password;
+        
+        $connectionName = 'mysql';
+        $config = Config::get('database.connections.' . $connectionName);
+        $config = [
+            'driver' => 'mysql',
+            'host' => '127.0.0.1',
+            'port' => '3306',
+            'database' => $database,
+            'username' => $username,
+            'password' => $password
+        ];
+        config()->set('database.connections.' . $connectionName, $config);
+        DB::purge($connectionName);
+        
+        //DB::setDefaultConnection('mysql');
+
+    }
+
+}

+ 34 - 0
database/migrations/2025_06_06_153500_create_courts_table.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('courts', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->integer('enabled')->default(1);
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('courts');
+    }
+};

+ 42 - 0
database/migrations/2025_06_06_153700_create_calendars_table.php

@@ -0,0 +1,42 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('calendars', function (Blueprint $table) {
+            $table->id();
+            $table->unsignedBigInteger('course_id')->nullable();
+            $table->foreign('course_id')->nullable()->references('id')->on('courses')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('court_id')->nullable();
+            $table->foreign('court_id')->nullable()->references('id')->on('courtes')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('instructor_id')->nullable();
+            $table->foreign('instructor_id')->nullable()->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
+            $table->datetime('date')->nullable();
+            $table->string('from')->nullable();
+            $table->string('to')->nullable();
+            $table->string('note')->nullable();
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('calendars');
+    }
+};

+ 39 - 0
database/migrations/2025_06_06_154000_create_presences_table.php

@@ -0,0 +1,39 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('presences', function (Blueprint $table) {
+            $table->id();
+            $table->unsignedBigInteger('calendar_id')->nullable();
+            $table->foreign('calendar_id')->nullable()->references('id')->on('calendars')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('member_id')->nullable();
+            $table->foreign('member_id')->nullable()->references('id')->on('members')->onUpdate('cascade')->onDelete('cascade');
+            $table->unsignedBigInteger('member_course_id')->nullable();
+            $table->foreign('member_course_id')->nullable()->references('id')->on('member_courses')->onUpdate('cascade')->onDelete('cascade');
+
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('presences');
+    }
+};

+ 4 - 27
routes/web.php

@@ -47,33 +47,9 @@ Route::get('/logout', function () {
     return redirect('/');
 });
 
-function setDatabase()
-{
-
-    // Recupero i dati di connessione
-    $database = '';
-    $username = '';
-    $password = '';
-
-    $connectionName = 'mysql';
-    $config = Config::get('database.connections.' . $connectionName);
-    $config = [
-        'driver' => 'mysql',
-        'host' => '127.0.0.1',
-        'port' => '3306',
-        'database' => $database,
-        'username' => $username,
-        'password' => $password
-    ];
-    config()->set('database.connections.' . $connectionName, $config);
-    DB::purge($connectionName);
-    //DB::setDefaultConnection('mysql');
-
-}
 
-Route::group(['middleware' => 'auth'], function () {
-
-    // setDatabase();
+//Route::group(['middleware' => 'auth'], function () {
+Route::group(['middleware' => 'tenant'], function () {
 
     //Route::get('/', \App\Http\Livewire\Login::class);
     Route::get('/dashboard', \App\Http\Livewire\Dashboard::class);
@@ -112,7 +88,7 @@ Route::group(['middleware' => 'auth'], function () {
     Route::get('/rates', \App\Http\Livewire\Rate::class);
     Route::get('/reports', \App\Http\Livewire\Reports::class);
     Route::get('/azienda', \App\Http\Livewire\Azienda::class);
-});
+
 
 Route::get('/receipt/{id}', function ($id) {
     $receipt = \App\Models\Receipt::findOrFail($id);
@@ -1576,6 +1552,7 @@ Route::get('/get_receipts', function () {
     ]);
 });
 
+});
 
 function getColor($months, $m)
 {