I’m making a booking system where a profile has “availability” which defines the times someone can book them. I’m wanting to use dataloader to load profile(s) and their availability. But their availability is determined by multiple tables which isn’t just a relationship that
Dataloader.Ecto source would know about.
To determine availability there’s 3 tables:
# defines their standard recurring availability schema "standard_time_slots" do field(:iso_dow, :integer) field(:start_time, :time) field(:end_time, :time) belongs_to :profile, Profile end
# defines a specific date time to include/block out schema "specific_time_slots" do field :start_datetime, :naive_datetime field :end_datetime, :naive_datetime field :type, :string belongs_to :profile, Profile end
schema "bookings" do field :start_datetime, :naive_datetime field :end_datetime, :naive_datetime belongs_to :profile, Profile belongs_to :user, User end
schema "profiles" do has_many :standard_time_slots, StandardTimeSlot has_many :specific_time_slots, SpecificTimeSlot has_many :bookings, Booking end
If I wasn’t using absinthe/graphql I could just run a query using the 3 tables to work out the availability (maybe even save it as a db function or view ) and then just call it when needed in the controller.
With absinthe/graphql I’m not entirely sure how to approach this one and any help would be appreciated