|
@@ -72,7 +72,7 @@ class CharController extends Controller
|
|
|
], 200);
|
|
], 200);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* Получение всех персонажей пользователя по имени пользователя.
|
|
* Получение всех персонажей пользователя по имени пользователя.
|
|
|
*
|
|
*
|
|
@@ -153,7 +153,7 @@ class CharController extends Controller
|
|
|
'msg' => 'Items successfully sent.'
|
|
'msg' => 'Items successfully sent.'
|
|
|
], 200);
|
|
], 200);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Получение всех данных персонажа из указанной таблицы.
|
|
* Получение всех данных персонажа из указанной таблицы.
|
|
@@ -171,7 +171,7 @@ class CharController extends Controller
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$modelClass = $config['model'];
|
|
$modelClass = $config['model'];
|
|
|
- $key = $config['key'];
|
|
|
|
|
|
|
+ $key = $config['key'];
|
|
|
|
|
|
|
|
// Проверяем существование персонажа
|
|
// Проверяем существование персонажа
|
|
|
if (!CharBase::find($char_id)) {
|
|
if (!CharBase::find($char_id)) {
|
|
@@ -187,7 +187,7 @@ class CharController extends Controller
|
|
|
|
|
|
|
|
return response()->json([
|
|
return response()->json([
|
|
|
'code' => 0,
|
|
'code' => 0,
|
|
|
- 'msg' => 'Data successfully received.',
|
|
|
|
|
|
|
+ 'msg' => 'Data successfully received.',
|
|
|
'data' => $data
|
|
'data' => $data
|
|
|
], 200);
|
|
], 200);
|
|
|
}
|
|
}
|
|
@@ -209,9 +209,9 @@ class CharController extends Controller
|
|
|
return response()->json(['code' => -1, 'msg' => 'Table not allowed or does not exist.'], 400);
|
|
return response()->json(['code' => -1, 'msg' => 'Table not allowed or does not exist.'], 400);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- $modelClass = $config['model'];
|
|
|
|
|
- $ownerKey = $config['key']; // Ключ, по которому связывается с CharBase - id персонажа
|
|
|
|
|
- $primaryKey = $config['pk']; // Для CharBase - DBKey
|
|
|
|
|
|
|
+ $modelClass = $config['model'];
|
|
|
|
|
+ $ownerKey = $config['key']; // Ключ, по которому связывается с CharBase - id персонажа
|
|
|
|
|
+ $primaryKey = $config['pk']; // Для CharBase - DBKey
|
|
|
|
|
|
|
|
// 2. Определяем, какую запись обновляем
|
|
// 2. Определяем, какую запись обновляем
|
|
|
if ($table_name === 'CharBase') {
|
|
if ($table_name === 'CharBase') {
|
|
@@ -241,52 +241,74 @@ class CharController extends Controller
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * Получает конкретный предмет по CharItemID.
|
|
|
|
|
|
|
+ * Получает конкретный предмет по $char_item_id из указанной таблицы $table предметов.
|
|
|
*
|
|
*
|
|
|
|
|
+ * @param string $table
|
|
|
* @param int $char_item_id
|
|
* @param int $char_item_id
|
|
|
* @return \Illuminate\Http\JsonResponse
|
|
* @return \Illuminate\Http\JsonResponse
|
|
|
*/
|
|
*/
|
|
|
- public function GetCharItem(int $char_item_id)
|
|
|
|
|
|
|
+ public function GetCharItem(string $table, int $char_item_id)
|
|
|
{
|
|
{
|
|
|
- $item = CharItem::find($char_item_id);
|
|
|
|
|
|
|
+ // Получаем конфигурацию таблицы (модель и первичный ключ)
|
|
|
|
|
+ $config = $this->resolveTable($table);
|
|
|
|
|
+ if (!$config) {
|
|
|
|
|
+ return response()->json(['code' => -1, 'msg' => 'Table not allowed or does not exist.'], 400);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $modelClass = $config['model'];
|
|
|
|
|
+ $pk = $config['pk'];
|
|
|
|
|
+
|
|
|
|
|
+ // Ищем предмет по первичному ключу из конфигурации
|
|
|
|
|
+ $item = $modelClass::where($pk, $char_item_id)->first();
|
|
|
|
|
|
|
|
if (!$item) {
|
|
if (!$item) {
|
|
|
return response()->json([
|
|
return response()->json([
|
|
|
'code' => -2,
|
|
'code' => -2,
|
|
|
- 'msg' => 'CharItem not found.'
|
|
|
|
|
|
|
+ 'msg' => 'Item not found.',
|
|
|
], 404);
|
|
], 404);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return response()->json([
|
|
return response()->json([
|
|
|
'code' => 0,
|
|
'code' => 0,
|
|
|
- 'msg' => 'CharItem successfully received.',
|
|
|
|
|
|
|
+ 'msg' => 'Item successfully received.',
|
|
|
'data' => $item,
|
|
'data' => $item,
|
|
|
], 200);
|
|
], 200);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * Обновляет конкретный предмет по CharItemID.
|
|
|
|
|
|
|
+ * Обновляет конкретный предмет по $char_item_id в указанной таблице $table предметов.
|
|
|
*
|
|
*
|
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param \Illuminate\Http\Request $request
|
|
|
|
|
+ * @param string $table
|
|
|
* @param int $char_item_id
|
|
* @param int $char_item_id
|
|
|
* @return \Illuminate\Http\JsonResponse
|
|
* @return \Illuminate\Http\JsonResponse
|
|
|
*/
|
|
*/
|
|
|
- public function UpdateCharItem(Request $request, int $char_item_id)
|
|
|
|
|
|
|
+ public function UpdateCharItem(Request $request, string $table, int $char_item_id)
|
|
|
{
|
|
{
|
|
|
- $item = CharItem::find($char_item_id);
|
|
|
|
|
|
|
+ // Получаем конфигурацию таблицы (модель и первичный ключ)
|
|
|
|
|
+ $config = $this->resolveTable($table);
|
|
|
|
|
+ if (!$config) {
|
|
|
|
|
+ return response()->json(['code' => -1, 'msg' => 'Table not allowed or does not exist.'], 400);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $modelClass = $config['model'];
|
|
|
|
|
+ $pk = $config['pk'];
|
|
|
|
|
+
|
|
|
|
|
+ // Ищем предмет по первичному ключу из конфигурации
|
|
|
|
|
+ $item = $modelClass::where($pk, $char_item_id)->first();
|
|
|
|
|
|
|
|
if (!$item) {
|
|
if (!$item) {
|
|
|
return response()->json([
|
|
return response()->json([
|
|
|
'code' => -2,
|
|
'code' => -2,
|
|
|
- 'msg' => 'CharItem not found.'
|
|
|
|
|
|
|
+ 'msg' => 'Item not found.',
|
|
|
], 404);
|
|
], 404);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // Определяем защищённые поля, которые нельзя обновлять
|
|
|
|
|
- $protected = ['CharItemID', 'Owner', 'Account'];
|
|
|
|
|
|
|
+ // Определяем защищённые поля динамически, чтобы не дать изменить PK и владельца
|
|
|
|
|
+ $protected = [$pk, 'Owner', 'Account'];
|
|
|
$data = $request->except($protected);
|
|
$data = $request->except($protected);
|
|
|
|
|
|
|
|
- return $this->_updateAndRespond($item, $data, 'CharItem successfully updated.');
|
|
|
|
|
|
|
+ return $this->_updateAndRespond($item, $data, 'Item successfully updated.');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//------------------------------ ПРИВАТНЫЕ МЕТОДЫ -----------------------------------------
|
|
//------------------------------ ПРИВАТНЫЕ МЕТОДЫ -----------------------------------------
|
|
@@ -307,11 +329,12 @@ class CharController extends Controller
|
|
|
* Используется в resolveTable(), GetCharacterData(), UpdateCharacterData().
|
|
* Используется в resolveTable(), GetCharacterData(), UpdateCharacterData().
|
|
|
*/
|
|
*/
|
|
|
private const TABLES = [
|
|
private const TABLES = [
|
|
|
- 'CharBase' => ['key' => 'DBKey', 'model' => CharBase::class, 'pk' => 'DBKey'],
|
|
|
|
|
- 'CharItem' => ['key' => 'Owner', 'model' => CharItem::class, 'pk' => 'CharItemID'],
|
|
|
|
|
- 'CharFellow' => ['key' => 'Owner', 'model' => CharFellow::class, 'pk' => 'FellowID'],
|
|
|
|
|
|
|
+ 'CharBase' => ['key' => 'DBKey', 'model' => CharBase::class, 'pk' => 'DBKey'],
|
|
|
|
|
+ 'CharItem' => ['key' => 'Owner', 'model' => CharItem::class, 'pk' => 'CharItemID'],
|
|
|
|
|
+ 'CharFellow' => ['key' => 'Owner', 'model' => CharFellow::class, 'pk' => 'FellowID'],
|
|
|
|
|
+ 'CharCashItem_OutputBox' => ['key' => 'Owner', 'model' => CharCashItem_OutputBox::class, 'pk' => 'ItemDBIndex'],
|
|
|
];
|
|
];
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Общий метод для обновления модели и формирования ответа.
|
|
* Общий метод для обновления модели и формирования ответа.
|
|
@@ -326,7 +349,7 @@ class CharController extends Controller
|
|
|
// 1. Фильтруем поля для массового присвоения
|
|
// 1. Фильтруем поля для массового присвоения
|
|
|
$fillable = $model->getFillable();
|
|
$fillable = $model->getFillable();
|
|
|
$guarded = $model->getGuarded();
|
|
$guarded = $model->getGuarded();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if (!empty($fillable)) {
|
|
if (!empty($fillable)) {
|
|
|
// Если есть fillable - используем только их
|
|
// Если есть fillable - используем только их
|
|
|
$filteredData = array_intersect_key($data, array_flip($fillable));
|
|
$filteredData = array_intersect_key($data, array_flip($fillable));
|
|
@@ -339,7 +362,7 @@ class CharController extends Controller
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 2. Конвертируем null-поля в '', чтобы вместо NULL в БД сохранялась пустая строка
|
|
// 2. Конвертируем null-поля в '', чтобы вместо NULL в БД сохранялась пустая строка
|
|
|
- $filteredData = array_map(static fn ($v) => $v === null ? '' : $v, $filteredData);
|
|
|
|
|
|
|
+ $filteredData = array_map(static fn($v) => $v === null ? '' : $v, $filteredData);
|
|
|
|
|
|
|
|
if (empty($filteredData)) {
|
|
if (empty($filteredData)) {
|
|
|
return response()->json(['code' => -6, 'msg' => 'No valid fields to update.'], 400);
|
|
return response()->json(['code' => -6, 'msg' => 'No valid fields to update.'], 400);
|
|
@@ -350,8 +373,8 @@ class CharController extends Controller
|
|
|
$ok = $model->update($filteredData);
|
|
$ok = $model->update($filteredData);
|
|
|
} catch (\Throwable $e) {
|
|
} catch (\Throwable $e) {
|
|
|
return response()->json([
|
|
return response()->json([
|
|
|
- 'code' => -7,
|
|
|
|
|
- 'msg' => 'Database error while updating record.',
|
|
|
|
|
|
|
+ 'code' => -7,
|
|
|
|
|
+ 'msg' => 'Database error while updating record.',
|
|
|
'error' => $e->getMessage(),
|
|
'error' => $e->getMessage(),
|
|
|
], 500);
|
|
], 500);
|
|
|
}
|
|
}
|
|
@@ -359,14 +382,14 @@ class CharController extends Controller
|
|
|
if (!$ok) {
|
|
if (!$ok) {
|
|
|
return response()->json([
|
|
return response()->json([
|
|
|
'code' => -8,
|
|
'code' => -8,
|
|
|
- 'msg' => 'Update failed, record not modified.',
|
|
|
|
|
|
|
+ 'msg' => 'Update failed, record not modified.',
|
|
|
], 500);
|
|
], 500);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 4. Возвращаем успешный ответ
|
|
// 4. Возвращаем успешный ответ
|
|
|
return response()->json([
|
|
return response()->json([
|
|
|
'code' => 0,
|
|
'code' => 0,
|
|
|
- 'msg' => $successMsg,
|
|
|
|
|
|
|
+ 'msg' => $successMsg,
|
|
|
'data' => $model->fresh()
|
|
'data' => $model->fresh()
|
|
|
], 200);
|
|
], 200);
|
|
|
}
|
|
}
|