|
|
@@ -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,
|
|
|
];
|
|
|
});
|
|
|
|