Как стать автором
Поиск
Написать публикацию
Обновить

Разбор задачи из реального собеса. Предложить правила для улучшения структуры JSON

Уровень сложностиСредний

Такие разборы задач отлично помогают потренироваться в подходах к решению рабочих задач + увеличить насмотренность.

Условия задачи

Предусловие

Медицинская компания оказывает услуги по лечению пациентов. У пациентов есть личный кабинет, где они могут посмотреть:

  • историю своих заказов,

  • их наполнение,

  • стоимость,

  • скачать результаты исследований.

Для того, чтобы это сделать, был реализован ответ от сервера в котором эта информация возвращается в виде JSON файла, но заказчика не удовлетворяет результат.

Что нужно сделать?

Необходимо изучить структуру JSON документа и предложить правки для улучшения структуры.

Значения, которые обязательно должны быть в документе

Общие сведения о заказе:

  • Уникальный идентификатор заказа,

  • Дата создания заказа,

  • Статус заказа (например, "завершён", "в процессе", "ожидает оплаты"),

  • Общая стоимость заказа.

Информация о пациенте:

  • Уникальный идентификатор пациента,

  • Имя и фамилия пациента.

Список оказанных услуг в заказе:

Для каждой услуги

  • Уникальный идентификатор услуги,

  • Название услуги (например, "Общий анализ крови", "МРТ"),

  • Статус выполнения (например, "завершено", "ожидает результатов", "отменено"),

  • Дата оказания услуги,

  • Цена за услугу,

  • Ссылка на PDF-отчет, если доступен.

{
  "fullName": "Иван Иванов",
  "order": [
    {
      "orderId": "ORD-2024-00123",
      "OrderDate": "2024-10-26",
      "orderStatus": ["completed"],
      "totalCost": 150.00,
      "service":
        {
          "serviceId": "SERV-1001",
          "serviceName": "Общий анализ крови",
          "serviceStatus": "completed",
          "service_date": "2024-10-20",
          "servicePrice": 50.00,
          "reportUrl": "https://medical-center.com/reports/ORD-2024-00123_SERVICE-1001.pdf"
        },
      "donloadOptions": {
        "fullOrderReport": "https://medical-center.com/reports/ORD-2024-00123_full.pdf"
      }
    },
    {
      "orderId": "ORD-2024-00124",
      "OrderDate": "2024-10-15",
      "orderStatus": ["in progress"],
      "totalCost": 80.00,
      "service": 
        {
          "serviceId": "SERV-1003",
          "serviceName": "Рентген грудной клетки",
          "serviceStatus": "pending",
          "service_date": "2024-10-10",
          "servicePrice": 80.00,
          "reportUrl": "https://medical-center.com/reports/ORD-2024-00124_SERVICE-1003.pdf"
        }
      ,
      "donloadOptions": {
        "fullOrderReport": "https://medical-center.com/reports/ORD-2024-00124_full.pdf"
      }
    }
  ]
}

Начнем с явных и критических ошибок

1. Добавил бы идентификатор пользователя, так как могут быть однофамильцы. Да и в целом, по текстовому полю работать сложнее

{
"userId": "PAT-45678",
"name": "Иван",
"middleName": "",
"lasname": "Иванов",

2. Разделил бы ФИО на отдельные части

{
"userId": "PAT-45678",
"name": "Иван"
"middleName": "",
"lasname": "Иванов",

3. Статус заказа исправить с массива на просто текст, так как в одно время статус не может иметь 2 значения и вообще, я бы сделал его ENUM

"orders": [
{
"id": "ORD-2024-00123",
"date": "2024-10-26",
"status": "IN_PROGRESS",
"totalCost": 140.00,
"currency": "RUB",
"services": [

4. Параметр services

Написал бы во множественном числе, сделал массивом, так как у нас в одном заказе может быть больше одной услуги

"services": [
{
"id": "SERV-1001" ,
"name": "Общий анализ крови",
"status": "COMPLETED",
"date": "2024-10-20",
"qty": 1,
"price": 50.00,
"discountSum": 10.00,
"currency": "RUB",
"reportUrl": "https://medical-center.com/reports/ORD-2024-00123_SERVICE-1001. pdf"
},
{
"id": "SERV-1002",
"name": "МРТ головного мозга",
"status": "PENDING",
"date": "2024-10-22",
"qty": 1,
"price": 100.00,
"discountSum": null,
"reportUrl": null
},

Переходим к неявным ошибкам

5. Обращаем внимание на стиль написания параметров. Все ли написано в общем стиле: cammelCase, snake_case. В задании затесался параметр service_date и OrderDate

6. Смотрим на орфографические ошибки, как параметр назовешь, так он в код и заплывет :) здесь у нас ошибка в слове downloadOption - не хватает буквы

"servicePrice": 50.00,
"reportUrl": "https://medical-center.com/reports/ORD-2024-00123_SERVICE-1001. pdf"
},
"donloadOptions": {
"fullOrderReport": "https://medical-center.com/reports/ORD-2024- 00123_full.pdf"
}
},
{
"orderId": "ORD-2024-00124",
"OrderDate": "2024-10-15",
"orderStatus": ["in progress"],
"totalCost": 80.00,
"service":
{
"serviceId": "SERV-1003",
"serviceName": "Рентген грудной клетки",
"serviceStatus": "pending",
"service_date": "2024-10-10",
"servicePrice": 80.00,
"reportUrl": "https://medical-center.com/reports/ORD-2024-00124_SERVICE-1003. pdf"
}
,
"donloadOptions": {
"fullrderReport": "https://medical-center.com/reports/ORD-2024-00124 full.pdf"

7. Можно убрать лишние слова в заказе и услуге

"orders": [
{
"id": "ORD-2024-00123",
"date": "2024-10-26",
"status": "IN_PROGRESS",
"totalCost": 140.00,
"currency": "RUB",
"services": [
{
"id": "SERV-1001",
"name": "Общий анализ крови",
"status": "COMPLETED",
"date": "2024-10-20",
"qty": 1,
"price": 50.00,
"discountSum": 10.00,
"currency": "RUB",
"reportUrl": "https://medical-center. com/reports/ORD-2024-00123_SERVICE-1001. pdf"
},

8. Я бы добавил еще дополнительных параметров в заказ и услугу:

Например, 

  • currency - валюта,

  • discountSum - сумма скидки, 

  • qty - количество заказанных одинаковых услуг.

но это уже вещи, которые стоит добавлять только после сбора требований в реальной жизни.

Итоговый вариант выглядит так:

{
"userId": "PAT-45678",
"name": "Иван",
"middleName": "",
"lasname": "Иванов",
"orders": [
  {
   "id": "ORD-2024-00123",
   "date": "2024-10-26",
   "status": "IN_PROGRESS",
   "totalCost": 140.00,
   "currency": "RUB",
   "services": ["..."],
   "downloadOption": {
     "fullOrderReport": "https://medical-center.com/reportsORD-2024-00123_full.pdf"
   }
 },
 {
   "id": "ORD-2024-00124",
   "date": "2024-10-15",
   "status": "COMPLETED",
   "totalCost": 80.00,
   "services": [
     {
      "id": "SERV-1003",
      "name": "Рентген грудной клетки",
      "status": "COMPLETED",
      "date": "2024-10-10",
      "qty" : 1,
      "price": 80.00,
      "discountSum": null,
      "reportUrl": null
     }
   ],
   "downloadOption": {
    "fullOrderReport": "https://medical-center. com/reports/ORD-2024-00124_fult. pdf"
   } 
  } 
 ] 
}
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.