فهرست منبع

fix connsessione db

FabioFratini 7 ماه پیش
والد
کامیت
61db5fcc12

+ 2 - 1
app/Http/Livewire/Member.php

@@ -7,6 +7,7 @@ use Livewire\Attributes\Url;
 use Livewire\WithFileUploads;
 use Livewire\WithPagination;
 use Illuminate\Support\Facades\Log;
+use App\Http\Middleware\TenantMiddleware;
 
 use DateTime;
 
@@ -552,7 +553,6 @@ class Member extends Component
         $this->getCategories(\App\Models\Category::select('id', 'name')->where('parent_id', null)->orderBy('name')->get(), 0);
 
 
-
         // $this->getCourses(\App\Models\Course::select('id', 'name')->where('parent_id', null)->get(), 0);
 
         /*$this->nations = \App\Models\Nation::select('id', 'name')->orderBy('name')->get();
@@ -574,6 +574,7 @@ class Member extends Component
 
     public function boot(){
         $this->fileService = app(\App\Services\MemberFileService::class);
+        app(abstract: TenantMiddleware::class)->setupTenantConnection();
 
     }
 

+ 3 - 2
app/Http/Livewire/RecordOUT.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Livewire;
 
+use App\Http\Middleware\TenantMiddleware;
 use Livewire\Component;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Log;
@@ -115,6 +116,8 @@ class RecordOUT extends Component
     public function boot()
     {
         $this->recordFileService = app(RecordFileService::class);
+        app(TenantMiddleware::class)->setupTenantConnection();
+
     }
 
     public function getSupplierProperty()
@@ -376,7 +379,6 @@ class RecordOUT extends Component
     }
 
 
-
     public function store()
     {
         $this->emit('start-loading', 'Validazione dati...');
@@ -520,7 +522,6 @@ class RecordOUT extends Component
                 } catch (\Exception $ex) {
                     Log::error("Failed to process file: " . $ex->getMessage());
                     Log::error("Stack trace: " . $ex->getTraceAsString());
-
                     DB::table('records')
                         ->where('id', $record->id)
                         ->update(['attachment_status' => 'failed']);

+ 25 - 0
app/Http/Livewire/Reports.php

@@ -10,6 +10,7 @@ use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 use App\Models\Course;
 use App\Models\MemberCard;
+use App\Http\Middleware\TenantMiddleware;
 
 class Reports extends Component
 {
@@ -19,6 +20,12 @@ class Reports extends Component
     public $courses = [];
     public $selectedCourse = null;
 
+    public function boot()
+    {
+        app(TenantMiddleware::class)->setupTenantConnection();
+
+    }
+
     public function mount()
     {
         if (Auth::user()->level != env('LEVEL_ADMIN', 0))
@@ -127,6 +134,23 @@ class Reports extends Component
         $this->seasonFilter = $season;
     }
 
+    protected function setupTenantConnection()
+    {
+        $user = auth()->user();
+
+        config(['database.connections.tenant' => [
+            'driver' => 'mysql',
+            'host' => '127.0.0.1',
+            'port' => '3306',
+            'database' => $user->tenant_database,
+            'username' => $user->tenant_username,
+            'password' => $user->tenant_password,
+        ]]);
+
+        config(['database.default' => 'tenant']);
+        DB::purge('tenant');
+        DB::reconnect('tenant');
+    }
     public function getMonthlyTotals()
     {
         Log::info('=== getMonthlyTotals called ===');
@@ -141,6 +165,7 @@ class Reports extends Component
 
         $incomeData = array_fill(0, 12, 0);
         $expenseData = array_fill(0, 12, 0);
+        $this->setupTenantConnection();
 
         $incomeRecords = DB::table('records')
             ->join('records_rows', 'records.id', '=', 'records_rows.record_id')

+ 33 - 36
app/Http/Middleware/TenantMiddleware.php

@@ -1,61 +1,58 @@
 <?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;
+use Illuminate\Support\Facades\Log;
 
 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('/');            
+            return redirect('/');
         }
-  
-        $this->setDatabase($request->user());
+
+        $this->setupTenantConnection($request->user());
 
         return $next($request);
-        //abort(403); // accesso negato
     }
 
-    function setDatabase($user)
+    /**
+     * Set up the tenant database connection
+     */
+    public function setupTenantConnection($user = null)
     {
-        
-        // 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');
+        $user = $user ?: auth()->user();
 
-    }
+        if ($user) {
+            Log::info('Setting database connection', [
+                'database' => $user->tenant_database,
+                'username' => $user->tenant_username,
+                'password' => $user->tenant_password
+            ]);
+
+            config(['database.connections.tenant' => [
+                'driver' => 'mysql',
+                'host' => '127.0.0.1',
+                'port' => '3306',
+                'database' => $user->tenant_database,
+                'username' => $user->tenant_username,
+                'password' => $user->tenant_password,
+            ]]);
+
+            config(['database.default' => 'tenant']);
+            DB::purge('tenant');
+            DB::reconnect('tenant');
 
+            Log::info('Current database after setup: ' . DB::connection()->getDatabaseName());
+            Log::info('Current default connection: ' . DB::getDefaultConnection());
+        }
+    }
 }

+ 6 - 0
app/Jobs/ProcessRecordAttachment.php

@@ -12,6 +12,7 @@ use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Storage;
 use Illuminate\Support\Str;
 use App\Services\RecordFileService;
+use App\Http\Middleware\TenantMiddleware;
 
 class ProcessRecordAttachment implements ShouldQueue
 {
@@ -27,6 +28,11 @@ class ProcessRecordAttachment implements ShouldQueue
     public $tries = 3;
     public $backoff = [10, 30, 60];
 
+    public function boot()
+    {
+        app(TenantMiddleware::class)->setupTenantConnection();
+
+    }
     public function __construct($recordId, $tempFilePath, $originalFileName, $type = 'OUT', $clientName = null)
     {
         $this->recordId = $recordId;