Browse Source

эндпоинты для получения и обновления конкретного письма для персонажа + методы контроллера

ilg2005 3 months ago
parent
commit
2db4542360
2 changed files with 73 additions and 0 deletions
  1. 69 0
      app/Http/Controllers/CharController.php
  2. 4 0
      routes/api.php

+ 69 - 0
app/Http/Controllers/CharController.php

@@ -433,6 +433,75 @@ class CharController extends Controller
         return $this->_updateAndRespond($quest, $data, 'Quest successfully updated.');
     }
 
+    /**
+     * Получение письма персонажа по char_id и MailDBKey.
+     * Возвращает ту же структуру записи, что и GetCharacterData/CharMail.
+     *
+     * @param string $char_id
+     * @param string $mail_id
+     * @return \Illuminate\Http\JsonResponse
+     */
+    public function GetCharMail(string $char_id, string $mail_id)
+    {
+        // Проверяем существование персонажа
+        if (!CharBase::find($char_id)) {
+            return response()->json(['code' => -2, 'msg' => 'Character not found.'], 404);
+        }
+
+        // Получаем письмо, принадлежащее персонажу
+        $mail = CharMail::where('RecverDBKey', $char_id)
+            ->where('MailDBKey', $mail_id)
+            ->first();
+
+        if (!$mail) {
+            return response()->json([
+                'code' => -3,
+                'msg' => 'Mail not found for this character.',
+            ], 404);
+        }
+
+        return response()->json([
+            'code' => 0,
+            'msg' => 'Mail successfully received.',
+            'data' => $mail,
+        ], 200);
+    }
+
+    /**
+     * Обновление письма персонажа по char_id и MailDBKey.
+     * Принимает те же поля, что и UpdateCharacterData/CharMail, защищая ключи владения и PK.
+     *
+     * @param \Illuminate\Http\Request $request
+     * @param string $char_id
+     * @param string $mail_id
+     * @return \Illuminate\Http\JsonResponse
+     */
+    public function UpdateCharMail(Request $request, string $char_id, string $mail_id)
+    {
+        // Проверяем существование персонажа
+        if (!CharBase::find($char_id)) {
+            return response()->json(['code' => -2, 'msg' => 'Character not found.'], 404);
+        }
+
+        // Получаем письмо, принадлежащее персонажу
+        $mail = CharMail::where('RecverDBKey', $char_id)
+            ->where('MailDBKey', $mail_id)
+            ->first();
+
+        if (!$mail) {
+            return response()->json([
+                'code' => -3,
+                'msg' => 'Mail not found for this character.',
+            ], 404);
+        }
+
+        // Защищаем поля связи и первичный ключ
+        $protected = ['RecverDBKey', 'MailDBKey', 'Owner', 'Account'];
+        $data = $request->except($protected);
+
+        return $this->_updateAndRespond($mail, $data, 'Mail successfully updated.');
+    }
+
     //------------------------------ ПРИВАТНЫЕ МЕТОДЫ -----------------------------------------
     /**
      * Возвращает конфигурацию таблицы или null, если таблица не разрешена.

+ 4 - 0
routes/api.php

@@ -43,6 +43,10 @@ Route::group(['prefix' => 'api'], function () {
     Route::get('GetCharQuest/{char_id}/{rec_id}/{table?}', 'CharController@GetCharQuest');
     Route::post('UpdateCharQuest/{char_id}/{rec_id}/{table?}', 'CharController@UpdateCharQuest');    
     
+    // Получение и обновление письма по char_id и MailDBKey
+    Route::get('GetCharMail/{char_id}/{mail_id}', 'CharController@GetCharMail');
+    Route::post('UpdateCharMail/{char_id}/{mail_id}', 'CharController@UpdateCharMail');
+    
     Route::group(['prefix' => 'funcs_adm'], function () {
         Route::get('UpdateCharItemAccount/{CharID?}', 'ADMIN\AdminController@UpdateCharItemAccount');
         Route::get('CheckCharItemAccount/{CharID?}/{StrRecordKind?}', 'ADMIN\AdminController@CheckCharItemAccount');