# hydrate an appointment
ideas: add Shops-to-resources table
## create sub-query filter lists
- If customer gids supplied as filter
- Get filtered list of customers
- **line 80**
1: create array: customer[]
select from *customersRepo* whereIn(gid === filter gid)
- **line 88**
2: create array: customer_id[] (repo id)
- **line 91**
2: set query param: { customerIds: customer_id[] }
- If resource gids supplied as filter
- Get filtered list of resources
- **line 95**
1: create array: resource[]
select from *appointmentsToresourcesRepo* whereIn (gid === filter gid)
- **line 101**
2: create array: unique appointment_id[] (repo id)
- **line 103**
2: set query param: { id: appointment_id[] }
## create appointment_id list to query from appointments
- State: line 105 right now dbQuery = { id: appointment_id, customerIds: customer_id[] }
- line 107
If shop gids supplied as filter
- Note: this is where having shops-to-resources table would come in.
- assumption: Resources are stored already as an array on a shop
- Get list of appointment_ids filtered by relevant resource_id
- **line 109**
1: create array: shops[]
select from shopsRepo: returns shape of:
[{ id, shopGid, resources: resource[] }]
- **line 115**
1: with above assumption, we will extract ids from aggregated array
1b: without above assumption, we will create this list from shops-to-resources table instead
2: create array: resource_id[] (repo id)
- **line 128**
3: create array: unique appointment_id[] (repo id)
select from: appointment-to-resources whereIn(resource_id === [line115])
- **line 130**
4: update query param: { [...dbQuery.id, ...[line128]] }
## Get relevant appointment objects
- Get filtered list of appointments
- line 133
- 1: create array: ???
select - explain
- 1b: Is it:
- 1a: create array: appointment[] filtered by dbQuery.id[]
- Isolate relevant appointment and customer ids based on applied filters
- line 136
1: create arrays: { appointmentIds: appointment_id[](repo id), customerIds: customer_id[](repo id) }
- Create filtered list of appointmentResourceRelationships
- line 146
1: create array: appointmentResourceRelationship[] whose appointment_id exists in [line136] appointmentIds
- Create map from appointmentResourceRelationships for simple look up by appointment_id
- line 152
1: create map: { [appointment_id]: resources[] }
- Create unique list of resource_id
- line 160
1: create set: resource_id[] from [line152].values()
- Create list of resources filtered by list of unique resouce_id
- line 164
1: create array: resource[]
select from resourceRepo whereIn(resource_id === [line160])
- Create map of resources for simple look up by resource_id
- line 170
1: create map: { [resource_id]: resource }
- Find resource_id(s) and associated resources; assign to appointmentResourceMap[appointment_id]
- line 179
1: create map: { [appointment_id]: resources[] }
- Create list of customers filtered by customer_id
- line 189
1: create array: customer[]
select from customerRepo
- Create map from customers list for simple look up by customer_id
- line 195
1: create map: { [customer_id]: customer }
- Create hydrated appointment
- line 204
1: create array: [{ ...appointment, customer: customer{}, resources: resource[], type: appointmentType{} }]