ym104432846
Вставьте ссылку на видео из Youtube, Rutube, VK видео
Задайте вопрос по видео
Что вас интересует?
00:00:15
Получение количества свободных номеров:
  • 1. Номера в отеле закончились, возникла необходимость изменить алгоритм бронирования
  • 2. Предложено переименовать запрос получения количества комнат в «Гетт румз лефт»
  • 3. Разработан условный оператор для проверки наличия свободных номеров (if румс_лефт > 0)
00:01:16
Получение цены гостиницы:
  • 1. Необходимо получить точную цену товара через запрос на сервис румс прайс по конкретному номеру комнаты (id)
  • 2. Требуется написать скрипт получения цены с использованием команды `get_price` и присвоить результат переменной `скаляр_цена`
  • 3. Цена должна быть представлена целым числом (тип int)
00:02:09
Создание запроса на бронирование:
  • 1. В систему планируется добавить возможность автоматического расчета значений total cost и total days
  • 2. Для параметра user id используется название «User id», ранее ошибочно называвшееся «юзер точка айди»
  • 3. Система будет передавать значения дат от (дейт фром) и цены (прайс), исключая самостоятельное указание стоимости клиентом
00:03:26
Использование возвращаемой строки после выполнения запроса:
  • 1. Решено вернуть полностью модель объекта «букинг», включая идентификатор (user_id)
  • 2. Предложено назвать результат возврата новой строкой «новый букинг»
  • 3. Поручено ответственному сотруднику оформить сессию исполнения (экзекьютив-сессия)
00:04:26
Работа с моделью и скалярными значениями:
  • 1. Рассматривается возможность передачи всей модели букингс целиком, используя скаляр, который возвращает все столбцы
  • 2. Если передается неполная информация (например, только два столбца), это нарушает целостность модели букингс
  • 3. Для работы с несколькими несвязанными столбцами рекомендуется использовать методы `one`, `first` или аналогичные конструкции
00:05:45
Завершение транзакции и проверка результата:
  • 1. Необходимо сделать коммит для добавления новых данных в базу и обновления бронирования
  • 2. Предложено проверить корректность работы системы после внесения изменений (букинг)
  • 3. Если результат запроса возвращает `none`, предлагается инициировать дополнительную операцию (зарейзить)
00:06:16
Обработка ошибки отсутствия свободных номеров:
  • Исправлена ошибка бронирования комнаты (статус-код 409 выбран неверно)
  • Проверена возможность повторного бронирования одной и той же комнаты несколькими пользователями подряд
  • Создан новый SQL-запрос с использованием сложных конструкций JOIN, WITH, AND/OR условий и фильтров
0: Артём, из будущего снова с вами мы продолжаем, и у нас последняя заключительная часть. Мы хотим добавить букинг, только если есть свободные комнаты и у нас прям много, много запросов на это дело, но тем не менее, это очень важно делать, потому что мы не хотим, чтобы у нас там половина
1: Клиентов, забронировал номер, а потом нам придётся звонить, извиняться. Простите, а номера то закончились. Поэтому, что мы делаем? В прошлом уроке? Мы получили скалярное значение. Собственно, румс лефт равно румс, лефт, скаляр. Давайте
2: Здесь, наверное, что-нибудь изменим. Вот здесь напишем Гетт румз лефт, изменим название запроса, что это запрос какой-то, да, на получение get и количество комнаток вот мы их получили, это у нас, integer можно так написать для понимания и сразу.
3: If румс лефт больше чем 0, тогда мы можем забронировать комнату и да, вот иначе, например, мы вернём нон.
4: А если не none, тогда что мы хотим сделать? В 1 очередь? Самые внимательные из вас могли заметить, что мы не получили цену от клиента. По какой цене он бронирует отель, и мы не хотим, чтобы клиенты могли переда
5: Сами цену. Ну вдруг они передадут 1 ₽ или - 1 ₽, и мы ещё им должны останемся. Поэтому давайте здесь получим цену, напишем запрос на получение цены. Мы просто хотим получить из румс прайс, причём по
6: Конкретной комнате да, filter by
7: И у нас здесь должно быть id равно рум айди, то есть filter by filter уэр они примерно одинаково могут использоваться зачем они все есть я наверное не смогу вам ответить итак, Гетт прайс мы хотим, собственно получить саму.
8: Цену давайте напишем прайс, равно await session, execute и собственно вот этот get price и также, что нам необходимо сделать собрать скаляр прайс, интеджер равно прайс.
9: Точка скаляр, да, то есть это единственное значение. Просто 1 столбец, 1 строчка. Мы получаем этот скалярник это цена отеля за 1 день проживания. Далее делаем запрос на инсерт на добавление Букинга. Это у нас инсерт.
10: Мы вставляем в букингс, причём вставляем мы, что мы вставляем значение и передаём здесь просто значение как в обычную функцию у нас в букингах, что есть. Давайте вот здесь прям это дело скопируем вот эти столбцы, мы должны
11: Задать самостоятельно опять же не смотрите что здесь есть, а вот total cost и total days у нас автоматически рассчитываются так как это компьютер свойства generates эс вот эта формула, поэтому нам их трогать не нужно, давайте все это дело сюда вставим.
12: Вот так это я все скопировал для удобства. Здесь равно запятушку проставим. Рум айди у нас какая? Да, рум айди. У нас так и называется параметр. User id у нас юзер точка айди. А, или, простите, нет, у нас здесь называется он. User id. Да, да, да, да, да, его.
13: Сюда мы и передаём дейт Фром. Мы передаём дейт Фром. Ничего сложного. Дей ту дей ту и прайс вот эту ценушланг йста. Мы не хотим, чтобы цену задавал сам клиент. Мы сами её получим. Такие вот мы
14: Ребята, достаточно исполнить запрос. Что мы делаем? Кстати, что ещё можно сделать? Помимо обычной вставки? Когда у нас нам ничего не возвращает постгресс? Можно вернуть эту самую строку и отдать её дальше.
15: С ней как-то работать там, на фронтенде или, не знаю, просто чтобы лишний раз потом не обращаться к базе, забирать вот этот новый букинг. Давайте returning пропишем. То есть возвращая, верни, пожалуйста, полностью строку букингс можно было бы вернуть, например, там букингс айди нам бы вернулся только
16: Айдишник можно было бы вернуть, не знаю. User id ну что, что душе угодно, мы вернём полностью модель букингс и давайте здесь за экзекьютив это дело сешн экзекьют.
17: Букингс, точнее, эт букинг, да, и что мы получим? Мы получим новый букинг. Можно так и написать, например, новый букинг, и мы вернём нью букинг скаляр. Я ещё
18: Чуть позже в курсе, объясню, почему здесь используется скаляр, но смотрите, если мы возвращаем целостную модель букингс, например, без использования каких-то других столбцов, других таблиц или без укорачивания этой модели,
19: Или, например, мы могли бы передать просто букинг. Зайди букингс, например, что там user id 2 столбца. Это бы уже не соответствовало модели букингс, так как мы передаём целиком модель, мы можем использовать скаляр. Нам вернётся вся модель, когда мы работаем с
20: 1 числом скаляр также отдаёт нам всего 1 число когда мы, как я сказал, берём несколько столбцов, которые не отображают 1 какую-то конкретную модель, нам нужно использовать one или first, или там.
21: One or none или что-то подобное, или если у нас много запросов, мы используем ол, а когда у нас возвращаются только модели какие-то уже фиксированные, которые у нас заданы, типа букинг хотелс или что-то подобное, мы можем воспользоваться скаляр.
22: All i гораздо приятнее будут результаты от алхимии, они будут лучше разбираться по адентика итак, мы вернём здесь скаляр вот это значение букинг нам вернутся все столбцы, опять же иначе вернётся none.
23: И давайте, что мы сделаем? Что мы ещё забыли? Мы забыли сделать коммит, иначе у нас данные не добавятся. Коммит. После этого данные реально занесутся. В базу данных появится новый букинг вернётся нам.
24: И давайте вот здесь проверим это дело. Давайте скажем, что букинг равно вот эта тема и так так так, if not букинг, то есть если нам вернётся none, давайте зарейзит и на самом деле я из
25: Будущего. Я уже эту ошибочку сделал, и она называется у нас каким образом? Рум кенна би букт? Комната не может быть забукано, забронирована. Статус код я выбрал 409. Возможно, здесь другой код нужен.
26: Я в интернетах не нашёл, но я подумал, что конфликтная ситуация ну подходит под определение и detail не осталось свободных номеров, чтобы на фронтенде можно было отобразить собственно этот детейл и здесь мы рейзим эту ошибку и давайте давай.
27: Давайте проверим. Давайте забукан ещё несколько раз. Вот эту комнатку. Давайте попробуем. Экзекьют. Так, небольшая ошибочка. Смотрим по быстренькому, что не так? Локал вериал её.
28: Before саймен. Так что же это значит?
29: Да, действительно, мы вот здесь не передали вот так вот все это дело должно теперь работать, да, название мы изменили. Запроса экзекьют. Ага. 1 пошёл. Ещё забронировали, ещё смогли, ещё раз смогли.
30: Сейчас должно быть 0 комнат вуаля, 409 ошибка. Не осталось свободных номеров. Помните, у нас было 5 свободных номеров? 2 уже было забронировано. Изначально у нас оставалось 3. Я сейчас 3 раза нажал экзекьют, соответственно, добавилось 3 записи в базе данных мы не будем проверять. И вышла.
31: Ошибка, не осталось свободных номеров, так как у нас не выполняется условие, что количество комнат больше нуля, потому что оно равно нулю. Да, можно было бы условие сделать там равно равно нулю, но на всякий случай мы сделали больше нуля и вуаля все классно работает.
32: Вопрос здесь выводится, конечно, это можно дело закомментировать, чтобы каждый раз он не выводился, не высчитывался. И вот таким образом мы написали наш запрос. Я вам очень рекомендую самостоятельно написать его самостоятельно посмотреть, разобраться, что делает каждая часть.
33: Действительно, запрос сложный, мы очень много различных концепций и языка sql и sq химии посмотрели и на то, как мы можем создавать вот эти отдельные запросики, отдельные таблички через with да, здесь это называется сэто её, как мы можем с ними?
34: Работать, как мы работаем с селектом, с инсертом, с условиями, с множественными условиями, с and or, с вложенными условиями и так далее. Как работает фильтрация, группировка и так далее. На самом деле, довольно, ну, знакомые названия, если вы пришли
35: Языка скил вер групп бай все это примерно похоже там join кстати, друзья, я хочу попросить прощения здесь я забыл написать из outer равно true, потому что иначе у нас джоин будет не left, а.
36: Я это дело даже просмотрел да, здесь, здесь джоин был не left, у нас отобразится left outer join. Если мы напишем из outer тру, обязательно, надеюсь вы досмотрели до этого момента, пропишите это дело и на этом наверное все, Артём, из будущего всем.
37: Удачного прохождения.