Обновление профиля в Swagger, как установить массив данных - PullRequest
0 голосов
/ 07 апреля 2020

В моем приложении @ vue / cli 4.0.5 я сохраняю данные своего профиля в виде массива профиля:

 axios.put(this.apiUrl + '/personal/profile/' + this.userProfileRow.id, {
     profile: {
         first_name: this.userProfileRow.first_name,
         last_name: this.userProfileRow.last_name,
         phone: this.userProfileRow.phone,
         website: this.userProfileRow.website
     },
 }, this.credentialsConfig).then((/*response*/) => {

и в консоли браузера вижу запрос PUT с массивом

profile: {first_name: "a", last_name: "b", phone: "c", website: "d"}

Теперь я делаю описание в swagger с версией api 3 как:

  /personal/profile/{user_id}:
    put:
      tags:
        - profile
      summary: personal profile update editable fields

      responses:
        '200':
          description: Successful update
        '400':
          description: Invalid profile editable fields updating

      operationId: updateProfileEditableFieldsByBearerToken

      parameters:
        - name: user_id
          in: path
          description: The user_id update editable fields.
          required: true
          schema:
            type: integer
            default: 1
            example: 1

      requestBody:
        description: Editable fields
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                profile:
                  type: array
                  items:
                    $ref: '#/components/schemas/ProfileEditableFields'

              required:
                - profile

components:

  schemas:

    ProfileEditableFields:
      properties:
        first_name:
          type: string
        last_name:
          type: string
        phone:
          type: string
        website:
          type: string

Но я не могу заполнить ProfileEditableFields, в моей консоли у меня есть: https://prnt.sc/rugv28 1) Я не знаете, какой формат является допустимым для любого параметра ProfileEditableFields? С указанными выше полями данных был сгенерирован следующий запрос curl:

curl -X PUT "http://myserver.com/api/personal/profile/1" -H "accept: */*" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/x-www-form-urlencoded" -d "profile=first_name%20%3A%20111%0A%2Clast_name%20%3A%20222%0A%2Cphone%3A%20333333%2Cwebsite%3A%204444444"

Но с кодом 200 все поля first_name, last_name ... были очищены в дБ, как если бы были отправлены пустые значения (API разрешает пустые поля) .

2) Как установить некоторые данные по умолчанию для любых элементов структуры ProfileEditableFields?

МОДИФИЦИРОВАННЫЙ БЛОК:

В приложении / Http / Controllers /API/PersonalController.php conrtoller моего бэкэнд-приложения Я добавил логин в методе обновления:

public function update(Request $request, $id)
{
    $loggedUser = Auth::guard('api')->user();

    \Log::info('PersonalController update $this->requestData::');
    \Log::info(print_r(  $this->requestData, true  ));

    $loggedUser->first_name    = !empty($this->requestData['profile']['first_name']) ? $this->requestData['profile']['first_name'] : '';

и при обновлении профиля из моего приложения client @ vue / cli 4.0.5 я вижу логирование как:

2020-04-13 03:28:10] local.INFO: PersonalController update $this->requestData:: [2020-04-13 03:28:10] local.INFO: Array ( [profile] => Array ( [first_name] => John [last_name] => Glads [phone] => 252-129-0916 [website] => JohnGlads@select-task.site.com ) )

Но когда я запускаю метод update из swagger, я не вижу ни одной строки журнала обновлений, как указано выше, но вижу ответ 200 в swagger: https://prnt.sc/ry6con и в запросе: https://prnt.sc/ry6drl Я предполагаю, что у меня неверный параметр профиля, но я не понимаю, почему?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...