Задачи по программированию
Тестовое задание
Backend-разработчик на php (junior)
Это тестовое задание не имеет никаких технических ограничений. Ты можешь использовать любые инструменты.
Задание №1
После успешной покупки билетов на событие, данные попадают в список заказов. Список заказов сохраняется в таблице MySql в виде:
Где:
id
– int(10) – инкрементальный порядковый номер заказаevent_id
– int(11) – уникальный ид события. У каждого события есть свое название, описание, расписание, цены и свой уникальныйevent_id
соответственноevent_date
– varchar(10) – дата и время на которое были куплены билетыticket_adult_price
– int(11) – цена взрослого билета на момент покупкиticket_adult_quantity
– int(11) – количество купленных взрослых билетов в этом заказеticket_kid_price
– int(11) – цена детского билета на момент покупкиticket_kid_quantity
– int(11) – количество купленных детских билетов в этом заказеbarcode
– varchar(120) – уникальный штрих код заказаequal_price
– int(11) – общая сумма заказаcreated
– datetime – дата создания заказа
Задача: написать функцию, которая будет добавлять заказы в эту таблицу.
Аргументы которые функция получает на входе: event_id
, event_date
, ticket_adult_price
, ticket_adult_quantity
, ticket_kid_price
, ticket_kid_quantity
Нужно сгенерировать barcode
, который будет уникальным со случайным набором цифр, он не должен быть порядковым.
Так же, существует некая сторонняя api.site.com. API писать не нужно, возвращаемые данные можно замокать и возвращать в случайном порядке. в которой нужно сделать бронь заказа отправив ей (https://api.site.com/book) event_id
, event_date
, ticket_adult_price
, ticket_adult_quantity
, ticket_kid_price
, ticket_kid_quantity
, barcode
. На что она может вернуть либо {message: 'order successfully booked'}
, либо {error: 'barcode already exists'}
. В случае если получаем ошибку, нужно сгенерировать новый barcode и повторить попытку. Важно учесть, если запрос будет происходить одновременно, не должно возникнуть такой ситуации, что двум разным заказам присвоился один номер.
После успешной брони, нужно отправить на стороннюю апи запрос с подтверждением (https://api.site.com/approve), который принимает только barcode. Ответов может быть 2 варианта – успешный: {message: 'order successfully aproved'}
и различные варианты ошибок {error: 'event cancelled'}
, {error: 'no tickets'}
, {error: 'no seats'}
, {error: 'fan removed'}
. В случае успеха, сохраняем заказ в БД
Задание №2
- Некоторые события нужно продавать с дополнительными типами билетов – льготный и групповой, у которых будут свои цены и название. Имеется информация, что вероятно, будут другие типы билетов, которые нужно будет добавить. Нужно уметь сохранять при заказе 2 дополнительных типа билета, льготный и групповой в бд. Задача – Нормализовать таблицу учитывая добавленные типы билетов, показать конечный вид таблицы. Объяснить свое решение.
- Часто посетители из одного заказа приходят не одновременно на события. Возникает необходимость проверять их билеты по отдельности. Для этого у каждого билета должен быть свой баркод. Если в одном заказе было куплено несколько билетов, 2 взрослых, 3 детских, 4 льготных – то должно быть 9 баркодов для каждого билета соответственно. Задача – Нормализовать таблицу, учитывая что у каждого билета свой баркод, показать конечный вид таблицы. Объяснить свое решение.
Задание №3
Сопроводить документацией своё решение.