Prechádzať zdrojové kódy

поддержка вывода удаленных персонажей через параметр with_deleted

ilg2005 3 mesiacov pred
rodič
commit
9df5477499
1 zmenil súbory, kde vykonal 28 pridanie a 7 odobranie
  1. 28 7
      app/Http/Controllers/CharController.php

+ 28 - 7
app/Http/Controllers/CharController.php

@@ -14,8 +14,9 @@ use App\Models\Char\CharQuest_History;
 class CharController extends Controller
 {
     /**
-     * Получение всех персонажей из базы данных с пагинацией.
-     *     * 
+     * Получение всех персонажей из базы данных с пагинацией
+     * (по умолчанию - только активные персонажи, если в запросе with_deleted=true - в том числе удаленные).
+     * 
      * @return \Illuminate\Http\JsonResponse
      */
     public function GetAllCharacters(Request $request)
@@ -24,8 +25,13 @@ class CharController extends Controller
         $validated = $request->validate([
             'per_page' => 'sometimes|integer|min:1|max:100',
             'search' => 'sometimes|string|nullable|max:50',
+            'with_deleted' => 'sometimes'
         ]);
 
+        // Флаг: включать ли удаленных персонажей
+        // Используем $request->boolean(), который корректно приводит строки ('true', '1', 'on', 'yes') к true
+        $withDeleted = $request->boolean('with_deleted');
+
         $perPage = $validated['per_page'] ?? 15;
         $search = trim($validated['search'] ?? '');
 
@@ -33,7 +39,7 @@ class CharController extends Controller
         $sortOrder = strtolower($request->input('sort_order', 'asc')) === 'desc' ? 'desc' : 'asc';
 
         // whitelist для полей сортировки и выборки
-        $allowedSortFields = ['DBKey', 'Name', 'Level', 'AccountName'];
+        $allowedSortFields = ['DBKey', 'Name', 'Level', 'AccountName', 'Deleted'];
         if (!in_array($sortField, $allowedSortFields, true)) {
             $sortField = 'DBKey';
         }
@@ -41,6 +47,11 @@ class CharController extends Controller
         // 2. Запрос с выборкой только нужных полей
         $query = CharBase::query()->select($allowedSortFields);
 
+        // Если не запрошено with_deleted=true — возвращаем только активных персонажей (Deleted = 0)
+        if (!$withDeleted) {
+            $query->where('Deleted', 0);
+        }
+
         if ($search !== '') {
             $query->where(function ($q) use ($search) {
                 $q->where('Name', 'like', "%{$search}%")
@@ -77,15 +88,24 @@ class CharController extends Controller
 
 
     /**
-     * Получение всех персонажей пользователя по имени пользователя.
+     * Получение всех персонажей пользователя по имени пользователя.     * 
+     * (по умолчанию - только активные персонажи, если в запросе with_deleted=true - в том числе удаленные персонажи)
      *
      * @param  string $username
      * @return \Illuminate\Http\JsonResponse
      */
     public function GetUserCharacters($username)
     {
+        // Флаг: включать ли удаленных персонажей (with_deleted=true/1/on/yes)
+        $withDeleted = request()->boolean('with_deleted');
+
         // Получаем всех персонажей по $username
-        $characters = CharBase::where('AccountName', $username)->get();
+        $characters = CharBase::where('AccountName', $username)
+            ->when(!$withDeleted, function ($q) {
+                // Если не запрошены удаленные персонажи — фильтруем только активных
+                $q->where('Deleted', 0);
+            })
+            ->get();
 
         // Проверяем, найдены ли персонажи
         if ($characters->isEmpty()) {
@@ -95,14 +115,15 @@ class CharController extends Controller
         // Подсчитываем общее время в игре для всех персонажей пользователя
         $totalPlayTime = $characters->sum('TotalPlayTime');
 
-        // Возвращаем только DBKey, Name, Level, GuildDBKey, TotalPlayTime персонажей
+        // Возвращаем только DBKey, Name, Level, GuildDBKey, TotalPlayTime, Deleted для всех персонажей
         $characters = $characters->map(function ($character) {
             return [
                 'DBKey' => $character->DBKey,
                 'Name' => $character->Name,
                 'Level' => $character->Level,
                 'GuildDBKey' => $character->GuildDBKey,
-                'CharPlayTime' => $character->TotalPlayTime
+                'CharPlayTime' => $character->TotalPlayTime,
+                'Deleted' => $character->Deleted,
             ];
         });