From a8162116303f539af090c47328c3ff7a77115607 Mon Sep 17 00:00:00 2001 From: Daniel Henkel Date: Sun, 8 Sep 2024 18:49:04 +0200 Subject: [PATCH] create new achievements for first student match --- common/achievement/derive.ts | 73 +++----- common/achievement/get.ts | 9 +- common/achievement/metric.ts | 15 ++ common/appointment/create.ts | 8 + common/chat/create.ts | 18 ++ common/notification/actions.ts | 24 ++- scripts/parse-achievements/achievements.csv | 27 ++- scripts/parse-achievements/gql-enable.txt | 111 +++++++----- scripts/parse-achievements/gql-seed.txt | 161 +++++++++++++++++ seed-achievements.ts | 185 ++++++++++++++++++++ seed-db.ts | 154 ---------------- 11 files changed, 516 insertions(+), 269 deletions(-) diff --git a/common/achievement/derive.ts b/common/achievement/derive.ts index e3130bbe4..74fcc71ef 100644 --- a/common/achievement/derive.ts +++ b/common/achievement/derive.ts @@ -26,15 +26,15 @@ const GhostAchievements: { [key: string]: achievement_template } = { group: PupilNewMatchGroup, groupOrder: 1, type: AchievementType.SEQUENTIAL, - image: 'gamification/achievements/release/finish_onboarding/two_pieces/step_1.png', + image: 'gamification/achievements/release/new_match/five_pieces/empty_state.png', tagline: 'Starte eine Lernpatenschaft', title: 'Neue Lernunterstützung', subtitle: null, 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!', + 'Damit wir dir den:die perfekte:n Lernpartner:in zuweisen können, musst du zunächst eine Anfrage auf unserer Plattform stellen. Dort kannst du ganz einfach die Fächer angeben, die für dich wichtig sind und in denen wir dir helfen können. Wir freuen uns darauf, mit dir gemeinsam durchzustarten und die Lernreise zu beginnen!', footer: null, actionName: 'Anfrage stellen', - actionRedirectLink: '/matching', + actionRedirectLink: '/request-match', actionType: AchievementActionType.Action, condition: 'false', // This will ensure that an evaluation will always fail conditionDataAggregations: {}, @@ -50,7 +50,7 @@ const GhostAchievements: { [key: string]: achievement_template } = { group: PupilNewMatchGroup, groupOrder: 2, type: AchievementType.SEQUENTIAL, - image: 'gamification/achievements/release/finish_onboarding/two_pieces/step_2.png', + image: 'gamification/achievements/release/new_match/five_pieces/step_1.png', tagline: 'Starte eine Lernpatenschaft', title: 'Neue Lernunterstützung', subtitle: null, @@ -74,7 +74,7 @@ const GhostAchievements: { [key: string]: achievement_template } = { group: StudentNewMatchGroup, groupOrder: 1, type: AchievementType.SEQUENTIAL, - image: 'gamification/achievements/release/finish_onboarding/two_pieces/step_1.png', + image: 'gamification/achievements/release/new_match/five_pieces/empty_state.png', tagline: 'Starte eine Lernpatenschaft', title: 'Neue Lernunterstützung', subtitle: null, @@ -82,7 +82,7 @@ const GhostAchievements: { [key: string]: achievement_template } = { '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!', footer: null, actionName: 'Anfrage stellen', - actionRedirectLink: '/matching', + actionRedirectLink: '/request-match', actionType: AchievementActionType.Action, condition: 'false', // This will ensure that an evaluation will always fail conditionDataAggregations: {}, @@ -92,30 +92,6 @@ const GhostAchievements: { [key: string]: achievement_template } = { achievedImage: null, sequentialStepName: 'Anfrage stellen', }, - student_new_match_2: { - id: -1, - templateFor: AchievementTemplateFor.Match, - group: StudentNewMatchGroup, - groupOrder: 2, - type: AchievementType.SEQUENTIAL, - image: 'gamification/achievements/release/finish_onboarding/two_pieces/step_2.png', - tagline: 'Starte eine Lernpatenschaft', - title: 'Neue Lernunterstützung', - subtitle: null, - description: - 'Fantastisch, deine Anfrage ist eingegangen! Bevor wir dir deine:n ideale:n Lernpartner:in vermitteln können, möchten wir gerne kurz per Zoom mit dir sprechen. Unser Ziel ist es, die perfekte Person für dich zu finden und genau zu verstehen, was du dir wünschst. Buche doch gleich einen Termin für unser Gespräch – wir sind schon ganz gespannt auf dich!', - footer: null, - actionName: 'Termin buchen', - actionRedirectLink: 'https://calendly.com', - actionType: AchievementActionType.Action, - condition: 'false', - conditionDataAggregations: {}, - isActive: true, - achievedDescription: null, - achievedFooter: null, - achievedImage: null, - sequentialStepName: 'Gespräch mit Lern-Fair absolvieren', - }, }; // Large parts of our user communication are event based, i.e. users get a notification for an appointment, @@ -175,6 +151,8 @@ async function generatePupilMatching( }); } + console.log('iso', hasRequest, hasSuccessfulScreening, achievement); + result.push({ id: -1, templateId: -1, @@ -211,6 +189,8 @@ async function derivePupilMatching(user: User, pupil: Pupil, result: achievement where: { pupilId: pupil.id, status: pupil_screening_status_enum.success, invalidated: false }, orderBy: { createdAt: 'desc' }, }); + const hasSuccessfulScreenings = successfulScreenings.length > 0; + const totalMatchCount = await prisma.match.count({ where: { pupilId: pupil.id } }); const newMatchAchievements = userAchievements.filter( (row) => row.template.group === PupilNewMatchGroup && row.template.groupOrder === PupilNewMatchGroupOrder @@ -222,13 +202,17 @@ async function derivePupilMatching(user: User, pupil: Pupil, result: achievement if (successfulScreenings.length > 0) { ctx.lastScreeningDate = successfulScreenings[0].updatedAt.toISOString(); } + // This case happens when the student just registered and had a successful screening + if (pupil.openMatchRequestCount === 0 && totalMatchCount === 0) { + const ghosts = await generatePupilMatching(null, user, hasRequest, hasSuccessfulScreenings, ctx); + result.push(...ghosts); + } for (let i = 0; i < pupil.openMatchRequestCount; i++) { - const ghosts = await generatePupilMatching(null, user, hasRequest, successfulScreenings.length > 0, ctx); + const ghosts = await generatePupilMatching(null, user, hasRequest, hasSuccessfulScreenings, ctx); result.push(...ghosts); } - for (const userAchievement of newMatchAchievements) { - const ghosts = await generatePupilMatching(userAchievement, user, hasRequest, successfulScreenings.length > 0, ctx); + const ghosts = await generatePupilMatching(userAchievement, user, hasRequest, hasSuccessfulScreenings, ctx); result.push(...ghosts); } } @@ -243,6 +227,7 @@ async function deriveStudentMatching(user: User, student: Student, result: achie where: { studentId: student.id, success: true }, orderBy: { createdAt: 'desc' }, }); + const totalMatchCount = await prisma.match.count({ where: { studentId: student.id } }); const newMatchAchievements = userAchievements.filter( (row) => row.template.group === StudentNewMatchGroup && row.template.groupOrder === StudentNewMatchGroupOrder @@ -254,13 +239,19 @@ async function deriveStudentMatching(user: User, student: Student, result: achie if (successfulScreenings.length > 0) { ctx.lastScreeningDate = successfulScreenings[0].updatedAt.toISOString(); } + // This case happens when the student just registered and had a successful screening + if (student.openMatchRequestCount === 0 && totalMatchCount === 0) { + const ghosts = await generateStudentMatching(null, user, hasRequest, ctx); + result.push(...ghosts); + } + // This will for (let i = 0; i < student.openMatchRequestCount; i++) { - const ghosts = await generateStudentMatching(null, user, hasRequest, successfulScreenings.length > 0, ctx); + const ghosts = await generateStudentMatching(null, user, hasRequest, ctx); result.push(...ghosts); } for (const userAchievement of newMatchAchievements) { - const ghosts = await generateStudentMatching(userAchievement, user, hasRequest, successfulScreenings.length > 0, ctx); + const ghosts = await generateStudentMatching(userAchievement, user, hasRequest, ctx); result.push(...ghosts); } } @@ -269,7 +260,6 @@ async function generateStudentMatching( achievement: achievement_with_template | null, user: User, hasRequest: boolean, - hasSuccessfulScreening: boolean, ctx: StudentNewMatchGhostContext ): Promise { const result: achievement_with_template[] = []; @@ -306,16 +296,5 @@ async function generateStudentMatching( relation: achievement?.relation ?? randomRelation, }); - result.push({ - id: -1, - templateId: -1, - userId: user.userID, - isSeen: true, - template: GhostAchievements.student_new_match_2, - context: ctx, - recordValue: null, - achievedAt: hasSuccessfulScreening || achievement ? new Date() : null, - relation: achievement?.relation ?? randomRelation, - }); return result; } diff --git a/common/achievement/get.ts b/common/achievement/get.ts index eccc84950..b2285c087 100644 --- a/common/achievement/get.ts +++ b/common/achievement/get.ts @@ -27,6 +27,10 @@ export async function getUserAchievementsWithTemplates(user: User, byType: Achie }, include: { template: true }, }); + + const derivedAchievements = await deriveAchievements(user, userAchievementsWithTemplates); + userAchievementsWithTemplates.push(...derivedAchievements); + return userAchievementsWithTemplates; } export type achievements_with_template = ThenArg>; @@ -43,8 +47,6 @@ const getAchievementById = async (user: User, achievementId: number): Promise => { const userAchievements = await getUserAchievementsWithTemplates(user, AchievementType.SEQUENTIAL); - const derivedAchievements = await deriveAchievements(user, userAchievements); - userAchievements.push(...derivedAchievements); const userAchievementGroups: { [groupRelation: string]: achievements_with_template } = {}; userAchievements.forEach((ua) => { @@ -111,9 +113,6 @@ const getFurtherAchievements = async (user: User): Promise // User achievements are already started by the user and are either active or completed. const getUserAchievements = async (user: User): Promise => { const userAchievements = await getUserAchievementsWithTemplates(user); - const derivedAchievements = await deriveAchievements(user, userAchievements); - userAchievements.push(...derivedAchievements); - const userAchievementGroups: { [group: string]: achievements_with_template } = {}; userAchievements.forEach((ua) => { if (!userAchievementGroups[`${ua.template.group}/${ua.relation}`]) { diff --git a/common/achievement/metric.ts b/common/achievement/metric.ts index 172ff0f65..cf1447700 100644 --- a/common/achievement/metric.ts +++ b/common/achievement/metric.ts @@ -29,6 +29,9 @@ const batchOfMetrics = [ createMetric('student_onboarding_screened', ['student_screening_appointment_done', 'tutor_screening_success', 'instructor_screening_success'], () => { return 1; }), + createMetric('student_onboarding_tutor_screened', ['tutor_screening_success'], () => { + return 1; + }), createMetric('student_onboarding_coc_success', ['student_coc_updated'], () => { return 1; }), @@ -49,6 +52,9 @@ const batchOfMetrics = [ ), /* CONDUCTED MATCH APPOINTMENT */ + createMetric('student_add_match_appointment', ['student_add_appointment_match_with_pupil'], () => { + return 1; + }), createMetric('student_conducted_match_appointment', ['student_joined_match_meeting'], () => { return 1; }), @@ -106,9 +112,18 @@ const batchOfMetrics = [ }), /* Matching */ + createMetric('pupil_create_new_match_chat', ['pupil_create_new_match_chat'], () => { + return 1; + }), + createMetric('student_create_new_match_chat', ['student_create_new_match_chat'], () => { + return 1; + }), createMetric('pupil_match_create', ['tutee_matching_success'], () => { return 1; }), + createMetric('student_match_requested', ['tutor_match_requested'], () => { + return 1; + }), createMetric('student_match_create', ['tutor_matching_success'], () => { return 1; }), diff --git a/common/appointment/create.ts b/common/appointment/create.ts index d19f9d3cb..0386393bd 100644 --- a/common/appointment/create.ts +++ b/common/appointment/create.ts @@ -14,6 +14,7 @@ import { getMatch, getPupil, getStudent } from '../../graphql/util'; import { PrerequisiteError, RedundantError } from '../../common/util/error'; import { getContextForGroupAppointmentReminder, getContextForMatchAppointmentReminder } from './util'; import { getNotificationContextForSubcourse } from '../../common/courses/notifications'; +import { createRelation, EventRelationType } from '../achievement/relation'; const logger = getLogger(); @@ -96,6 +97,7 @@ export const createMatchAppointments = async (matchId: number, appointmentsToBeC if (!silent) { await Notification.actionTaken(userForPupil(pupil), 'student_add_appointment_match', { + relation: createRelation(EventRelationType.Match, matchId), student, matchId: matchId.toString(), }); @@ -110,6 +112,12 @@ export const createMatchAppointments = async (matchId: number, appointmentsToBeC ...(await getContextForMatchAppointmentReminder(appointment)), pupil, }); + await Notification.actionTaken(userForStudent(student), 'student_add_appointment_match_with_pupil', { + relation: createRelation(EventRelationType.Match, matchId), + pupil, + match: { id: matchId.toString() }, + lecture: appointment, + }); } } diff --git a/common/chat/create.ts b/common/chat/create.ts index 3f20bc940..d2720cc5d 100644 --- a/common/chat/create.ts +++ b/common/chat/create.ts @@ -9,6 +9,8 @@ import systemMessages from './localization'; import { getLogger } from '../logger/logger'; import assert from 'assert'; import { createHmac } from 'crypto'; +import { actionTaken } from '../notification'; +import { createRelation, EventRelationType } from '../achievement/relation'; const logger = getLogger('Chat'); const getOrCreateOneOnOneConversation = async ( @@ -201,6 +203,22 @@ async function createContactChat(meUser: User, contactUser: User): Promise 0,"{""student_verified_events"":{""metric"":""student_onboarding_verified"";""aggregator"":""count""}}" Global,Sequential,student_onboarding,2,student,Onboarding,Willkommen bei Lern-Fair 👋,,Action,Termin buchen,https://calendly.com/lern-fair/huh-kennenlernen?email={{email}},Wir sind gespannt darauf; dich kennenzulernen! In einem kurzen; 15-minütigen Zoom-Gespräch möchten wir dir gerne unsere vielfältigen Engagement-Möglichkeiten vorstellen und alle deine Fragen beantworten. Buche einfach einen Termin; um mehr zu erfahren und dann voller Tatendrang direkt durchzustarten. Falls dir etwas dazwischen kommt; sage den Termin bitte ab und buche dir einen neuen.,,{{progress}} von {{maxValue}} Schritten abgeschlossen,Kennenlerngespräch absolvieren,{{progress}} von {{maxValue}} Schritten abgeschlossen,Flugticket,gamification/achievements/release/finish_onboarding/three_pieces/step_1.png,,student_screened_events > 0,"{""student_screened_events"":{""metric"":""student_onboarding_screened"";""aggregator"":""count""}}" Global,Sequential,student_onboarding,3,student,Onboarding,Willkommen bei Lern-Fair 👋,,Action,Infos zum Führungszeugnis,/certificate-of-conduct,Der Schutz von Kindern und Jugendlichen liegt uns sehr am Herzen; daher benötigen wir von allen Ehrenamtlichen ein erweitertes Führungszeugnis. Im nächsten Schritt findest du eine Anleitung zur Beantragung sowie eine Bescheinigung zur Kostenübernahme für das erweiterte Führungszeugnis. Um deinen Account aktiv zu halten; bitten wir dich; das erweiterte Führungszeugnis bis zum {{date}} bei uns einzureichen. Gemeinsam setzen wir uns für eine sichere Umgebung ein; in der alle sich wohl und geschützt fühlen können.,Herzlichen Glückwunsch! Du hast alle Onboarding-Schritte erfolgreich gemeistert und dir das Abflugticket für Loki gesichert. Wir sind begeistert; dass du nun Teil unseres Teams bist und Schüler:innen auf ihrem Lernweg begleitest. Gemeinsam setzen wir uns für eine bessere Bildung in Deutschland ein. Du bist bereits jetzt ein:e Lern-Fair Held:in! ❤️ Danke für dein Engagement und deine Begeisterung!,{{progress}} von {{maxValue}} Schritten abgeschlossen,Führungszeugnis einreichen,Wow! Du hast alle Schritte abgeschlossen.,Flugticket,gamification/achievements/release/finish_onboarding/three_pieces/step_2.png,gamification/achievements/release/finish_onboarding/three_pieces/step_3.png,student_coc_success_events > 0,"{""student_coc_success_events"":{""metric"":""student_onboarding_coc_success"";""aggregator"":""count""}}" -Match,Sequential,,1,student,Neue Lernunterstützung,Starte eine Lernpatenschaft,,Action,Anfrage stellen,Match-Anfrage-Seite,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!,,,Anfrage stellen,,Rucksack,,,, -Match,Sequential,,2,student,Neue Lernunterstützung,Starte eine Lernpatenschaft,,None,,,"Wir sind mit vollem Engagement dabei; den:die ideale:n Lernpartner:in für dich zu finden.
 -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!",,,Schüler:in erhalten,,Rucksack,,,, -Match,Sequential,,3,student,Neue Lernunterstützung,{{name}},,Action,{{var:pupil.firstname}} kontaktieren,direkt auf den 1:1-Chat,"Hurra; wir haben eine:n Lernpartner:in für dich gefunden! 🎉 -{{var:pupil.firstname}} besucht die {{var:pupilGrade}} und ist gespannt darauf; gemeinsam mit dir in {{var:matchSubjects}} zu lernen. Trete über den Chat in Kontakt mit {{var: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. {{var:pupil.firstname}} freut sich definitiv darauf; dich kennenzulernen!",,,Schüler:in kontaktieren,,Rucksack,,,, -Match,Sequential,,4,student,Neue Lernunterstützung,{{name}},,Action,Termin erstellen,Direkt in den Terminerstellungsprozess mit der Persno,"Starte dein Kennenlernen mit {{name}} auf unserer Plattform; indem du einen Termin erstellst. Unser System verknüpft deinen Termin automatisch mit einem Zoom-Meeting – Komfort pur! -Zusätzlich informieren wir {{name}} 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 {{name}} weiter zu stärken.",,,Termin erstellen,,Rucksack,,,, -Match,Sequential,,5,student,Neue Lernunterstützung,{{name}},,Appointment,Zum Termin,Link auf die Termin-Detailseite,"Wow; die Vorfreude steigt – bald startet eure gemeinsame Reise! 🚀 -Wir wünschen dir viel Spaß bei deinem ersten Termin in der Lernunterstützung mit {{name}} 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!",Herzlichen Glückwunsch zu deinem erfolgreichen ersten Termin in der Lernunterstützung mit {{name}}! 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!,,Erstes Gespräch absolvieren,Wow! Du hast alle Schritte abgeschlossen.,Rucksack,,,, +Match,Sequential,,1,student,Neue Lernunterstützung,Starte eine Lernpatenschaft,,Action,Anfrage stellen,/request-match,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!,,,Anfrage stellen,,Rucksack,gamification/achievements/release/new_match/five_pieces/empty_state.png,,student_match_requested > 0,"{""student_match_requested"":{""metric"":""student_match_requested"";""aggregator"":""count""}}" +Match,Sequential,student_new_match,2,student,Neue Lernunterstützung,Starte eine Lernpatenschaft,,Wait,Lernpartner:in erhalten,,Wir sind mit vollem Engagement dabei; den:die ideale:n Lernpartner:in für dich zu finden. 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!,,,Schüler:in erhalten,,Rucksack,gamification/achievements/release/new_match/five_pieces/step_1.png,,student_match_create > 0,"{""student_match_create"":{""metric"":""student_match_create"";""aggregator"":""count""}}" +Match,Sequential,student_new_match,3,student,Neue Lernunterstützung,{{pupil.firstname}},,Action,{{pupil.firstname}} kontaktieren,/chat,Hurra; wir haben eine:n Lernpartner:in für dich gefunden! 🎉 {{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!,,,Schüler:in kontaktieren,,Rucksack,gamification/achievements/release/new_match/five_pieces/step_2.png,,student_create_new_match_chat > 0,"{""student_create_new_match_chat"":{""metric"":""student_create_new_match_chat"";""aggregator"":""count""}}" +Match,Sequential,student_new_match,4,student,Neue Lernunterstützung,{{pupil.firstname}},,Action,Termin erstellen,/match/{{match.id}},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! 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.,,,Termin erstellen,,Rucksack,gamification/achievements/release/new_match/five_pieces/step_3.png,,student_add_match_appointment > 0,"{""student_add_match_appointment"":{""metric"":""student_add_match_appointment"";""aggregator"":""count""}}" +Match,Sequential,student_new_match,5,student,Neue Lernunterstützung,{{pupil.firstname}},,Appointment,Zum Termin,/appointment/{{lecture.id}},Wow; die Vorfreude steigt – bald startet eure gemeinsame Reise! 🚀 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!,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!,,Erstes Gespräch absolvieren,Wow! Du hast alle Schritte abgeschlossen.,Rucksack,gamification/achievements/release/new_match/five_pieces/step_4.png,gamification/achievements/release/new_match/five_pieces/step_5.png,student_conducted_match_appointment > 0,"{""student_conducted_match_appointment"":{""metric"":""student_conducted_match_appointment"";""aggregator"":""count""}}" GlobalMatch,Tiered,student_conduct_match_appointment,1,student,1 durchgeführter Termin,1:1-Nachhilfe,,None,,,Sobald du einen Nachhilfe-Termin erfolgreich durchgeführt hast; geht die Reise mit unserer Eule Loki weiter. Bleib dran und schließe alle Termine ab; um zu sehen wohin euch die Lernreise als Nächstes führt.,Super! Du hattest deinen ersten Nachhilfe-Termin mit deinem:r Lernpartner:in. Bleibt am Ball und setzt eure Lernreise motiviert fort. Genau wie unsere Eule Loki noch eine lange Reise vor sich hat; gibt es auch für deine:n Lernpartner:in noch vieles zu lernen. Wir hoffen; dass ihr beim gemeinsamen Lernen genauso viel Spaß haben werdet wie Loki beim Paddeln.,{{progress}} von {{maxValue}} Terminen abgeschlossen,,Wow! Du hast alle Termine abgeschlossen.,Fluss,gamification/achievements/release/x_lectures_held/one_lectures_held.jpg,,student_match_appointments_count > 0,"{""student_match_appointments_count"":{""metric"":""student_conducted_match_appointment"";""aggregator"":""count"";""createBuckets"":""by_lecture_participation"";""bucketAggregator"":""presence_of_events"";""valueToAchieve"":1}}" GlobalMatch,Tiered,student_conduct_match_appointment,2,student,3 durchgeführte Termine,1:1-Nachhilfe,,None,,,Sobald du drei Nachhilfe-Termine erfolgreich durchgeführt hast; geht die Reise mit unserer Eule Loki weiter. Bleib dran und schließe alle Termine ab; um zu sehen wohin euch die Lernreise als Nächstes führt.,Prima! Du hattest nun schon drei Nachhilfe-Termine. Schön; dass ihr eure Lernreise so fleißig startet. Lokis Reise führt heute vorbei an einem schönen; blühenden Kirschbaum. Auch der Baum hat einmal klein angefangen.Genauso wie der Baum gewachsen ist; wächst auch das Wissen deines:r Lernpartner:in mit jedem Termin in der Lernunterstützung. Also macht weiter so!,{{progress}} von {{maxValue}} Terminen abgeschlossen,,Wow! Du hast alle Termine abgeschlossen.,Kirschblüte,gamification/achievements/release/x_lectures_held/three_lectures_held.jpg,,student_match_appointments_count > 2,"{""student_match_appointments_count"":{""metric"":""student_conducted_match_appointment"";""aggregator"":""count"";""createBuckets"":""by_lecture_participation"";""bucketAggregator"":""presence_of_events"";""valueToAchieve"":3}}" GlobalMatch,Tiered,student_conduct_match_appointment,3,student,5 durchgeführte Termine,1:1-Nachhilfe,,None,,,Sobald du fünf Nachhilfe-Termine erfolgreich durchgeführt hast; geht die Reise mit unserer Eule Loki weiter. Bleib dran und schließe alle Termine ab; um zu sehen wohin euch die Lernreise als Nächstes führt.,Klasse! Fünf Nachhilfe-Termine in der Lernunterstützung habt ihr schon gemeinsam geschafft. Damit seid ihr auf eurer Lernreise schon weit gekommen. Loki schützt sich auf der Reise vor der Kälte in einem Iglu; das aus Eis gebaut wurde. Baut auch ihr weiter an dem Wissensschatz deiner:s Lernpartner:in; indem ihr weitere Termine in der Lernunterstützung absolviert. Tolle Arbeit; macht weiter!,{{progress}} von {{maxValue}} Terminen abgeschlossen,,Wow! Du hast alle Termine abgeschlossen.,Iglu,gamification/achievements/release/x_lectures_held/five_lectures_held.jpg,,student_match_appointments_count > 4,"{""student_match_appointments_count"":{""metric"":""student_conducted_match_appointment"";""aggregator"":""count"";""createBuckets"":""by_lecture_participation"";""bucketAggregator"":""presence_of_events"";""valueToAchieve"":5}}" @@ -35,14 +31,11 @@ Global,Streak,student_appointment_reliability,1,student,Pünktlichkeits-Power,Zu Global,Streak,student_regular_learning,1,student,Login-Legende,User-Bereich,Du hast dich {{progress}} Monat(e) in Folge angemeldet!,None,,,Bleib dran und melde dich weiterhin jeden Monat auf unserer Plattform an; um deinen Streak zu verlängern. Regelmäßige Aktivität hilft dir dabei immer auf dem neuesten Stand zu bleiben. Du bist auf dem richtigen Weg – mach weiter so; du Anmelde-Champion!,,Noch {{remainingProgress}} Monat(e) mit Login bis zum neuen Rekord!,,Hurra; du erhöhst deinen Rekord weiter!,Eule,gamification/achievements/release/streaks/member_set.png,gamification/achievements/release/streaks/member_achieved.png,student_regular_learning > recordValue,"{""student_regular_learning"":{""metric"":""student_regular_learning"";""aggregator"":""last_streak_length"";""createBuckets"":""by_months"";""bucketAggregator"":""presence_of_events""}}" Global,Sequential,pupil_onboarding,1,pupil,Onboarding,Willkommen bei Lern-Fair 👋,,Action,E-Mail verifizieren,,Hurra! Am {{date}} haben wir eine E-Mail an deine Adresse {{email}} gesendet. Um deine E-Mail zu bestätigen; klicke einfach auf den Button in der Nachricht. Solltest du unsere E-Mail nicht finden; kannst du hier eine erneute Zustellung anfordern und voller Vorfreude auf unser Weiterkommen warten.,,,E-Mail verifizieren,{{progress}} von {{maxValue}} Schritten abgeschlossen,Flugticket,gamification/achievements/release/finish_onboarding/two_pieces/empty_state.png,,pupil_verified_events > 0,"{""pupil_verified_events"":{""metric"":""pupil_onboarding_verified"";""aggregator"":""count""}}" Global,Sequential,pupil_onboarding,2,pupil,Onboarding,Willkommen bei Lern-Fair 👋,,Action,Termin buchen,https://calendly.com/schueler-screening/willkommen-bei-lern-fair?email={{email}},Wir sind gespannt darauf; dich kennenzulernen! In einem kurzen; 15-minütigen Zoom-Gespräch möchten wir dir gerne unsere vielfältigen kostenlose Angebote vorstellen und dir die beste Unterstützung ermöglichen sowie alle deine Fragen beantworten. Buche einfach einen Termin; um mehr zu erfahren und dann voller Tatendrang direkt durchzustarten. Falls dir etwas dazwischen kommt; sage den Termin bitte ab und buche dir einen neuen.,Herzlichen Glückwunsch! Du hast alle Onboarding-Schritte erfolgreich gemeistert und dir das Abflugticket für Loki gesichert. Wir sind begeistert; dass du nun Teil unserer Lerncommunity bist und hoffen dich gut auf deiner Lernreise begleiten zu können. Loki und unser Team werden immer für dich da sein!,,Kennenlerngespräch absolvieren,{{progress}} von {{maxValue}} Schritten abgeschlossen,,gamification/achievements/release/finish_onboarding/two_pieces/step_1.png,gamification/achievements/release/finish_onboarding/two_pieces/step_2.png,pupil_screened_events > 0,"{""pupil_screened_events"":{""metric"":""pupil_onboarding_screened"";""aggregator"":""count""}}" -Match,Sequential,,1,pupil,Neue Lernunterstützung,Starte eine Lernpatenschaft,,Action,Anfrage stellen,Match-Anfrage-Seite,Damit wir dir den:die perfekte:n Lernpartner:in zuweisen können; musst du zunächst eine Anfrage auf unserer Plattform stellen. Dort kannst du ganz einfach die Fächer angeben; die für dich wichtig sind und in denen wir dir helfen können. Wir freuen uns darauf; mit dir gemeinsam durchzustarten und die Lernreise zu beginnen!,,,Anfrage stellen,,Rucksack,,,, -Match,Sequential,,2,pupil,Neue Lernunterstützung,Starte eine Lernpatenschaft,,Action,Termin buchen,Calendly SuS Zweitgespräch,Fantastisch; deine Anfrage ist eingegangen! Bevor wir dir deine:n ideale:n Lernpartner:in vermitteln können; möchten wir gerne kurz per Zoom mit dir sprechen. Unser Ziel ist es; die perfekte Person für dich zu finden und genau zu verstehen; was du dir wünschst. Buche doch gleich einen Termin für unser Gespräch – wir sind schon ganz gespannt auf dich!,,,Gespräch mit Lern-Fair absolvieren,,Rucksack,,,, -Match,Sequential,,3,pupil,Neue Lernunterstützung,Starte eine Lernpatenschaft,,None,,,"Wir sind mit vollem Engagement dabei; den:die ideale:n Lernpartner:in für dich zu finden.
 -Sobald wir jemanden entdeckt haben; der:die perfekt zu deinen angegebenen Fächern passt; senden wir dir direkt eine E-Mail. Dieser Prozess dauert in der Regel nur ein bis vier Wochen und hängt davon ab; wie viele Lernpartner:innen derzeit für deine Fächer verfügbar sind. Deine Anfrage wurde am {{date}} gestellt – freue dich schon jetzt auf das kommende Lernabenteuer!",,,Lernpartner:in erhalten,,Rucksack,,,, -Match,Sequential,,4,pupil,Neue Lernunterstützung,{{name}},,Action,{{var:student.firstname}} kontaktieren,direkt auf den 1:1-Chat,"Hurra; wir haben eine:n Lernpartner:in für dich gefunden! 🎉 -{{var:student.firstname}} ist super motiviert; dir in {{var:matchSubjects}} unter die Arme zu greifen. Um möglichst schnell mit {{var:student.firstname}} loszulegen; kontaktieren {{var:student.firstname}} über den Chat und schlage einen Termin für ein erstes Gespräch vor. {{var:student.firstname}} kann es kaum erwarten; dich kennenzulernen und gemeinsam mit dir durchzustarten!",,,Lernpartner:in kontaktieren,,Rucksack,,,, -Match,Sequential,,5,pupil,Neue Lernunterstützung,{{name}},,Appointment,Zum Termin,Link auf die Termin-Detailseite,"Wow; die Vorfreude steigt – bald startet eure gemeinsame Reise! 🚀 -Wir wünschen dir viel Spaß bei deinem ersten Termin in der Lernunterstützung mit {{name}} 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!",Herzlichen Glückwunsch zu deinem erfolgreichen ersten Termin in der Lernunterstützung mit {{name}}! 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!,,Erstes Gespräch absolvieren,Wow! Du hast alle Schritte abgeschlossen.,Rucksack,,,, +Match,Sequential,,1,pupil,Neues Lernunterstützung,Starte eine Lernpatenschaft,,Action,Anfrage stellen,/request-match,Damit wir dir den:die perfekte:n Lernpartner:in zuweisen können; musst du zunächst eine Anfrage auf unserer Plattform stellen. Dort kannst du ganz einfach die Fächer angeben; die für dich wichtig sind und in denen wir dir helfen können. Wir freuen uns darauf; mit dir gemeinsam durchzustarten und die Lernreise zu beginnen!,,,Anfrage stellen,,Rucksack,gamification/achievements/release/new_match/five_pieces/empty_state.png,,, +Match,Sequential,,2,pupil,Neue Lernunterstützung,Starte eine Lernpatenschaft,,Action,Termin buchen,Calendly SuS Zweitgespräch,Fantastisch; deine Anfrage ist eingegangen! Bevor wir dir deine:n ideale:n Lernpartner:in vermitteln können; möchten wir gerne kurz per Zoom mit dir sprechen. Unser Ziel ist es; die perfekte Person für dich zu finden und genau zu verstehen; was du dir wünschst. Buche doch gleich einen Termin für unser Gespräch – wir sind schon ganz gespannt auf dich!,,,Gespräch mit Lern-Fair absolvieren,,Rucksack,gamification/achievements/release/new_match/five_pieces/step_1.png,,, +Match,Sequential,pupil_new_match,3,pupil,Neue Lernunterstützung,Starte eine Lernpatenschaft,,Wait,Lernpartner:in erhalten,,Wir sind mit vollem Engagement dabei; den:die ideale:n Lernpartner:in für dich zu finden. Sobald wir jemanden entdeckt haben; der:die perfekt zu deinen angegebenen Fächern passt; senden wir dir direkt eine E-Mail. Dieser Prozess dauert in der Regel nur ein bis vier Wochen und hängt davon ab; wie viele Lernpartner:innen derzeit für deine Fächer verfügbar sind. Deine Anfrage wurde am {{date}} gestellt – freue dich schon jetzt auf das kommende Lernabenteuer!,,,Lernpartner:in erhalten,,Rucksack,gamification/achievements/release/new_match/five_pieces/step_2.png,,pupil_match_create > 0,"{""pupil_match_create"":{""metric"":""pupil_match_create"";""aggregator"":""count""}}" +Match,Sequential,pupil_new_match,4,pupil,Neue Lernunterstützung,{{student.firstname}},,Action,{{student.firstname}} kontaktieren,/chat,Hurra; wir haben eine:n Lernpartner:in für dich gefunden! 🎉 {{student.firstname}} ist super motiviert; dir in {{matchSubjects}} unter die Arme zu greifen. Um möglichst schnell mit {{student.firstname}} loszulegen; kontaktieren {{student.firstname}} über den Chat und schlage einen Termin für ein erstes Gespräch vor. {{student.firstname}} kann es kaum erwarten; dich kennenzulernen und gemeinsam mit dir durchzustarten!,,,Lernpartner:in kontaktieren,,Rucksack,gamification/achievements/release/new_match/five_pieces/step_3.png,,pupil_create_new_match_chat > 0,"{""pupil_create_new_match_chat"":{""metric"":""pupil_create_new_match_chat"";""aggregator"":""count""}}" +Match,Sequential,pupil_new_match,5,pupil,Neue Lernunterstützung,{{student.firstname}},,Appointment,Zum Match,/match/{{match.id}},/match/{{match.id}},Herzlichen Glückwunsch zu deinem erfolgreichen ersten Termin in der Lernunterstützung mit {{name}}! 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!,,Erstes Gespräch absolvieren,Wow! Du hast alle Schritte abgeschlossen.,Rucksack,gamification/achievements/release/new_match/five_pieces/step_4.png,gamification/achievements/release/new_match/five_pieces/step_5.png,pupil_conducted_match_appointment > 0,"{""pupil_conducted_match_appointment"":{""metric"":""pupil_conducted_match_appointment"";""aggregator"":""count""}}" GlobalMatch,Tiered,pupil_conduct_match_appointment,1,pupil,1 durchgeführter Termin,1:1-Nachhilfe,,None,,,Sobald du einen Nachhilfe-Termin erfolgreich durchgeführt hast; geht die Reise mit unserer Eule Loki weiter. Bleib dran und schließe alle Termine ab; um zu sehen wohin euch die Lernreise als Nächstes führt.,Super! Du hattest deinen ersten Termin in der Lernunterstützung. Bleib am Ball und setze deine Lernreise motiviert fort. Genau wie unsere Eule Loki noch eine lange Reise vor sich hat; gibt es auch für dich noch vieles zu lernen. Wir hoffen; dass du beim Lernen genauso viel Spaß haben wirst wie Loki beim Paddeln.,{{progress}} von {{maxValue}} Terminen abgeschlossen,,Wow! Du hast alle Termine abgeschlossen.,Fluss,gamification/achievements/release/x_lectures_held/one_lectures_held.jpg,,pupil_match_appointments_count > 0,"{""pupil_match_appointments_count"":{""metric"":""pupil_conducted_match_appointment"";""aggregator"":""count"";""createBuckets"":""by_lecture_participation"";""bucketAggregator"":""presence_of_events"";""valueToAchieve"":1}}" GlobalMatch,Tiered,pupil_conduct_match_appointment,2,pupil,3 durchgeführte Termine,1:1-Nachhilfe,,None,,,Sobald du drei Nachhilfe-Termine erfolgreich durchgeführt hast; geht die Reise mit unserer Eule Loki weiter. Bleib dran und schließe alle Termine ab; um zu sehen wohin euch die Lernreise als Nächstes führt.,Prima! Du hast nun schon drei Termine in der Lernunterstützung gehabt. Schön; dass du deine Lernreise so fleißig startest. Lokis Reise führt heute vorbei an einem schönen; blühenden Kirschbaum. Auch der Baum hat einmal klein angefangen. Genauso wie der Baum gewachsen ist; wächst auch dein Wissen mit jedem Termin in der Lernunterstützung. Also mach weiter so!,{{progress}} von {{maxValue}} Terminen abgeschlossen,,Wow! Du hast alle Termine abgeschlossen.,Kirschblüte,gamification/achievements/release/x_lectures_held/three_lectures_held.jpg,,pupil_match_appointments_count > 2,"{""pupil_match_appointments_count"":{""metric"":""pupil_conducted_match_appointment"";""aggregator"":""count"";""createBuckets"":""by_lecture_participation"";""bucketAggregator"":""presence_of_events"";""valueToAchieve"":3}}" GlobalMatch,Tiered,pupil_conduct_match_appointment,3,pupil,5 durchgeführte Termine,1:1-Nachhilfe,,None,,,Sobald du fünf Nachhilfe-Termine erfolgreich durchgeführt hast; geht die Reise mit unserer Eule Loki weiter. Bleib dran und schließe alle Termine ab; um zu sehen wohin euch die Lernreise als Nächstes führt.,Klasse! Fünf Termine in der Lernunterstützung hast du schon geschafft. Damit bist du auf deiner Lernreise schon weit gekommen. Loki schützt sich auf der Reise vor der Kälte in einem Iglu; das aus Eis gebaut wurde. Baue auch du weiter an deinem Wissensschatz; indem du weitere Termine in der Lernunterstützung machst. Tolle Arbeit; mach weiter!,{{progress}} von {{maxValue}} Terminen abgeschlossen,,Wow! Du hast alle Termine abgeschlossen.,Iglu,gamification/achievements/release/x_lectures_held/five_lectures_held.jpg,,pupil_match_appointments_count > 4,"{""pupil_match_appointments_count"":{""metric"":""pupil_conducted_match_appointment"";""aggregator"":""count"";""createBuckets"":""by_lecture_participation"";""bucketAggregator"":""presence_of_events"";""valueToAchieve"":5}}" diff --git a/scripts/parse-achievements/gql-enable.txt b/scripts/parse-achievements/gql-enable.txt index 3061a5a22..6379daa48 100644 --- a/scripts/parse-achievements/gql-enable.txt +++ b/scripts/parse-achievements/gql-enable.txt @@ -10,138 +10,159 @@ student_onboarding_2:achievementTemplateActivate(achievementTemplateId:2) student_onboarding_3:achievementTemplateActivate(achievementTemplateId:3) -student_conduct_match_appointment_1:achievementTemplateActivate(achievementTemplateId:4) +student_new_match_2:achievementTemplateActivate(achievementTemplateId:4) -student_conduct_match_appointment_2:achievementTemplateActivate(achievementTemplateId:5) +student_new_match_3:achievementTemplateActivate(achievementTemplateId:5) -student_conduct_match_appointment_3:achievementTemplateActivate(achievementTemplateId:6) +student_new_match_4:achievementTemplateActivate(achievementTemplateId:6) -student_conduct_match_appointment_4:achievementTemplateActivate(achievementTemplateId:7) +student_new_match_5:achievementTemplateActivate(achievementTemplateId:7) -student_conduct_match_appointment_5:achievementTemplateActivate(achievementTemplateId:8) +student_conduct_match_appointment_1:achievementTemplateActivate(achievementTemplateId:8) -student_conduct_match_appointment_6:achievementTemplateActivate(achievementTemplateId:9) +student_conduct_match_appointment_2:achievementTemplateActivate(achievementTemplateId:9) -student_conduct_match_appointment_7:achievementTemplateActivate(achievementTemplateId:10) +student_conduct_match_appointment_3:achievementTemplateActivate(achievementTemplateId:10) -student_conduct_course_appointment_1:achievementTemplateActivate(achievementTemplateId:11) +student_conduct_match_appointment_4:achievementTemplateActivate(achievementTemplateId:11) -student_conduct_course_appointment_2:achievementTemplateActivate(achievementTemplateId:12) +student_conduct_match_appointment_5:achievementTemplateActivate(achievementTemplateId:12) -student_conduct_course_appointment_3:achievementTemplateActivate(achievementTemplateId:13) +student_conduct_match_appointment_6:achievementTemplateActivate(achievementTemplateId:13) -student_conduct_course_appointment_4:achievementTemplateActivate(achievementTemplateId:14) +student_conduct_match_appointment_7:achievementTemplateActivate(achievementTemplateId:14) -student_conduct_course_appointment_5:achievementTemplateActivate(achievementTemplateId:15) +student_conduct_course_appointment_1:achievementTemplateActivate(achievementTemplateId:15) -student_conduct_course_appointment_6:achievementTemplateActivate(achievementTemplateId:16) +student_conduct_course_appointment_2:achievementTemplateActivate(achievementTemplateId:16) -student_conduct_course_appointment_7:achievementTemplateActivate(achievementTemplateId:17) +student_conduct_course_appointment_3:achievementTemplateActivate(achievementTemplateId:17) -student_offer_course_1:achievementTemplateActivate(achievementTemplateId:18) +student_conduct_course_appointment_4:achievementTemplateActivate(achievementTemplateId:18) -student_offer_course_2:achievementTemplateActivate(achievementTemplateId:19) +student_conduct_course_appointment_5:achievementTemplateActivate(achievementTemplateId:19) -student_offer_course_3:achievementTemplateActivate(achievementTemplateId:20) +student_conduct_course_appointment_6:achievementTemplateActivate(achievementTemplateId:20) -student_course_participation_1:achievementTemplateActivate(achievementTemplateId:21) +student_conduct_course_appointment_7:achievementTemplateActivate(achievementTemplateId:21) -student_course_participation_2:achievementTemplateActivate(achievementTemplateId:22) +student_offer_course_1:achievementTemplateActivate(achievementTemplateId:22) -student_match_regular_learning_1:achievementTemplateActivate(achievementTemplateId:23) +student_offer_course_2:achievementTemplateActivate(achievementTemplateId:23) -student_appointment_reliability_1:achievementTemplateActivate(achievementTemplateId:24) +student_offer_course_3:achievementTemplateActivate(achievementTemplateId:24) -student_regular_learning_1:achievementTemplateActivate(achievementTemplateId:25) +student_course_participation_1:achievementTemplateActivate(achievementTemplateId:25) -pupil_onboarding_1:achievementTemplateActivate(achievementTemplateId:26) +student_course_participation_2:achievementTemplateActivate(achievementTemplateId:26) -pupil_onboarding_2:achievementTemplateActivate(achievementTemplateId:27) +student_match_regular_learning_1:achievementTemplateActivate(achievementTemplateId:27) -pupil_conduct_match_appointment_1:achievementTemplateActivate(achievementTemplateId:28) +student_appointment_reliability_1:achievementTemplateActivate(achievementTemplateId:28) -pupil_conduct_match_appointment_2:achievementTemplateActivate(achievementTemplateId:29) +student_regular_learning_1:achievementTemplateActivate(achievementTemplateId:29) -pupil_conduct_match_appointment_3:achievementTemplateActivate(achievementTemplateId:30) +pupil_onboarding_1:achievementTemplateActivate(achievementTemplateId:30) -pupil_conduct_match_appointment_4:achievementTemplateActivate(achievementTemplateId:31) +pupil_onboarding_2:achievementTemplateActivate(achievementTemplateId:31) -pupil_conduct_match_appointment_5:achievementTemplateActivate(achievementTemplateId:32) +pupil_new_match_3:achievementTemplateActivate(achievementTemplateId:32) -pupil_conduct_match_appointment_6:achievementTemplateActivate(achievementTemplateId:33) +pupil_new_match_4:achievementTemplateActivate(achievementTemplateId:33) -pupil_conduct_match_appointment_7:achievementTemplateActivate(achievementTemplateId:34) +pupil_new_match_5:achievementTemplateActivate(achievementTemplateId:34) -pupil_conduct_course_appointment_1:achievementTemplateActivate(achievementTemplateId:35) +pupil_conduct_match_appointment_1:achievementTemplateActivate(achievementTemplateId:35) -pupil_conduct_course_appointment_2:achievementTemplateActivate(achievementTemplateId:36) +pupil_conduct_match_appointment_2:achievementTemplateActivate(achievementTemplateId:36) -pupil_conduct_course_appointment_3:achievementTemplateActivate(achievementTemplateId:37) +pupil_conduct_match_appointment_3:achievementTemplateActivate(achievementTemplateId:37) -pupil_conduct_course_appointment_4:achievementTemplateActivate(achievementTemplateId:38) +pupil_conduct_match_appointment_4:achievementTemplateActivate(achievementTemplateId:38) -pupil_conduct_course_appointment_5:achievementTemplateActivate(achievementTemplateId:39) +pupil_conduct_match_appointment_5:achievementTemplateActivate(achievementTemplateId:39) -pupil_conduct_course_appointment_6:achievementTemplateActivate(achievementTemplateId:40) +pupil_conduct_match_appointment_6:achievementTemplateActivate(achievementTemplateId:40) -pupil_conduct_course_appointment_7:achievementTemplateActivate(achievementTemplateId:41) +pupil_conduct_match_appointment_7:achievementTemplateActivate(achievementTemplateId:41) -pupil_course_participation_1:achievementTemplateActivate(achievementTemplateId:42) +pupil_conduct_course_appointment_1:achievementTemplateActivate(achievementTemplateId:42) -pupil_course_participation_2:achievementTemplateActivate(achievementTemplateId:43) +pupil_conduct_course_appointment_2:achievementTemplateActivate(achievementTemplateId:43) -pupil_match_regular_learning_1:achievementTemplateActivate(achievementTemplateId:44) +pupil_conduct_course_appointment_3:achievementTemplateActivate(achievementTemplateId:44) -pupil_appointment_reliability_1:achievementTemplateActivate(achievementTemplateId:45) +pupil_conduct_course_appointment_4:achievementTemplateActivate(achievementTemplateId:45) -pupil_regular_learning_1:achievementTemplateActivate(achievementTemplateId:46) +pupil_conduct_course_appointment_5:achievementTemplateActivate(achievementTemplateId:46) -user_original_corona_school_1:achievementTemplateActivate(achievementTemplateId:47) +pupil_conduct_course_appointment_6:achievementTemplateActivate(achievementTemplateId:47) -user_original_lern_fair_1:achievementTemplateActivate(achievementTemplateId:48) +pupil_conduct_course_appointment_7:achievementTemplateActivate(achievementTemplateId:48) + + +pupil_course_participation_1:achievementTemplateActivate(achievementTemplateId:49) + + +pupil_course_participation_2:achievementTemplateActivate(achievementTemplateId:50) + + +pupil_match_regular_learning_1:achievementTemplateActivate(achievementTemplateId:51) + + +pupil_appointment_reliability_1:achievementTemplateActivate(achievementTemplateId:52) + + +pupil_regular_learning_1:achievementTemplateActivate(achievementTemplateId:53) + + +user_original_corona_school_1:achievementTemplateActivate(achievementTemplateId:54) + + +user_original_lern_fair_1:achievementTemplateActivate(achievementTemplateId:55) } diff --git a/scripts/parse-achievements/gql-seed.txt b/scripts/parse-achievements/gql-seed.txt index 3f0a84f57..192d31775 100644 --- a/scripts/parse-achievements/gql-seed.txt +++ b/scripts/parse-achievements/gql-seed.txt @@ -70,6 +70,98 @@ student_onboarding_3: achievementTemplateCreate(data:{ }) +student_new_match_2: achievementTemplateCreate(data:{ + templateFor: "Match", + group: "student_new_match", + groupOrder: 2, + sequentialStepName: "Schüler:in erhalten", + type: "SEQUENTIAL", + title: "Neue Lernunterstützung", + tagline: "Starte eine Lernpatenschaft", + subtitle: null, + footer: null, + achievedFooter: null, + description: "Wir sind mit vollem Engagement dabei, den:die ideale:n Lernpartner:in für dich zu finden. 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!", + achievedDescription: null, + image: "gamification/achievements/release/new_match/five_pieces/step_1.png", + achievedImage: null, + actionName: "Lernpartner:in erhalten", + actionRedirectLink: null, + actionType: "Wait", + condition: "student_match_create > 0", + conditionDataAggregations: "{\"student_match_create\":{\"metric\":\"student_match_create\",\"aggregator\":\"count\"}}", +}) + + +student_new_match_3: achievementTemplateCreate(data:{ + templateFor: "Match", + group: "student_new_match", + groupOrder: 3, + sequentialStepName: "Schüler:in kontaktieren", + type: "SEQUENTIAL", + title: "Neue Lernunterstützung", + tagline: "{{pupil.firstname}}", + subtitle: null, + footer: null, + achievedFooter: null, + description: "Hurra, wir haben eine:n Lernpartner:in für dich gefunden! 🎉 {{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!", + achievedDescription: null, + image: "gamification/achievements/release/new_match/five_pieces/step_2.png", + achievedImage: null, + actionName: "{{pupil.firstname}} kontaktieren", + actionRedirectLink: "/chat", + actionType: "Action", + condition: "student_create_new_match_chat > 0", + conditionDataAggregations: "{\"student_create_new_match_chat\":{\"metric\":\"student_create_new_match_chat\",\"aggregator\":\"count\"}}", +}) + + +student_new_match_4: achievementTemplateCreate(data:{ + templateFor: "Match", + group: "student_new_match", + groupOrder: 4, + sequentialStepName: "Termin erstellen", + type: "SEQUENTIAL", + title: "Neue Lernunterstützung", + tagline: "{{pupil.firstname}}", + subtitle: null, + footer: null, + achievedFooter: null, + 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! 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.", + achievedDescription: null, + image: "gamification/achievements/release/new_match/five_pieces/step_3.png", + achievedImage: null, + actionName: "Termin erstellen", + actionRedirectLink: "/match/{{match.id}}", + actionType: "Action", + condition: "student_add_match_appointment > 0", + conditionDataAggregations: "{\"student_add_match_appointment\":{\"metric\":\"student_add_match_appointment\",\"aggregator\":\"count\"}}", +}) + + +student_new_match_5: achievementTemplateCreate(data:{ + templateFor: "Match", + group: "student_new_match", + groupOrder: 5, + sequentialStepName: "Erstes Gespräch absolvieren", + type: "SEQUENTIAL", + title: "Neue Lernunterstützung", + tagline: "{{pupil.firstname}}", + subtitle: null, + footer: null, + achievedFooter: "Wow! Du hast alle Schritte abgeschlossen.", + description: "Wow, die Vorfreude steigt – bald startet eure gemeinsame Reise! 🚀 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!", + 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!", + image: "gamification/achievements/release/new_match/five_pieces/step_4.png", + achievedImage: "gamification/achievements/release/new_match/five_pieces/step_5.png", + actionName: "Zum Termin", + actionRedirectLink: "/appointment/{{lecture.id}}", + actionType: "Appointment", + condition: "student_conducted_match_appointment > 0", + conditionDataAggregations: "{\"student_conducted_match_appointment\":{\"metric\":\"student_conducted_match_appointment\",\"aggregator\":\"count\"}}", +}) + + student_conduct_match_appointment_1: achievementTemplateCreate(data:{ templateFor: "Global_Matches", group: "student_conduct_match_appointment", @@ -622,6 +714,75 @@ pupil_onboarding_2: achievementTemplateCreate(data:{ }) +pupil_new_match_3: achievementTemplateCreate(data:{ + templateFor: "Match", + group: "pupil_new_match", + groupOrder: 3, + sequentialStepName: "Lernpartner:in erhalten", + type: "SEQUENTIAL", + title: "Neue Lernunterstützung", + tagline: "Starte eine Lernpatenschaft", + subtitle: null, + footer: null, + achievedFooter: null, + description: "Wir sind mit vollem Engagement dabei, den:die ideale:n Lernpartner:in für dich zu finden. Sobald wir jemanden entdeckt haben, der:die perfekt zu deinen angegebenen Fächern passt, senden wir dir direkt eine E-Mail. Dieser Prozess dauert in der Regel nur ein bis vier Wochen und hängt davon ab, wie viele Lernpartner:innen derzeit für deine Fächer verfügbar sind. Deine Anfrage wurde am {{date}} gestellt – freue dich schon jetzt auf das kommende Lernabenteuer!", + achievedDescription: null, + image: "gamification/achievements/release/new_match/five_pieces/step_2.png", + achievedImage: null, + actionName: "Lernpartner:in erhalten", + actionRedirectLink: null, + actionType: "Wait", + condition: "pupil_match_create > 0", + conditionDataAggregations: "{\"pupil_match_create\":{\"metric\":\"pupil_match_create\",\"aggregator\":\"count\"}}", +}) + + +pupil_new_match_4: achievementTemplateCreate(data:{ + templateFor: "Match", + group: "pupil_new_match", + groupOrder: 4, + sequentialStepName: "Lernpartner:in kontaktieren", + type: "SEQUENTIAL", + title: "Neue Lernunterstützung", + tagline: "{{student.firstname}}", + subtitle: null, + footer: null, + achievedFooter: null, + description: "Hurra, wir haben eine:n Lernpartner:in für dich gefunden! 🎉 {{student.firstname}} ist super motiviert, dir in {{matchSubjects}} unter die Arme zu greifen. Um möglichst schnell mit {{student.firstname}} loszulegen, kontaktieren {{student.firstname}} über den Chat und schlage einen Termin für ein erstes Gespräch vor. {{student.firstname}} kann es kaum erwarten, dich kennenzulernen und gemeinsam mit dir durchzustarten!", + achievedDescription: null, + image: "gamification/achievements/release/new_match/five_pieces/step_3.png", + achievedImage: null, + actionName: "{{student.firstname}} kontaktieren", + actionRedirectLink: "/chat", + actionType: "Action", + condition: "pupil_create_new_match_chat > 0", + conditionDataAggregations: "{\"pupil_create_new_match_chat\":{\"metric\":\"pupil_create_new_match_chat\",\"aggregator\":\"count\"}}", +}) + + +pupil_new_match_5: achievementTemplateCreate(data:{ + templateFor: "Match", + group: "pupil_new_match", + groupOrder: 5, + sequentialStepName: "Erstes Gespräch absolvieren", + type: "SEQUENTIAL", + title: "Neue Lernunterstützung", + tagline: "{{student.firstname}}", + subtitle: null, + footer: null, + achievedFooter: "Wow! Du hast alle Schritte abgeschlossen.", + description: "/match/{{match.id}}", + achievedDescription: "Herzlichen Glückwunsch zu deinem erfolgreichen ersten Termin in der Lernunterstützung mit {{name}}! 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!", + image: "gamification/achievements/release/new_match/five_pieces/step_4.png", + achievedImage: "gamification/achievements/release/new_match/five_pieces/step_5.png", + actionName: "Zum Match", + actionRedirectLink: "/match/{{match.id}}", + actionType: "Appointment", + condition: "pupil_conducted_match_appointment > 0", + conditionDataAggregations: "{\"pupil_conducted_match_appointment\":{\"metric\":\"pupil_conducted_match_appointment\",\"aggregator\":\"count\"}}", +}) + + pupil_conduct_match_appointment_1: achievementTemplateCreate(data:{ templateFor: "Global_Matches", group: "pupil_conduct_match_appointment", diff --git a/seed-achievements.ts b/seed-achievements.ts index 30ba3ba62..9789ee32a 100644 --- a/seed-achievements.ts +++ b/seed-achievements.ts @@ -81,6 +81,113 @@ export async function importAchievements() { }, }); + await prisma.achievement_template.create({ + data: { + templateFor: achievement_template_for_enum.Match, + group: 'student_new_match', + groupOrder: 2, + sequentialStepName: 'Schüler:in erhalten', + type: achievement_type_enum.SEQUENTIAL, + title: 'Neue Lernunterstützung', + tagline: 'Starte eine Lernpatenschaft', + subtitle: null, + footer: null, + achievedFooter: null, + description: + 'Wir sind mit vollem Engagement dabei, den:die ideale:n Lernpartner:in für dich zu finden. 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!', + achievedDescription: null, + image: 'gamification/achievements/release/new_match/five_pieces/step_1.png', + achievedImage: null, + actionName: 'Lernpartner:in erhalten', + actionRedirectLink: null, + actionType: achievement_action_type_enum.Wait, + condition: 'student_match_create > 0', + conditionDataAggregations: JSON.parse('{"student_match_create":{"metric":"student_match_create","aggregator":"count"}}'), + isActive: true, + }, + }); + + await prisma.achievement_template.create({ + data: { + templateFor: achievement_template_for_enum.Match, + group: 'student_new_match', + groupOrder: 3, + sequentialStepName: 'Schüler:in kontaktieren', + type: achievement_type_enum.SEQUENTIAL, + title: 'Neue Lernunterstützung', + tagline: '{{pupil.firstname}}', + subtitle: null, + footer: null, + achievedFooter: null, + description: + 'Hurra, wir haben eine:n Lernpartner:in für dich gefunden! 🎉 {{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!', + achievedDescription: null, + image: 'gamification/achievements/release/new_match/five_pieces/step_2.png', + achievedImage: null, + actionName: '{{pupil.firstname}} kontaktieren', + actionRedirectLink: '/chat', + actionType: achievement_action_type_enum.Action, + condition: 'student_create_new_match_chat > 0', + conditionDataAggregations: JSON.parse('{"student_create_new_match_chat":{"metric":"student_create_new_match_chat","aggregator":"count"}}'), + isActive: true, + }, + }); + + await prisma.achievement_template.create({ + data: { + templateFor: achievement_template_for_enum.Match, + group: 'student_new_match', + groupOrder: 4, + sequentialStepName: 'Termin erstellen', + type: achievement_type_enum.SEQUENTIAL, + title: 'Neue Lernunterstützung', + tagline: '{{pupil.firstname}}', + subtitle: null, + footer: null, + achievedFooter: null, + 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! 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.', + achievedDescription: null, + image: 'gamification/achievements/release/new_match/five_pieces/step_3.png', + achievedImage: null, + actionName: 'Termin erstellen', + actionRedirectLink: '/match/{{match.id}}', + actionType: achievement_action_type_enum.Action, + condition: 'student_add_match_appointment > 0', + conditionDataAggregations: JSON.parse('{"student_add_match_appointment":{"metric":"student_add_match_appointment","aggregator":"count"}}'), + isActive: true, + }, + }); + + await prisma.achievement_template.create({ + data: { + templateFor: achievement_template_for_enum.Match, + group: 'student_new_match', + groupOrder: 5, + sequentialStepName: 'Erstes Gespräch absolvieren', + type: achievement_type_enum.SEQUENTIAL, + title: 'Neue Lernunterstützung', + tagline: '{{pupil.firstname}}', + subtitle: null, + footer: null, + achievedFooter: 'Wow! Du hast alle Schritte abgeschlossen.', + description: + 'Wow, die Vorfreude steigt – bald startet eure gemeinsame Reise! 🚀 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!', + 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!', + image: 'gamification/achievements/release/new_match/five_pieces/step_4.png', + achievedImage: 'gamification/achievements/release/new_match/five_pieces/step_5.png', + actionName: 'Zum Termin', + actionRedirectLink: '/appointment/{{lecture.id}}', + actionType: achievement_action_type_enum.Appointment, + condition: 'student_conducted_match_appointment > 0', + conditionDataAggregations: JSON.parse( + '{"student_conducted_match_appointment":{"metric":"student_conducted_match_appointment","aggregator":"count"}}' + ), + isActive: true, + }, + }); + await prisma.achievement_template.create({ data: { templateFor: achievement_template_for_enum.Global_Matches, @@ -757,6 +864,84 @@ export async function importAchievements() { }, }); + await prisma.achievement_template.create({ + data: { + templateFor: achievement_template_for_enum.Match, + group: 'pupil_new_match', + groupOrder: 3, + sequentialStepName: 'Lernpartner:in erhalten', + type: achievement_type_enum.SEQUENTIAL, + title: 'Neue Lernunterstützung', + tagline: 'Starte eine Lernpatenschaft', + subtitle: null, + footer: null, + achievedFooter: null, + description: + 'Wir sind mit vollem Engagement dabei, den:die ideale:n Lernpartner:in für dich zu finden. Sobald wir jemanden entdeckt haben, der:die perfekt zu deinen angegebenen Fächern passt, senden wir dir direkt eine E-Mail. Dieser Prozess dauert in der Regel nur ein bis vier Wochen und hängt davon ab, wie viele Lernpartner:innen derzeit für deine Fächer verfügbar sind. Deine Anfrage wurde am {{date}} gestellt – freue dich schon jetzt auf das kommende Lernabenteuer!', + achievedDescription: null, + image: 'gamification/achievements/release/new_match/five_pieces/step_2.png', + achievedImage: null, + actionName: 'Lernpartner:in erhalten', + actionRedirectLink: null, + actionType: achievement_action_type_enum.Wait, + condition: 'pupil_match_create > 0', + conditionDataAggregations: JSON.parse('{"pupil_match_create":{"metric":"pupil_match_create","aggregator":"count"}}'), + isActive: true, + }, + }); + + await prisma.achievement_template.create({ + data: { + templateFor: achievement_template_for_enum.Match, + group: 'pupil_new_match', + groupOrder: 4, + sequentialStepName: 'Lernpartner:in kontaktieren', + type: achievement_type_enum.SEQUENTIAL, + title: 'Neue Lernunterstützung', + tagline: '{{student.firstname}}', + subtitle: null, + footer: null, + achievedFooter: null, + description: + 'Hurra, wir haben eine:n Lernpartner:in für dich gefunden! 🎉 {{student.firstname}} ist super motiviert, dir in {{matchSubjects}} unter die Arme zu greifen. Um möglichst schnell mit {{student.firstname}} loszulegen, kontaktieren {{student.firstname}} über den Chat und schlage einen Termin für ein erstes Gespräch vor. {{student.firstname}} kann es kaum erwarten, dich kennenzulernen und gemeinsam mit dir durchzustarten!', + achievedDescription: null, + image: 'gamification/achievements/release/new_match/five_pieces/step_3.png', + achievedImage: null, + actionName: '{{student.firstname}} kontaktieren', + actionRedirectLink: '/chat', + actionType: achievement_action_type_enum.Action, + condition: 'pupil_create_new_match_chat > 0', + conditionDataAggregations: JSON.parse('{"pupil_create_new_match_chat":{"metric":"pupil_create_new_match_chat","aggregator":"count"}}'), + isActive: true, + }, + }); + + await prisma.achievement_template.create({ + data: { + templateFor: achievement_template_for_enum.Match, + group: 'pupil_new_match', + groupOrder: 5, + sequentialStepName: 'Erstes Gespräch absolvieren', + type: achievement_type_enum.SEQUENTIAL, + title: 'Neue Lernunterstützung', + tagline: '{{student.firstname}}', + subtitle: null, + footer: null, + achievedFooter: 'Wow! Du hast alle Schritte abgeschlossen.', + description: '/match/{{match.id}}', + achievedDescription: + 'Herzlichen Glückwunsch zu deinem erfolgreichen ersten Termin in der Lernunterstützung mit {{name}}! 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!', + image: 'gamification/achievements/release/new_match/five_pieces/step_4.png', + achievedImage: 'gamification/achievements/release/new_match/five_pieces/step_5.png', + actionName: 'Zum Match', + actionRedirectLink: '/match/{{match.id}}', + actionType: achievement_action_type_enum.Appointment, + condition: 'pupil_conducted_match_appointment > 0', + conditionDataAggregations: JSON.parse('{"pupil_conducted_match_appointment":{"metric":"pupil_conducted_match_appointment","aggregator":"count"}}'), + isActive: true, + }, + }); + await prisma.achievement_template.create({ data: { templateFor: achievement_template_for_enum.Global_Matches, diff --git a/seed-db.ts b/seed-db.ts index cbbe94665..4f49076d8 100644 --- a/seed-db.ts +++ b/seed-db.ts @@ -19,9 +19,6 @@ import { createPupilMatchRequest, createStudentMatchRequest } from './common/mat import { createCourseTag } from './common/courses/tags'; import { _setSilenceNotificationSystem } from './common/notification'; import { - achievement_action_type_enum, - achievement_template_for_enum, - achievement_type_enum, course_category_enum as CourseCategory, course_coursestate_enum as CourseState, course_subject_enum as CourseSubject, @@ -884,157 +881,6 @@ void (async function setupDevDB() { await importAchievements(); - await prisma.achievement_template.create({ - data: { - templateFor: achievement_template_for_enum.Match, - group: 'pupil_new_match', - groupOrder: 3, - sequentialStepName: 'Lernpartner:in erhalten', - type: achievement_type_enum.SEQUENTIAL, - title: 'Neue Lernunterstützung', - tagline: 'Starte eine Lernpatenschaft', - subtitle: null, - footer: null, - achievedFooter: null, - description: '', - achievedDescription: null, - image: 'gamification/achievements/release/finish_onboarding/three_pieces/empty_state.png', - achievedImage: null, - actionName: 'Warten', - actionRedirectLink: null, - actionType: achievement_action_type_enum.Wait, - condition: 'pupil_match_create > 0', - conditionDataAggregations: JSON.parse('{"pupil_match_create":{"metric":"pupil_match_create","aggregator":"count"}}'), - isActive: true, - }, - }); - await prisma.achievement_template.create({ - data: { - templateFor: achievement_template_for_enum.Match, - group: 'pupil_new_match', - groupOrder: 4, - sequentialStepName: 'Lernpartner:in kontaktieren', - type: achievement_type_enum.SEQUENTIAL, - title: 'Neue Lernunterstützung', - tagline: '{{name}}', - subtitle: null, - footer: null, - achievedFooter: null, - description: - 'Hurra, wir haben eine:n Lernpartner:in für dich gefunden! 🎉{{var:student.firstname}} ist super motiviert, dir in {{var:matchSubjects}} unter die Arme zu greifen. Um möglichst schnell mit {{var:student.firstname}} loszulegen, kontaktieren {{var:student.firstname}} über den Chat und schlage einen Termin für ein erstes Gespräch vor. {{var:student.firstname}} kann es kaum erwarten, dich kennenzulernen und gemeinsam mit dir durchzustarten!', - achievedDescription: null, - image: 'gamification/achievements/release/finish_onboarding/three_pieces/empty_state.png', - achievedImage: null, - actionName: '{{var:student.firstname}} kontaktieren', - actionRedirectLink: '/chat', - actionType: achievement_action_type_enum.Action, - condition: 'pupil_verified_events > 0', - conditionDataAggregations: JSON.parse('{"pupil_verified_events":{"metric":"pupil_onboarding_verified","aggregator":"count"}}'), - isActive: true, - }, - }); - await prisma.achievement_template.create({ - data: { - templateFor: achievement_template_for_enum.Match, - group: 'pupil_new_match', - groupOrder: 5, - sequentialStepName: 'Erstes Gespräch absolvieren', - type: achievement_type_enum.SEQUENTIAL, - title: 'Neue Lernunterstützung', - tagline: '{{name}}', - subtitle: null, - footer: null, - achievedFooter: 'Wow! Du hast alle Schritte abgeschlossen.', - description: - 'Wow, die Vorfreude steigt – bald startet eure gemeinsame Reise! 🚀 Wir wünschen dir viel Spaß bei deinem ersten Termin in der Lernunterstützung mit {{name}} 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!', - achievedDescription: - 'Herzlichen Glückwunsch zu deinem erfolgreichen ersten Termin in der Lernunterstützung mit {{name}}! 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!', - image: 'gamification/achievements/release/finish_onboarding/three_pieces/empty_state.png', - achievedImage: null, - actionName: 'Zum Termin', - actionRedirectLink: 'isso', - actionType: achievement_action_type_enum.Appointment, - condition: 'pupil_verified_events > 0', - conditionDataAggregations: JSON.parse('{"pupil_verified_events":{"metric":"pupil_onboarding_verified","aggregator":"count"}}'), - isActive: true, - }, - }); - await prisma.achievement_template.create({ - data: { - templateFor: achievement_template_for_enum.Match, - group: 'student_new_match', - groupOrder: 3, - sequentialStepName: 'Lernpartner:in erhalten', - type: achievement_type_enum.SEQUENTIAL, - title: 'Neue Lernunterstützung', - tagline: 'Starte eine Lernpatenschaft', - subtitle: null, - footer: null, - achievedFooter: null, - description: '', - achievedDescription: null, - image: 'gamification/achievements/release/finish_onboarding/three_pieces/empty_state.png', - achievedImage: null, - actionName: 'Warten', - actionRedirectLink: null, - actionType: achievement_action_type_enum.Wait, - condition: 'student_match_create > 0', - conditionDataAggregations: JSON.parse('{"student_match_create":{"metric":"student_match_create","aggregator":"count"}}'), - isActive: true, - }, - }); - await prisma.achievement_template.create({ - data: { - templateFor: achievement_template_for_enum.Match, - group: 'student_new_match', - groupOrder: 4, - sequentialStepName: 'Lernpartner:in kontaktieren', - type: achievement_type_enum.SEQUENTIAL, - title: 'Neue Lernunterstützung', - tagline: '{{name}}', - subtitle: null, - footer: null, - achievedFooter: null, - description: - 'Hurra, wir haben eine:n Lernpartner:in für dich gefunden! 🎉{{var:student.firstname}} ist super motiviert, dir in {{var:matchSubjects}} unter die Arme zu greifen. Um möglichst schnell mit {{var:student.firstname}} loszulegen, kontaktieren {{var:student.firstname}} über den Chat und schlage einen Termin für ein erstes Gespräch vor. {{var:student.firstname}} kann es kaum erwarten, dich kennenzulernen und gemeinsam mit dir durchzustarten!', - achievedDescription: null, - image: 'gamification/achievements/release/finish_onboarding/three_pieces/empty_state.png', - achievedImage: null, - actionName: '{{var:pupil.firstname}} kontaktieren', - actionRedirectLink: '/chat', - actionType: achievement_action_type_enum.Action, - condition: 'student_verified_events > 0', - conditionDataAggregations: JSON.parse('{"student_verified_events":{"metric":"student_onboarding_verified","aggregator":"count"}}'), - isActive: true, - }, - }); - await prisma.achievement_template.create({ - data: { - templateFor: achievement_template_for_enum.Match, - group: 'student_new_match', - groupOrder: 5, - sequentialStepName: 'Erstes Gespräch absolvieren', - type: achievement_type_enum.SEQUENTIAL, - title: 'Neue Lernunterstützung', - tagline: '{{name}}', - subtitle: null, - footer: null, - achievedFooter: 'Wow! Du hast alle Schritte abgeschlossen.', - description: - 'Wow, die Vorfreude steigt – bald startet eure gemeinsame Reise! 🚀 Wir wünschen dir viel Spaß bei deinem ersten Termin in der Lernunterstützung mit {{name}} 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!', - achievedDescription: - 'Herzlichen Glückwunsch zu deinem erfolgreichen ersten Termin in der Lernunterstützung mit {{name}}! 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!', - image: 'gamification/achievements/release/finish_onboarding/three_pieces/empty_state.png', - achievedImage: null, - actionName: 'Zum Termin', - actionRedirectLink: 'isso', - actionType: achievement_action_type_enum.Appointment, - condition: 'student_verified_events > 0', - conditionDataAggregations: JSON.parse('{"student_verified_events":{"metric":"student_onboarding_verified","aggregator":"count"}}'), - isActive: true, - }, - }); - // Add Instructors and Participants after adding Lectures, so that they are also added to the lectures: await addSubcourseInstructor(null, subcourse1, student1); await addSubcourseInstructor(null, subcourse1, student2);