Могу ли я попросить помощи в решении тестового задания для получения работы?

0

Подался на вакансию WordPress Developer, прислали такое тестовое, как я понимаю вакансии для junior WP Dev. Сроки естестенно прошли, а я задание так и не решил. Сейчас хочу для себя разобраться с данным заданием и с процессом реализации подобных задач. Буду очень признателен за детали и подробности. Предполагаю, что рассмотрение подобной задачи будет интересным и наглядным пособием применения полученных знаний из курса на практике. Спасибо! (в скобочках я оставлял свои комментарии)

***********************************************************************************************
Тестовое задание на должность разработчика WordPress


Поднять сайт на основании WordPress + WooCommerce.  (эта задача решена, хоть что-то я знаю)


1. Синхронизация базы товаров с остатками
Синхронизацию базы товаров с остатками необходимо сделать своим независимым плагином, “wpsync-webspark”, который будет обращаться по API посредством GET-запроса:

https://my.api.mockaroo.com/products.json?key=89b23a40
Try with cURL:
curl -H "X-API-Key: 89b23a40" https://my.api.mockaroo.com/products.json
Данный API возвращает JSON-массив товаров, содержащий следующие поля: 

sku; 
name; 
description; 
price; 
picture; 
in_stock.


Обновление товарной базы должно происходить каждый час.
Максимальное кол-во товаров в базе: 10,000.
В случае, если в базе нет определенного sku товара, такой товар нужно создать. 
В случае, если sku товара уже существует, необходимо обновить все поля, в которых информация была изменена. 
В случае, если какой-либо из товаров не приходит, он недоступен для заказа и должен быть удален с сайта. Однако стоит предусмотреть ситуацию когда API не возвращает результат, чтобы по причине отсутствия соединения не занулить все товары в базе.


2. Отправка информации о заказе
(необязательный)

Во время оформления заказа необходимо отправить через API информацию о том, какие SKU и в каком количестве заказаны. Для этого необходимо вызвать API посредством POST-запроса: 

https://my.api.mockaroo.com/order.json?key=89b23a40&__method=POST
Try with cURL:
curl -H "X-API-Key: 89b23a40" -X POST https://my.api.mockaroo.com/order.json
и передавать JSON-массив SKU и количества заказанных товаров в виде:

[
  {
    "sku": "566fe0cb-9261-41f8-95d2-479cb41497ac",
    "items": 1
  },
  {
    "sku": "83878239-bd0f-419c-9ed0-cbbffb288cb6",
    "items": 3
  }
]

В случае ответа сервера {"s":"accepted"} - заказ считаем успешно оформленным. 
В случае ответа сервера {"s":"declined"} - невозможно выполнить заказ по разным причинам. Например, какого-то товара может не быть в наличии. 
Если заказ невозможно оформить, физически заказ на стороне WP не должен быть создан, товары в корзине не остаются.

 
3. Требования к плагину
Плагин должен иметь название “wpsync-webspark”.
Файлы плагина необходимо залить в любой GIT-репозиторий и прислать ссылку, доступную для просмотра. 
В плагине должен быть файл readme.md, в котором пошагово расписан порядок разворачивания и запуска плагина, чтобы тех. специалист мог проверить ТЗ.

4. Внимание! 
Обязательно! Если что-либо не понятно в постановке задачи, не стесняйтесь спросить, так как правильно понятая задача - залог успеха. Обратное - тоже верно.
На задание отводится 24 часа (одни сутки) с момента выдачи. 

php
mysql

4 ответов

0

Что из задания именно непонятно?

1
1. С какой из подзадач начать реализацию?

Для начала нужно разобраться как создаются плагины в wordpress:

https://developer.wordpress.org/plugins/

2. Как реализовать парсинг базы каждый час?

Нужно почитать что такое cron и как они работают:

https://ru.wikipedia.org/wiki/Cron

И желательно с основами linux:

https://fructcode.com/ru/courses/linux-and-git/

А также посмотреть как в Wordpress работать с CRON:

https://developer.wordpress.org/plugins/cron/understanding-wp-cron-scheduling/

3. Как сравнивать все SKU в базе, с SKU из сервера? SKU приходит в виде строки сосоящей из цифр, букв и символов (подобно полю с паролями в БД). Предполагаю, что это, как-то связано с движком WP, так как SKU это его стандартная сущность (но это не точно).

Для начала нужно почитать что такое CURL и как с ним работать в PHP (на самом деле, это очень просто), тут много примеров с CURL в Wordpress работать, в том числе с доп. параметрами (как в задании ключ к API указывать):

https://developer.wordpress.org/reference/functions/wp_remote_get/

function wp_remote_get( $url, $args = array() ) {
    $http = _wp_http_get_object();
    return $http->get( $url, $args );
}

аргументы, пример (чтобы в API ключ через headers передать):

$args = array(
      'headers' => array(
        'Content-Type' => 'application/json',
        'X-Api-Key' => 'apikey12345'
)

Если пока нет понимания, что такое GET, POST, PUT,  headers и т.д. стоит почитать теорию HTTP:

https://ru.wikipedia.org/wiki/HTTP

и посмотреть про GET, POST:

https://fructcode.com/ru/courses/php-and-mysql/video-form-get-and-post/

Библиотеки для Curl есть почти для всех языков программирования, для начала стоит почитать, что эта за такая программа:

https://ru.wikipedia.org/wiki/CURL

Когда через curl будет приходить ответ от API, он будет в json, этот json можно перевести в объект php:

https://www.php.net/manual/en/function.json-decode.php

3. Как сравнивать все SKU в базе, с SKU из сервера? SKU приходит в виде строки сосоящей из цифр, букв и символов (подобно полю с паролями в БД). Предполагаю, что это, как-то связано с движком WP, так как SKU это его стандартная сущность (но это не точно).

В задании сказано, что:

Данный API возвращает JSON-массив товаров, содержащий следующие поля: 

sku; 
name; 
description; 
price; 
picture; 
in_stock.

Соответственно, есть в базе данных поле sku и в данных, которые пришли от API. Когда делается запрос через CURL каждый час через CRON берутся данные из API (то что лежит в sku) и делается SELECT * FROM названиетаблицы WHERE sku = SKU_ИЗ_API, если база данных возвращает не пустой результат, значит этот товар уже есть в базе дальше сравниваются остальные поля товара, что-то типа:

if ($result->name !== $api_result->name || $result->description!== $api_result->description || перечисление остальных полей) {

    // Здесь пишется код обновления mysql таблицы

   // UPDATE название_таблицы
  // SET name= $api_result->name, description=$api_result->description, ........
  // WHERE sku=$api_result->sku

} 

Если еще нет в базе sku которое пришло через API, делается insert в базу с данными которые пришли через API. Примерно так. Ну и поставить проверки, что когда после выполнения CURL приходит пустой результат, не делать insert или update в базу данных. 

0

1. С какой из подзадач начать реализацию?

2. Как реализовать парсинг базы каждый час?

3. Как сравнивать все SKU в базе, с SKU из сервера? SKU приходит в виде строки сосоящей из цифр, букв и символов (подобно полю с паролями в БД). Предполагаю, что это, как-то связано с движком WP, так как SKU это его стандартная сущность (но это не точно).

4. Как зациклить проверку базы по SKU на 10000 едениц, при этом выполняя проверку на его наличие в спарсеной БД?

Уже пересматриваю весь курс PHP/MySQP с первого урока. Но, третий глаз не открывается, я не понимаю с чего начинать реализацию задачи! Может быть, понимание придет ближе к последнему видео, но это не точно.

0

Спасибо! Буду разбираться!

Sign up or Log in to write an answer