Last active
July 18, 2022 01:04
-
-
Save danecando/5d78cd28b54e6d81460325e703f21453 to your computer and use it in GitHub Desktop.
Meetings layout EdgeDB query experiment
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type QueryResult = { | |
nextMeeting?: Meeting; | |
scheduledMeetings: { | |
items: Meeting[]; | |
count: number; | |
hasMore: boolean; | |
}; | |
attendedMeetings: { | |
items: MeetingFields[]; | |
count: number; | |
hasMore: boolean; | |
}; | |
groups: Group[]; | |
}; | |
const query = async (userId: string) => { | |
const result = await edb.queryRequiredSingle<QueryResult>( | |
` | |
with | |
groupLimit := <int64>10, | |
meetingLimit := <int64>50, | |
scheduledMeetings := ( | |
select Meeting | |
filter ( | |
.admin.id ?= <uuid>$userId | |
or .chairperson.id ?= <uuid>$userId | |
or .speaker.id ?= <uuid>$userId | |
) and .startingTime >= datetime_of_statement() | |
order by .startingTime asc | |
limit meetingLimit + 1 | |
), | |
attendedMeetings := ( | |
select Meeting | |
filter | |
.attendees.id ?= <uuid>$userId | |
and .startingTime < datetime_of_statement() | |
order by .startingTime asc | |
limit meetingLimit + 1 | |
), | |
select { | |
nextMeeting := (select scheduledMeetings { ${SELECT_MEETING} } limit 1), | |
scheduledMeetings := ( | |
with | |
page := (select scheduledMeetings limit meetingLimit), | |
select { | |
items := (select page { ${SELECT_MEETING} }), | |
count := count(page), | |
hasMore := count(scheduledMeetings) > meetingLimit, | |
} | |
), | |
attendedMeetings := ( | |
with | |
page := (select attendedMeetings limit meetingLimit), | |
select { | |
items := (select page { ${MEETING_FIELDS} }), | |
count := count(page), | |
hasMore := count(attendedMeetings) > meetingLimit, | |
} | |
), | |
groups := ( | |
select \`Group\` { | |
${SELECT_GROUP} | |
} | |
filter .admin.id ?= <uuid>$userId | |
limit groupLimit | |
), | |
} | |
`, | |
{ | |
userId, | |
} | |
); | |
return result; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment