Задачи по программированию

Тестовое задание
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
Сопроводить документацией своё решение.