Skip to content

Commit f601581

Browse files
committed
improved talk details retrieval during /publicEventStats
1 parent c6ca8f2 commit f601581

File tree

3 files changed

+35
-15
lines changed

3 files changed

+35
-15
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import {db} from "../../../firebase";
2+
import {
3+
DailySchedule,
4+
Talk,
5+
TalksTimeSlot
6+
} from "../../../../../../shared/daily-schedule.firestore";
7+
import {ISODatetime} from "../../../../../../shared/type-utils";
8+
9+
10+
export type TimeslottedTalk = Talk & {start: ISODatetime, end: ISODatetime};
11+
12+
export async function getTimeslottedTalks(eventId: string): Promise<TimeslottedTalk[]> {
13+
const days = await db.collection(`events/${eventId}/days`).listDocuments()
14+
const dailySchedules = await Promise.all(days.map(async dayRef => {
15+
const dailySchedule = (await db.doc(`events/${eventId}/days/${dayRef.id}`).get()).data() as DailySchedule
16+
return dailySchedule;
17+
}))
18+
19+
const talkTimeslots = dailySchedules
20+
.flatMap(dailySchedule => dailySchedule.timeSlots)
21+
.filter(timeslot => timeslot.type === 'talks') as TalksTimeSlot[]
22+
23+
const timeslottedTalks: TimeslottedTalk[] = talkTimeslots.flatMap(timeslot => {
24+
return timeslot.talks.map(talk => ({
25+
...talk,
26+
start: timeslot.start,
27+
end: timeslot.end
28+
}))
29+
})
30+
31+
return timeslottedTalks;
32+
}

cloud/functions/src/functions/firestore/services/talk-utils.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,13 @@
11
import {db} from "../../../firebase";
2-
import {DetailedTalk} from "../../../../../../shared/daily-schedule.firestore";
32
import {getSecretTokenRef} from "../firestore-utils";
43
import {
54
DailyTalkFeedbackRatings,
65
PerPublicUserIdFeedbackRatings
76
} from "../../../../../../shared/conference-organizer-space.firestore";
8-
import {ISOLocalDate} from "../../../../../../shared/type-utils";
97
import {logPerf} from "../../http/utils";
8+
import {getTimeslottedTalks} from "./schedule-utils";
109

1110

12-
export async function getTalkDetails(eventId: string) {
13-
const talkRefs = await db
14-
.collection("events").doc(eventId)
15-
.collection("talks")
16-
.listDocuments();
17-
18-
const talks = await Promise.all(talkRefs.map(async talkRef => (await talkRef.get()).data() as DetailedTalk))
19-
20-
return talks;
21-
}
22-
2311
type PerTalkPublicUserIdFeedbackRating = {
2412
talkId: string,
2513
perPublicUserIdRatings: PerPublicUserIdFeedbackRatings,
@@ -70,7 +58,7 @@ export async function getTalksDetailsWithRatings(eventId: string) {
7058
const organizerSpaceRef = await getSecretTokenRef(`/events/${eventId}/organizer-space`)
7159

7260
const [ talks, everyRatings ] = await Promise.all([
73-
getTalkDetails(eventId),
61+
getTimeslottedTalks(eventId),
7462
getEveryRatingsForEvent(eventId, organizerSpaceRef.id)
7563
]);
7664

cloud/functions/src/functions/http/event/publicEventStats.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ const publicEventStats = functions.https.onRequest(async (request, response) =>
125125
format: talk.format.title,
126126
language: talk.language,
127127
room: talk.room.title, track: talk.track.title,
128-
tags: talk.tags,
128+
tags: [], // TODO: remove this once we're OK that it's not used by callers
129129
averageRating: talk.averageRating,
130130
numberOfVotes: talk.numberOfVotes
131131
}))

0 commit comments

Comments
 (0)