Skip to content

24020401 appointments view

Aleksey Zhidkov edited this page Aug 31, 2024 · 1 revision

Реализация страницы просмотра расписания списком

Что вообще происходит

Пилю МВП, уже есть возможность создавать приёмы, но их нигде нельзя посмотреть. А пользователям, очевидно, это надо.

Что уже есть

В целом - вроде вся инфраструктура хранения приёмов и базовая инфраструктура тестирования.

Техдолг

  1. UsersRepo возвращает null в случае нарушения уникальности емейла

  2. Пакет юзеров имеет устаревшую структуру

Как это будет работать

UI/UX

Страница с двумя вкладками:

  1. Предстоящие. Список приёмов разделённый на три группы "Сегодня", "Ближайшая неделя", "Позднее" и отсортированный по возрастанию даты. Элементы списка включают дату (для 2 и 3 группы) и время приёма, ФИО клиента, тип и место

  2. Прошедшие. Сплошной список приёмов, отсортированный по убыванию даты, с теми же данными элементов.

При переходе между вкладками подгружается соответствующий фрагмент.

URLs

  • Страница предстоящих приёмов - /therapist/schedule

  • Страница прошедших приёмов - /therapist/schedule?past=true

При переходе между фрагментами, урл будет пушится с помощью hx-push-url (https://htmx.org/attributes/hx-push-url/).

Операции системы

  • Получить список прошедших приёмов. Операция системы, так как задействует второй ресурс - настройки таймзоны

Операции ядра

  • Получить настройки таймзоны. Пока в виде костыля - выбрать таймзону из последнего по дате создания приёма, если ни одного нет - взять Новосибиркск

  • Получить список предстоящих приёмов - date_time AT time_zone >= date_trunk(now() AT :userTimeZone,'day'). AppointmentsRepo.findFutureAppointments(now: Instant, timeZone: ZoneId, Page.allFutureAppointmentsByDate)

  • Получить список прошедших приёмов - date_time AT time_zone < date_trunk(now() AT :userTimeZone, 'day'. AppointmentsRepo.findPastAppointments(now: Instant, timeZone: ZoneId, Page.topTenByDate)

Модель

  • Добавить компонент user_settings, с UserSettingsRepo.getUserTimeZone(user: UserRef) → AppointmentsRepo.getUserTimeZone(user: UserRef)

  • Добавить Объект FutureAppointments, который инкапсулирует логику разбиения приёмов на группы

Схема БД

Изменения не планируются.

Тесты

Хэппи пасы
  1. Предстоящие приёмы

    1. Пустая страница рендерится без ошибок

    2. Когда есть данные за предстоящие две недели, страница содержит все записи и они корректно разбиты на разделы

    3. Если есть приёмы за вчера по Нск и сегодня по Нск и запрашиваются предстоящие приёмы в сегодня 00:01 нск - возвращаются только приёмы за сегодня

    4. Если есть приём за вчера по нск, но за сегодня по владивостоку и запрашиваются приёмы в сегодня 00:01 нск - результат пустой

  2. Прошедшие приёмы

    1. Пустая страница рендерится без ошибок

    2. Когда есть 11 записей в прошлом, страница содержит 10 самый последних записей

    3. Если есть приёмы за вчера по Нск и сегодня по Нск и запрашиваются предстоящие приёмы в сегодня 00:01 нск - возвращаются только приёмы за вчера

    4. Если есть приёмы за вчера по Нск и сегодня по Нск и запрашиваются предстоящие приёмы в сегодня 23:59 нск - возвращаются только приёмы за вчера

    5. Если есть приём за вчера по мск, но сегодня по нск и запрашиваются приёмы в сегодня 00:01 нск - он не попадает

Ошибки
  1. Страница ридонли - вроде не чему ломаться

Порядок выполнения

  1. Рефакторинг пакета юзеров

  2. Операция получения настройки таймзоны

  3. Страница предстоящих приёмов

  4. Страница прошедших приёмов