1. Route /session/refresh/all

  Méthode : POSTAuthentification : Requise (via session_id dans headers ou cookies)

  Headers requis :
  Authorization: Bearer {session_id}
  // ou
  Cookie: session_id={session_id}

  Réponse attendue :
  {
    "status": "success",
    "message": "Session refreshed",
    "user": {
      // Mêmes données que le login
      "id": 123,
      "email": "user@example.com",
      "name": "John Doe",
      "fk_role": 2,
      "fk_entite": 1,
      // ...
    },
    "amicale": {
      // Données de l'amicale
      "id": 1,
      "name": "Amicale Pompiers",
      // ...
    },
    "operations": [...],
    "sectors": [...],
    "passages": [...],
    "membres": [...],
    "session_id": "current_session_id",
    "session_expiry": "2024-01-20T10:00:00Z"
  }

  Code PHP suggéré :
  // routes/session.php
  Route::post('/session/refresh/all', function(Request $request) {
      $user = Auth::user();
      if (!$user) {
          return response()->json(['status' => 'error', 'message' => 'Not authenticated'], 401);
      }

      // Retourner les mêmes données qu'un login normal
      return response()->json([
          'status' => 'success',
          'user' => $user->toArray(),
          'amicale' => $user->amicale,
          'operations' => Operation::where('fk_entite', $user->fk_entite)->get(),
          'sectors' => Sector::where('fk_entite', $user->fk_entite)->get(),
          'passages' => Passage::where('fk_entite', $user->fk_entite)->get(),
          'membres' => Membre::where('fk_entite', $user->fk_entite)->get(),
          'session_id' => session()->getId(),
          'session_expiry' => now()->addDays(7)->toIso8601String()
      ]);
  });

  2. Route /session/refresh/partial

  Méthode : POSTAuthentification : Requise

  Body requis :
  {
    "last_sync": "2024-01-19T10:00:00Z"
  }

  Réponse attendue :
  {
    "status": "success",
    "message": "Partial refresh completed",
    "sectors": [
      // Uniquement les secteurs modifiés après last_sync
      {
        "id": 45,
        "name": "Secteur A",
        "updated_at": "2024-01-19T15:00:00Z",
        // ...
      }
    ],
    "passages": [
      // Uniquement les passages modifiés après last_sync
      {
        "id": 789,
        "fk_sector": 45,
        "updated_at": "2024-01-19T14:30:00Z",
        // ...
      }
    ],
    "operations": [...],  // Si modifiées
    "membres": [...]       // Si modifiés
  }

  Code PHP suggéré :
  // routes/session.php
  Route::post('/session/refresh/partial', function(Request $request) {
      $user = Auth::user();
      if (!$user) {
          return response()->json(['status' => 'error', 'message' => 'Not authenticated'], 401);
      }

      $lastSync = Carbon::parse($request->input('last_sync'));

      // Récupérer uniquement les données modifiées après last_sync
      $response = [
          'status' => 'success',
          'message' => 'Partial refresh completed'
      ];

      // Secteurs modifiés
      $sectors = Sector::where('fk_entite', $user->fk_entite)
                      ->where('updated_at', '>', $lastSync)
                      ->get();
      if ($sectors->count() > 0) {
          $response['sectors'] = $sectors;
      }

      // Passages modifiés
      $passages = Passage::where('fk_entite', $user->fk_entite)
                        ->where('updated_at', '>', $lastSync)
                        ->get();
      if ($passages->count() > 0) {
          $response['passages'] = $passages;
      }

      // Opérations modifiées
      $operations = Operation::where('fk_entite', $user->fk_entite)
                            ->where('updated_at', '>', $lastSync)
                            ->get();
      if ($operations->count() > 0) {
          $response['operations'] = $operations;
      }

      // Membres modifiés
      $membres = Membre::where('fk_entite', $user->fk_entite)
                      ->where('updated_at', '>', $lastSync)
                      ->get();
      if ($membres->count() > 0) {
          $response['membres'] = $membres;
      }

      return response()->json($response);
  });

  Points importants pour l'API :

  1. Vérification de session : Les deux routes doivent vérifier que le session_id est valide et non expiré
  2. Timestamps : Assurez-vous que toutes vos tables ont des colonnes updated_at qui sont mises à jour automatiquement
  3. Gestion des suppressions : Pour le refresh partiel, vous pourriez ajouter un champ pour les éléments supprimés :
  {
    "deleted": {
      "sectors": [12, 34],  // IDs des secteurs supprimés
      "passages": [567, 890]
    }
  }

  4. Optimisation : Pour éviter de surcharger, limitez le refresh partiel aux dernières 24-48h maximum
  5. Gestion d'erreurs :
  {
    "status": "error",
    "message": "Session expired",
    "code": "SESSION_EXPIRED"
  }

  L'app Flutter s'attend à ces formats de réponse et utilisera automatiquement le refresh partiel si la dernière sync
  date de moins de 24h, sinon elle fera un refresh complet.
