Skip to content

Commit af9e8d0

Browse files
committed
create new achievements for first student match
1 parent 8ad1771 commit af9e8d0

File tree

7 files changed

+1537
-1415
lines changed

7 files changed

+1537
-1415
lines changed

common/achievement/metric.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ const batchOfMetrics = [
2929
createMetric('student_onboarding_screened', ['student_screening_appointment_done', 'tutor_screening_success', 'instructor_screening_success'], () => {
3030
return 1;
3131
}),
32+
createMetric('student_onboarding_tutor_screened', ['tutor_screening_success'], () => {
33+
return 1;
34+
}),
3235
createMetric('student_onboarding_coc_success', ['student_coc_updated'], () => {
3336
return 1;
3437
}),
@@ -49,6 +52,9 @@ const batchOfMetrics = [
4952
),
5053

5154
/* CONDUCTED MATCH APPOINTMENT */
55+
createMetric('student_add_match_appointment', ['student_add_appointment_match'], () => {
56+
return 1;
57+
}),
5258
createMetric('student_conducted_match_appointment', ['student_joined_match_meeting'], () => {
5359
return 1;
5460
}),
@@ -109,6 +115,9 @@ const batchOfMetrics = [
109115
createMetric('pupil_match_create', ['tutee_matching_success'], () => {
110116
return 1;
111117
}),
118+
createMetric('student_match_requested', ['tutor_match_requested'], () => {
119+
return 1;
120+
}),
112121
createMetric('student_match_create', ['tutor_matching_success'], () => {
113122
return 1;
114123
}),

common/appointment/create.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { getMatch, getPupil, getStudent } from '../../graphql/util';
1414
import { PrerequisiteError, RedundantError } from '../../common/util/error';
1515
import { getContextForGroupAppointmentReminder, getContextForMatchAppointmentReminder } from './util';
1616
import { getNotificationContextForSubcourse } from '../../common/courses/notifications';
17+
import { createRelation, EventRelationType } from '../achievement/relation';
1718

1819
const logger = getLogger();
1920

@@ -96,6 +97,7 @@ export const createMatchAppointments = async (matchId: number, appointmentsToBeC
9697

9798
if (!silent) {
9899
await Notification.actionTaken(userForPupil(pupil), 'student_add_appointment_match', {
100+
relation: createRelation(EventRelationType.Match, matchId),
99101
student,
100102
matchId: matchId.toString(),
101103
});

common/student/screening.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ export async function addTutorScreening(
6060
},
6161
});
6262

63+
const asUser = userForStudent(student);
6364
if (!batchMode) {
6465
if (screening.success) {
65-
const asUser = userForStudent(student);
6666
await updateSessionRolesOfUser(asUser.userID);
6767
await scheduleCoCReminders(student);
6868
await Notification.actionTaken(userForStudent(student), 'tutor_screening_success', {});

scripts/parse-achievements/achievements.csv

Lines changed: 15 additions & 16 deletions
Large diffs are not rendered by default.

scripts/parse-achievements/gql-enable.txt

Lines changed: 60 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -10,138 +10,153 @@ student_onboarding_2:achievementTemplateActivate(achievementTemplateId:2)
1010
student_onboarding_3:achievementTemplateActivate(achievementTemplateId:3)
1111

1212

13-
student_conduct_match_appointment_1:achievementTemplateActivate(achievementTemplateId:4)
13+
student_new_match_1:achievementTemplateActivate(achievementTemplateId:4)
1414

1515

16-
student_conduct_match_appointment_2:achievementTemplateActivate(achievementTemplateId:5)
16+
student_new_match_2:achievementTemplateActivate(achievementTemplateId:5)
1717

1818

19-
student_conduct_match_appointment_3:achievementTemplateActivate(achievementTemplateId:6)
19+
student_new_match_3:achievementTemplateActivate(achievementTemplateId:6)
2020

2121

22-
student_conduct_match_appointment_4:achievementTemplateActivate(achievementTemplateId:7)
22+
student_new_match_4:achievementTemplateActivate(achievementTemplateId:7)
2323

2424

25-
student_conduct_match_appointment_5:achievementTemplateActivate(achievementTemplateId:8)
25+
student_new_match_5:achievementTemplateActivate(achievementTemplateId:8)
2626

2727

28-
student_conduct_match_appointment_6:achievementTemplateActivate(achievementTemplateId:9)
28+
student_conduct_match_appointment_1:achievementTemplateActivate(achievementTemplateId:9)
2929

3030

31-
student_conduct_match_appointment_7:achievementTemplateActivate(achievementTemplateId:10)
31+
student_conduct_match_appointment_2:achievementTemplateActivate(achievementTemplateId:10)
3232

3333

34-
student_conduct_course_appointment_1:achievementTemplateActivate(achievementTemplateId:11)
34+
student_conduct_match_appointment_3:achievementTemplateActivate(achievementTemplateId:11)
3535

3636

37-
student_conduct_course_appointment_2:achievementTemplateActivate(achievementTemplateId:12)
37+
student_conduct_match_appointment_4:achievementTemplateActivate(achievementTemplateId:12)
3838

3939

40-
student_conduct_course_appointment_3:achievementTemplateActivate(achievementTemplateId:13)
40+
student_conduct_match_appointment_5:achievementTemplateActivate(achievementTemplateId:13)
4141

4242

43-
student_conduct_course_appointment_4:achievementTemplateActivate(achievementTemplateId:14)
43+
student_conduct_match_appointment_6:achievementTemplateActivate(achievementTemplateId:14)
4444

4545

46-
student_conduct_course_appointment_5:achievementTemplateActivate(achievementTemplateId:15)
46+
student_conduct_match_appointment_7:achievementTemplateActivate(achievementTemplateId:15)
4747

4848

49-
student_conduct_course_appointment_6:achievementTemplateActivate(achievementTemplateId:16)
49+
student_conduct_course_appointment_1:achievementTemplateActivate(achievementTemplateId:16)
5050

5151

52-
student_conduct_course_appointment_7:achievementTemplateActivate(achievementTemplateId:17)
52+
student_conduct_course_appointment_2:achievementTemplateActivate(achievementTemplateId:17)
5353

5454

55-
student_offer_course_1:achievementTemplateActivate(achievementTemplateId:18)
55+
student_conduct_course_appointment_3:achievementTemplateActivate(achievementTemplateId:18)
5656

5757

58-
student_offer_course_2:achievementTemplateActivate(achievementTemplateId:19)
58+
student_conduct_course_appointment_4:achievementTemplateActivate(achievementTemplateId:19)
5959

6060

61-
student_offer_course_3:achievementTemplateActivate(achievementTemplateId:20)
61+
student_conduct_course_appointment_5:achievementTemplateActivate(achievementTemplateId:20)
6262

6363

64-
student_course_participation_1:achievementTemplateActivate(achievementTemplateId:21)
64+
student_conduct_course_appointment_6:achievementTemplateActivate(achievementTemplateId:21)
6565

6666

67-
student_course_participation_2:achievementTemplateActivate(achievementTemplateId:22)
67+
student_conduct_course_appointment_7:achievementTemplateActivate(achievementTemplateId:22)
6868

6969

70-
student_match_regular_learning_1:achievementTemplateActivate(achievementTemplateId:23)
70+
student_offer_course_1:achievementTemplateActivate(achievementTemplateId:23)
7171

7272

73-
student_appointment_reliability_1:achievementTemplateActivate(achievementTemplateId:24)
73+
student_offer_course_2:achievementTemplateActivate(achievementTemplateId:24)
7474

7575

76-
student_regular_learning_1:achievementTemplateActivate(achievementTemplateId:25)
76+
student_offer_course_3:achievementTemplateActivate(achievementTemplateId:25)
7777

7878

79-
pupil_onboarding_1:achievementTemplateActivate(achievementTemplateId:26)
79+
student_course_participation_1:achievementTemplateActivate(achievementTemplateId:26)
8080

8181

82-
pupil_onboarding_2:achievementTemplateActivate(achievementTemplateId:27)
82+
student_course_participation_2:achievementTemplateActivate(achievementTemplateId:27)
8383

8484

85-
pupil_conduct_match_appointment_1:achievementTemplateActivate(achievementTemplateId:28)
85+
student_match_regular_learning_1:achievementTemplateActivate(achievementTemplateId:28)
8686

8787

88-
pupil_conduct_match_appointment_2:achievementTemplateActivate(achievementTemplateId:29)
88+
student_appointment_reliability_1:achievementTemplateActivate(achievementTemplateId:29)
8989

9090

91-
pupil_conduct_match_appointment_3:achievementTemplateActivate(achievementTemplateId:30)
91+
student_regular_learning_1:achievementTemplateActivate(achievementTemplateId:30)
9292

9393

94-
pupil_conduct_match_appointment_4:achievementTemplateActivate(achievementTemplateId:31)
94+
pupil_onboarding_1:achievementTemplateActivate(achievementTemplateId:31)
9595

9696

97-
pupil_conduct_match_appointment_5:achievementTemplateActivate(achievementTemplateId:32)
97+
pupil_onboarding_2:achievementTemplateActivate(achievementTemplateId:32)
9898

9999

100-
pupil_conduct_match_appointment_6:achievementTemplateActivate(achievementTemplateId:33)
100+
pupil_conduct_match_appointment_1:achievementTemplateActivate(achievementTemplateId:33)
101101

102102

103-
pupil_conduct_match_appointment_7:achievementTemplateActivate(achievementTemplateId:34)
103+
pupil_conduct_match_appointment_2:achievementTemplateActivate(achievementTemplateId:34)
104104

105105

106-
pupil_conduct_course_appointment_1:achievementTemplateActivate(achievementTemplateId:35)
106+
pupil_conduct_match_appointment_3:achievementTemplateActivate(achievementTemplateId:35)
107107

108108

109-
pupil_conduct_course_appointment_2:achievementTemplateActivate(achievementTemplateId:36)
109+
pupil_conduct_match_appointment_4:achievementTemplateActivate(achievementTemplateId:36)
110110

111111

112-
pupil_conduct_course_appointment_3:achievementTemplateActivate(achievementTemplateId:37)
112+
pupil_conduct_match_appointment_5:achievementTemplateActivate(achievementTemplateId:37)
113113

114114

115-
pupil_conduct_course_appointment_4:achievementTemplateActivate(achievementTemplateId:38)
115+
pupil_conduct_match_appointment_6:achievementTemplateActivate(achievementTemplateId:38)
116116

117117

118-
pupil_conduct_course_appointment_5:achievementTemplateActivate(achievementTemplateId:39)
118+
pupil_conduct_match_appointment_7:achievementTemplateActivate(achievementTemplateId:39)
119119

120120

121-
pupil_conduct_course_appointment_6:achievementTemplateActivate(achievementTemplateId:40)
121+
pupil_conduct_course_appointment_1:achievementTemplateActivate(achievementTemplateId:40)
122122

123123

124-
pupil_conduct_course_appointment_7:achievementTemplateActivate(achievementTemplateId:41)
124+
pupil_conduct_course_appointment_2:achievementTemplateActivate(achievementTemplateId:41)
125125

126126

127-
pupil_course_participation_1:achievementTemplateActivate(achievementTemplateId:42)
127+
pupil_conduct_course_appointment_3:achievementTemplateActivate(achievementTemplateId:42)
128128

129129

130-
pupil_course_participation_2:achievementTemplateActivate(achievementTemplateId:43)
130+
pupil_conduct_course_appointment_4:achievementTemplateActivate(achievementTemplateId:43)
131131

132132

133-
pupil_match_regular_learning_1:achievementTemplateActivate(achievementTemplateId:44)
133+
pupil_conduct_course_appointment_5:achievementTemplateActivate(achievementTemplateId:44)
134134

135135

136-
pupil_appointment_reliability_1:achievementTemplateActivate(achievementTemplateId:45)
136+
pupil_conduct_course_appointment_6:achievementTemplateActivate(achievementTemplateId:45)
137137

138138

139-
pupil_regular_learning_1:achievementTemplateActivate(achievementTemplateId:46)
139+
pupil_conduct_course_appointment_7:achievementTemplateActivate(achievementTemplateId:46)
140140

141141

142-
user_original_corona_school_1:achievementTemplateActivate(achievementTemplateId:47)
142+
pupil_course_participation_1:achievementTemplateActivate(achievementTemplateId:47)
143143

144144

145-
user_original_lern_fair_1:achievementTemplateActivate(achievementTemplateId:48)
145+
pupil_course_participation_2:achievementTemplateActivate(achievementTemplateId:48)
146+
147+
148+
pupil_match_regular_learning_1:achievementTemplateActivate(achievementTemplateId:49)
149+
150+
151+
pupil_appointment_reliability_1:achievementTemplateActivate(achievementTemplateId:50)
152+
153+
154+
pupil_regular_learning_1:achievementTemplateActivate(achievementTemplateId:51)
155+
156+
157+
user_original_corona_school_1:achievementTemplateActivate(achievementTemplateId:52)
158+
159+
160+
user_original_lern_fair_1:achievementTemplateActivate(achievementTemplateId:53)
146161

147162
}

scripts/parse-achievements/gql-seed.txt

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,125 @@ student_onboarding_3: achievementTemplateCreate(data:{
7070
})
7171

7272

73+
student_new_match_1: achievementTemplateCreate(data:{
74+
templateFor: "Match",
75+
group: "student_new_match",
76+
groupOrder: 1,
77+
sequentialStepName: "Anfrage stellen",
78+
type: "SEQUENTIAL",
79+
title: "Neue Lernunterstützung",
80+
tagline: "Starte eine Lernpatenschaft",
81+
subtitle: null,
82+
footer: null,
83+
achievedFooter: null,
84+
description: "Es war großartig, dich am {{date}} besser kennenzulernen und freuen uns, dass du gemeinsam mit uns die Bildungschancen von Schüler:innen verbessern möchtest. Um dir eine:n passende:n Lernpartner:in zuzuweisen, bitten wir dich zunächst, eine Anfrage auf unserer Plattform zu stellen. Hier kannst du die Fächer und Jahrgangsstufe angeben, die für dich passend sind. Wir freuen uns auf den Start!",
85+
achievedDescription: null,
86+
image: null,
87+
achievedImage: null,
88+
actionName: "Anfrage stellen",
89+
actionRedirectLink: "/request-match",
90+
actionType: "Action",
91+
condition: "student_onboarding_tutor_screened > 0",
92+
conditionDataAggregations: "{\"student_onboarding_tutor_screened\":{\"metric\":\"student_onboarding_tutor_screened\",\"aggregator\":\"count\"}}",
93+
})
94+
95+
96+
student_new_match_2: achievementTemplateCreate(data:{
97+
templateFor: "Match",
98+
group: "student_new_match",
99+
groupOrder: 2,
100+
sequentialStepName: "Schüler:in erhalten",
101+
type: "SEQUENTIAL",
102+
title: "Neue Lernunterstützung",
103+
tagline: "Starte eine Lernpatenschaft",
104+
subtitle: null,
105+
footer: null,
106+
achievedFooter: null,
107+
description: "Wir sind mit vollem Engagement dabei, den:die ideale:n Lernpartner:in für dich zu finden.

108+
Sobald wir jemanden entdeckt haben, der:die perfekt zu deinen angegebenen Fächern und Jahrgangsstufen passt, senden wir dir direkt eine E-Mail. Dieser Prozess dauert in der Regel nur ein bis zwei Wochen und hängt davon ab, wie gut deine Angaben und die Verfügbarkeit passender Lernpartner:innen übereinstimmen. Deine Anfrage wurde am {{date}} gestellt – freue dich schon jetzt auf das kommende Lernabenteuer!",
109+
achievedDescription: null,
110+
image: null,
111+
achievedImage: null,
112+
actionName: null,
113+
actionRedirectLink: null,
114+
actionType: "Wait",
115+
condition: "student_match_requested > 0",
116+
conditionDataAggregations: "{\"student_match_requested\":{\"metric\":\"student_match_requested\",\"aggregator\":\"count\"}}",
117+
})
118+
119+
120+
student_new_match_3: achievementTemplateCreate(data:{
121+
templateFor: "Match",
122+
group: "student_new_match",
123+
groupOrder: 3,
124+
sequentialStepName: "Schüler:in kontaktieren",
125+
type: "SEQUENTIAL",
126+
title: "Neue Lernunterstützung",
127+
tagline: "{{pupil.firstname}}",
128+
subtitle: null,
129+
footer: null,
130+
achievedFooter: null,
131+
description: "Hurra, wir haben eine:n Lernpartner:in für dich gefunden! 🎉
132+
{{pupil.firstname}} besucht die {{pupil.grade}} und ist gespannt darauf, gemeinsam mit dir in {{matchSubjects}} zu lernen. Trete über den Chat in Kontakt mit {{pupil.firstname}} und schlage ein erstes Kennenlerngespräch vor. Bitte habe Verständnis, falls nicht sofort eine Rückmeldung erfolgt – manche Schüler:innen überprüfen ihre Nachrichten nicht regelmäßig. Wir führen vor der Vermittlung Gespräche mit allen Schüler:innen, um ihre Bedürfnisse zu verstehen und überprüfen. {{pupil.firstname}} freut sich definitiv darauf, dich kennenzulernen!",
133+
achievedDescription: null,
134+
image: null,
135+
achievedImage: null,
136+
actionName: "{{pupil.firstname}} kontaktieren",
137+
actionRedirectLink: "direkt auf den 1:1-Chat",
138+
actionType: "Action",
139+
condition: "student_match_create > 0",
140+
conditionDataAggregations: "{\"student_match_create\":{\"metric\":\"student_match_create\",\"aggregator\":\"count\"}}",
141+
})
142+
143+
144+
student_new_match_4: achievementTemplateCreate(data:{
145+
templateFor: "Match",
146+
group: "student_new_match",
147+
groupOrder: 4,
148+
sequentialStepName: "Termin erstellen",
149+
type: "SEQUENTIAL",
150+
title: "Neue Lernunterstützung",
151+
tagline: "{{pupil.firstname}}",
152+
subtitle: null,
153+
footer: null,
154+
achievedFooter: null,
155+
description: "Starte dein Kennenlernen mit {{pupil.firstname}} auf unserer Plattform, indem du einen Termin erstellst. Unser System verknüpft deinen Termin automatisch mit einem Zoom-Meeting – Komfort pur!
156+
Zusätzlich informieren wir {{pupil.firstname}} automatisch per E-Mail über neu geplante Termine und senden eine Erinnerung kurz vor dem Start des Treffens. Nutze diese Funktion auch zukünftig, um die Verlässlichkeit von {{pupil.firstname}} weiter zu stärken.",
157+
achievedDescription: null,
158+
image: null,
159+
achievedImage: null,
160+
actionName: "Termin erstellen",
161+
actionRedirectLink: "/match/{{match.id}}",
162+
actionType: "Action",
163+
condition: "student_add_match_appointment > 0",
164+
conditionDataAggregations: "{\"student_add_match_appointment\":{\"metric\":\"student_add_match_appointment\",\"aggregator\":\"count\"}}",
165+
})
166+
167+
168+
student_new_match_5: achievementTemplateCreate(data:{
169+
templateFor: "Match",
170+
group: "student_new_match",
171+
groupOrder: 5,
172+
sequentialStepName: "Erstes Gespräch absolvieren",
173+
type: "SEQUENTIAL",
174+
title: "Neue Lernunterstützung",
175+
tagline: "{{pupil.firstname}}",
176+
subtitle: null,
177+
footer: null,
178+
achievedFooter: "Wow! Du hast alle Schritte abgeschlossen.",
179+
description: "Wow, die Vorfreude steigt – bald startet eure gemeinsame Reise! 🚀
180+
Wir wünschen dir viel Spaß bei deinem ersten Termin in der Lernunterstützung mit {{pupil.firstname}} und hoffen, dass ihr euch gut versteht und alles klappt. Für dein erstes Treffen haben wir einen Leitfaden zusammengestellt, der dir hilfreiche Tipps, Tricks und spannende Gesprächsthemen bietet. Nutze ihn, um dich optimal vorzubereiten und das Beste aus eurer Zusammenarbeit herauszuholen!",
181+
achievedDescription: "Herzlichen Glückwunsch zu deinem erfolgreichen ersten Termin in der Lernunterstützung mit {{pupil.firstname}}! Möge diese Begegnung der Beginn einer spannenden und produktiven Lernreise sein. Wir sind sicher, dass eure Zusammenarbeit von Freude und Erfolg geprägt sein wird. Auf eine inspirierende Zeit des gemeinsamen Lernens!",
182+
image: null,
183+
achievedImage: null,
184+
actionName: "Zum Termin",
185+
actionRedirectLink: "/appointment/{{appointment.id}}",
186+
actionType: "Appointment",
187+
condition: "student_conducted_match_appointment > 0",
188+
conditionDataAggregations: "{\"student_conducted_match_appointment\":{\"metric\":\"student_conducted_match_appointment\",\"aggregator\":\"count\"}}",
189+
})
190+
191+
73192
student_conduct_match_appointment_1: achievementTemplateCreate(data:{
74193
templateFor: "Global_Matches",
75194
group: "student_conduct_match_appointment",

0 commit comments

Comments
 (0)