Skip to content

24021101 appointments duration

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

Добавление длительности приёма

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

Марина хочет, чтобы расписание отображалось в виде календаря. Для этого не хватает длительности приёма.

Что уже есть

Общая инфраструктура хранения приёмов, форма создания/редактирования приёма, конвертация Duration в PgInterval.

Техдолг

Модуль приёмов не соответсвует очередному стандарту:

  1. 4 файла разбиты на пакеты

  2. В модели приёма есть метод

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

UI/UX

В раздел время и место добавится input type=time.

URLs

Нет изменений

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

В создании и обновлении приёма появится проверка, на отсутствие пересечений.

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

AppointmentsRepo.findIntersectingAppointment(therapistRef, startTime, duration).

SELECT * FROM appointments
WHERE
    owner = :therapistId AND
    (date_time, duration) OVERLAPS (:startTime, :duration)

Модель

data class Appointment(
    val duration: Duration
)

Схема БД

ALTER TABLE appointments
   ADD COLUMN duration INTERVAL;

UPDATE appointments
SET duration = '1 HOUR'::INTERVAL;

ALTER TABLE qyoga.public.appointments
    ALTER COLUMN duration SET NOT NULL;

Тесты

Хеппи пасы

  1. При создании приёма длительность корректно сохраняется

  2. При обновлении приёма длительность корректно сохраняется

Ошибки

  1. При наличии пересекающегося приёма в той же таймзоне возвращается ошибка валидации

  2. При наличии пересекающегося приёма в другой таймзоне возвращается ошибка валидации

  3. При наличии приёма в той же таймзоне, который заканчивается в момент начала нового нет ошибки валидации

  4. При наличии приёма в другой таймзоне, который заканчивается в момент начала нового нет ошибки валидации

  5. При наличии приёма в той же таймзоне, который начинается в момент окончания нового нет ошибки валидации

  6. При наличии приёма в другой таймзоне, который начинается в момент окончания нового нет ошибки валидации

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

  • Рефакторинг модуля

  • Добавление поля