Skip to content

Commit 587eb8e

Browse files
committed
event-level talk feedbacks should be stored as a collection instead of a document with embedded array
1 parent ba61e04 commit 587eb8e

File tree

3 files changed

+7
-22
lines changed

3 files changed

+7
-22
lines changed

cloud/functions/src/crawlers/crawl.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ import {CAMPING_DES_SPEAKERS_CRAWLER} from "./camping-des-speakers/crawler";
1111
import {DEVOXX_SCALA_CRAWLER} from "./devoxx-scala/crawler";
1212
import {match} from "ts-pattern";
1313
import {v4 as uuidv4} from "uuid"
14-
import {DetailedTalk} from "../../../../shared/daily-schedule.firestore";
1514
import {ConferenceOrganizerSpace} from "../../../../shared/conference-organizer-space.firestore";
16-
import {TalkAttendeeFeedback, TalkFeedbacks} from "../../../../shared/talk-feedbacks.firestore";
1715
const axios = require('axios');
1816

1917
export type CrawlerKind<ZOD_TYPE extends z.ZodType> = {
@@ -155,14 +153,12 @@ const saveEvent = async function(event: FullEvent) {
155153
// If token already exists for the talk, let's not add it
156154
if(!existingTalkFeedbackViewerToken) {
157155
const talkFeedbackViewerSecretToken = uuidv4();
158-
const talkFeedbacks: TalkFeedbacks = {
159-
attendeeFeedbacks: []
160-
}
161156

162157
await firestoreEvent
163158
.collection("talks").doc(talk.id)
164-
.collection("feedbacks").doc(talkFeedbackViewerSecretToken)
165-
.set(talkFeedbacks)
159+
.collection("feedbacks-access").doc(talkFeedbackViewerSecretToken)
160+
// Creating a fake entry so that feedbacks-access/{secretToken} node is created
161+
.collection('_empty').add({ _: 42 })
166162

167163
organizerSpaceContent.talkFeedbackViewerTokens.push({
168164
eventId: event.id,

cloud/functions/src/functions/firestore/onTalkFeedbackProvided.ts

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {UserDailyFeedbacks, UserFeedback} from "../../../../../shared/feedbacks.
33
import {db} from "../../firebase";
44
import {getSecretTokenDoc} from "./firestore-utils";
55
import {ConferenceOrganizerSpace} from "../../../../../shared/conference-organizer-space.firestore";
6-
import {TalkAttendeeFeedback, TalkFeedbacks} from "../../../../../shared/talk-feedbacks.firestore";
6+
import {TalkAttendeeFeedback} from "../../../../../shared/talk-feedbacks.firestore";
77
import {UserTokensWallet} from "../../../../../shared/user-tokens-wallet.firestore";
88

99

@@ -49,8 +49,8 @@ async function updateTalkFeedbacksFromUserFeedbacks(userId: string, eventId: str
4949
throw new Error(`Unexpected unexistant user token wallet for userId=${userId}`);
5050
}
5151

52-
const talkFeedbacks = (await db.doc(`events/${eventId}/talks/${feedback.talkId}/feedbacks/${talkFeedbackViewerToken.secretToken}`).get()).data() as TalkFeedbacks|undefined
53-
|| { attendeeFeedbacks: [] };
52+
const userPublicTokensHavingProvidedFeedback = ((await db.collection(`events/${eventId}/talks/${feedback.talkId}/feedbacks-access/${talkFeedbackViewerToken.secretToken}/feedbacks`).listDocuments())
53+
|| []).map(d => d.id)
5454

5555
const attendeeFeedback: TalkAttendeeFeedback = {
5656
talkId: feedback.talkId,
@@ -61,14 +61,7 @@ async function updateTalkFeedbacksFromUserFeedbacks(userId: string, eventId: str
6161
attendeePublicToken: userTokensWallet.publicUserToken
6262
}
6363

64-
const afIndex = talkFeedbacks.attendeeFeedbacks.findIndex(af => af.talkId === feedback.talkId);
65-
if(afIndex === -1) {
66-
talkFeedbacks.attendeeFeedbacks.push(attendeeFeedback);
67-
} else {
68-
talkFeedbacks.attendeeFeedbacks[afIndex] = attendeeFeedback;
69-
}
70-
71-
await db.doc(`events/${eventId}/talks/${feedback.talkId}/feedbacks/${talkFeedbackViewerToken.secretToken}`).set(talkFeedbacks);
64+
await db.doc(`events/${eventId}/talks/${feedback.talkId}/feedbacks-access/${talkFeedbackViewerToken.secretToken}/feedbacks/${userTokensWallet.publicUserToken}`).set(attendeeFeedback)
7265
}
7366
}))
7467
}

shared/talk-feedbacks.firestore.d.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import {ISODatetime} from "./type-utils";
22

3-
export type TalkFeedbacks = {
4-
attendeeFeedbacks: TalkAttendeeFeedback[]
5-
}
6-
73
export type TalkAttendeeFeedback = {
84
talkId: string,
95
attendeePublicToken: string;

0 commit comments

Comments
 (0)