Coder Social home page Coder Social logo

nevatrip-test-task's Introduction

1. Тестовое задание на верстку

Это тестовое задание не имеет никаких технических ограничений. Ты можешь использовать любые инструменты. Делай так, как ты считаешь, будет правильно и хорошо.

1.1 Верстка блока

Нужно сверстать страницу по макету по принципу mobile-first.

Примечания:

  • Если времен больше чем на 1 строчку, то в конце строчки должна появиться кнопка "ещё..." при нажатии на которую будут раскрываться скрытые времена.
  • Под ценой может не быть надписи "1200₽ на причале" в таком случае цена должна быть выровнена посередине относительно копки "подробнее"

✅ Решение:

1.2 Таблица на странице

В текст статьи на странице с адаптивной версткой менеджеры добавили таблицу. На десктопе таблицы выглядят хорошо, но на мобиле - появляется горизонтальный скролл, верстка едет. Что делать?

✅ Решение: - Для данной таблицы (с текстом) можно добавить оверлей, скрывающий границы и подстраивающийся под верстку, при этом для самой таблицы добавить возможность горизонтальной прокрутки. Так же можно было бы для мобильных расширений элементы строки таблицы объеденить в отдельную карточку, но это больше подходит для таблицы с характеристками объека.

2. Тестовое задание на JavaScript

2.1 Билеты на событие

После успешной покупки билетов на событие, данные попадают в список заказов. Список заказов сохраняется в таблице phpMyAdmin в виде:

id event_id event_date ticket_adult_price ticket_adult_quantity ticket_kid_price ticket_kid_quantity barcode user_id equal_price created
1 003 2021-08-21 13:00:00 700 1 450 0 11111111 00451 700 2021-01-11 13:22:09
2 006 2021-07-29 18:00:00 1000 0 800 2 22222222 00364 1600 2021-01-12 16:62:08
3 003 2021-08-15 17:00:00 700 4 450 3 33333333 00015 4150 2021-01-13 10:08:45

Где:

  • id - инкрементальный порядковый номер заказа
  • event_id - уникальный ид события. У каждого события есть свое название, описание, расписание, цены и свой уникальный event_id соответственно
  • event_date - дата и время на которое были куплены билеты
  • ticket_adult_price - цена взрослого билета на момент покупки
  • ticket_adult_quantity - количество купленных взрослых билетов в этом заказе
  • ticket_kid_price - цена детского билета на момент покупки
  • ticket_kid_quantity - количество купленных детских билетов в этом заказе
  • barcode уникальный штрих код заказа
  • equal_price - общая сумма заказа
  • created - дата создания заказа

Вопросы:

  1. Некоторые события нужно продавать с дополнительными типами билетов - льготный и групповой, у которых будут свои цены и название. Имеется информация, что вероятно, будут другие типы билетов, которые нужно будет добавить. Нужно уметь сохранять при заказе 2 дополнительных типа билета, льготный и групповой в бд. Задача - Показать конечный вид таблицы с добавленными типами билетов. Объяснить свое решение.

    ✅ Решение: - Добавление стлобца с категорией и столбца с ценой для каждого типа билета.

id event_id event_date ticket_adult_price ticket_adult_quantity ticket_kid_price ticket_kid_quantity ticket_benefit ticket_benefit_quantity ticket_group ticket_group_quantity barcode user_id equal_price created
1 003 2021-08-21 13:00:00 700 1 450 0 600 0 2000 0 11111111 00451 700 2021-01-11 13:22:09
2 006 2021-07-29 18:00:00 1000 0 800 2 900 0 2500 0 22222222 00364 1600 2021-01-12 16:62:08
3 003 2021-08-15 17:00:00 700 4 450 3 600 0 2000 0 33333333 00015 4150 2021-01-13 10:08:45
  1. Часто посетители из одного заказа приходят не одновременно на события. Возникает необходимость чекинить их по отдельности. Для этого у каждого билета должен быть свой баркод. Если в одном заказе было куплено несколько билетов, 2 взрослых, 3 детских, 4 льготных - то должно быть 9 баркодов для каждого билета соответственно. Задача - Показать конечный вид таблицы, где у каждого билета свой баркод. Объяснить свое решение.

    ✅ Решение: - Добавление стлобца с идентификатором количества, для каждого билета отдельная строка таблицы, к баркоду события добавляется идентификатором количества. ( barcode = barcode + (quantity_id) ).

id event_id event_date quantity_id ticket_adult_price ticket_adult_quantity ticket_kid_price ticket_kid_quantity ticket_benefit ticket_benefit_quantity ticket_group ticket_group_quantity barcode user_id equal_price created
1 003 2021-08-21 13:00:00 1 700 1 450 0 600 0 2000 0 11111111(1) 00451 700 2021-01-11 13:22:09
2 006 2021-07-29 18:00:00 1 1000 0 800 1 900 0 2500 0 22222222(1) 00364 1600 2021-01-12 16:62:08
3 006 2021-07-29 18:00:00 2 1000 0 800 1 900 0 2500 0 22222222(2) 00364 1600 2021-01-12 16:62:08
4 003 2021-08-15 17:00:00 1 700 1 450 0 600 0 2000 0 33333333(1) 00015 4150 2021-01-13 10:08:45
5 003 2021-08-15 17:00:00 2 700 1 450 0 600 0 2000 0 33333333(2) 00015 4150 2021-01-13 10:08:45
6 003 2021-08-15 17:00:00 3 700 2 450 1 600 0 2000 0 33333333(3) 00015 4150 2021-01-13 10:08:45
7 003 2021-08-15 17:00:00 4 700 2 450 1 600 0 2000 0 33333333(4) 00015 4150 2021-01-13 10:08:45
8 003 2021-08-15 17:00:00 5 700 2 450 1 600 0 2000 0 33333333(5) 00015 4150 2021-01-13 10:08:45
9 003 2021-08-15 17:00:00 6 700 2 450 0 600 1 2000 0 33333333(6) 00015 4150 2021-01-13 10:08:45
10 003 2021-08-15 17:00:00 7 700 2 450 0 600 1 2000 0 33333333(7) 00015 4150 2021-01-13 10:08:45
11 003 2021-08-15 17:00:00 8 700 2 450 0 600 1 2000 0 33333333(8) 00015 4150 2021-01-13 10:08:45
12 003 2021-08-15 17:00:00 9 700 2 450 0 600 1 2000 0 33333333(9) 00015 4150 2021-01-13 10:08:45

2.2 Время из A в B

Известно расписание отправления теплохода по московскому времени (GMT+3):

  • из A в B:

    • 2021-08-21 18:00:00
    • 2021-08-21 18:30:00
    • 2021-08-21 18:45:00
    • 2021-08-21 19:00:00
    • 2021-08-21 19:15:00
    • 2021-08-21 21:00:00
  • из B в A:

    • 2021-08-21 18:30:00
    • 2021-08-21 18:45:00
    • 2021-08-21 19:00:00
    • 2021-08-21 19:15:00
    • 2021-08-21 19:35:00
    • 2021-08-21 21:50:00
    • 2021-08-21 21:55:00

"из A в B" и "из B в A" стоимость одного билета 700р.

"из A в B и обратно в А" стоимость составного билета 1200р

Время пути в одну сторону 50 минут.

Задача. Сделать страницу (дизайн не имеет значения) на которой пользователь выбрав направление, время и количество билетов сможет посчитать итоговые значения: общую стоимость, время в пути.

Как это должно выглядеть?

На странице пользователь сначала должен выбрать направление:

<select name="route" id="route">
  <option value="из A в B">из A в B</option>
  <option value="из B в A">из B в A</option>
  <option value="из A в B и обратно в А">из A в B и обратно в А</option>
</select>

После чего предлагается пользователю выбрать время. Важно, время показываем в часовом поясе пользователя. Предположим, что на всех его устройствах стоит запрет перевода времени в локальный часовой пояс.

<label for="time">Выберите время</label>
<select name="time" id="time">
  <option value="18:00(из A в B)">18:00(из A в B)</option>
  <option value="18:30(из A в B)">18:30(из A в B)</option>
  <option value="18:45(из A в B)">18:45(из A в B)</option>
  <option value="19:00(из A в B)">19:00(из A в B)</option>
  <option value="19:15(из A в B)">19:15(из A в B)</option>
  <option value="21:00(из A в B)">21:00(из A в B)</option>
  <option value="18:30(из B в A)">18:30(из B в A)</option>
  <option value="18:45(из B в A)">18:45(из B в A)</option>
  <option value="19:00(из B в A)">19:00(из B в A)</option>
  <option value="19:15(из B в A)">19:15(из B в A)</option>
  <option value="19:35(из B в A)">19:35(из B в A)</option>
  <option value="21:50(из B в A)">21:50(из B в A)</option>
  <option value="21:55(из B в A)">21:55(из B в A)</option>
</select>

Если выбрано время "из A в B и обратно в А", то должен показаться дополнительный селект, в котором можно будет выбрать обратное время. Обратите внимание, что время не должно пересекаться. Это значит, что следует учитывать, что если путь из А в В был выбран в 14:00, то обратный путь возможен только по прибытию на место в пункт В.

Далее ползователю прелагается выбрать количество билетов и нажать на кнопку "посчитать".

<label for="num">Количество билетов</label>
<input id="num">
<button>Посчитать</button>

При клике на кнопку "Посчитать" показать результат с направлением, временем в пути, временем отправления и временем прибытия в часовом поясе пользователя.

Например:

Вы выбрали 4 билета по маршруту из A в B стоимостью 4000р.
Это путешествие займет у вас 40 минут.
Теплоход отправляется в 12-00, а прибудет в 18-00.

✅ Решение:

nevatrip-test-task's People

Contributors

artantstar avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.