Я хочу создать приложение для записи на прием со следующими характеристиками: - Пользователи могут быть поставщиками услуг или покупателями - Поставщики услуг устанавливают свою доступность (но могут устанавливать свою доступность только на срок не более 6 месяцев вперед) - Покупатели могут затем записывать встречи на основе в зависимости от этих возможностей - каждая встреча, в зависимости от типа услуги, занимает разное количество времени - В зависимости от встречи, которую выбирает покупатель, отображается другой набор доступных возможностей в зависимости от того, сколько времени занимает услуга
Я построил следующее: - Модель TimeSlot
, в которой я создаю ряд общих 30-минутных временных интервалов на основе атрибутов start_time
и end_time
. Чтобы продлить эти временные интервалы на 6 месяцев вперед, у меня есть фоновое задание, выполняющееся каждый день, которое создает все новые необходимые временные интервалы.
class TimeSlot < ActiveRecord::Base
has_many :user_time_slots
# ... more methods below
end
- Модель UserTimeSlots
, которая в основном представляет доступность поставщика услуг, которую они могут установить. Поэтому, когда они создают user_time_slot, они, по сути, говорят, что они доступны в это время.
class UserTimeSlot < ActiveRecord::Base
belongs_to :time_slot
belongs_to :service_provider, :class_name => "User"
belongs_to :appointment
end
- Модель Appointment
, имеющая много user_time_slots. Их много, потому что встреча принадлежит службе, которая занимает определенное время (атрибут time_required
в службах) и может охватывать несколько последовательных пользовательских_времени_слотов.
class Appointment < ActiveRecord::Base
has_many :user_time_slots
belongs_to :buyer, :class_name => "User"
belongs_to :service_provider, :class_name => "User"
belongs_to :service
end
- Модель Service
, которая имеет много встреч и принадлежит поставщику услуг, который создает эту услугу.
class Service < ActiveRecord::Base
has_many :appointments
belongs_to :service_provider, :class_name => "User"
end
Эта модель предметной области работает; однако мне интересно, есть ли лучший способ сделать это по следующим причинам:
Мне кажется немного неуклюжим создавать записи TimeSlot каждый день на моем сервере с использованием фонового задания - TimeSlots действительно имеют единственную цель - иметь время начала и время окончания, а затем связываться с ними.
- Once the user (buyer) selects a service they want, I am not sure how I would efficiently find the x number of user_time_slots that are consecutive and, therefore, available for booking the appointment (for example, if I have 30 minute time slot intervals and a user selects an appointment that will take 3 hours, I would have to find 6 consecutive time slots). For example, if a user clicks on an instance of a service I would have to 1) get the time required for that service (easy enough to do) and 2) I'd have to find ALL of the user's user_time_slots and collect their associated time_slots, then compare each time slot's start and end times to one another to find consecutive ones. This just seems like way too much iteration to me and seems like this will bog down my application!
Есть ли у кого-нибудь лучший способ или решение для этого (особенно по теме поиска последовательных временных интервалов)?