diff --git a/.gitattributes b/.gitattributes index 8af972cd..a3a9390b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,5 @@ /gradlew text eol=lf +*.kt text eol=lf +*.kts text eol=lf *.bat text eol=crlf *.jar binary diff --git a/src/main/kotlin/edu/ntnu/idi/idatt/backend/bootstrap/DevDataBootstrap.kt b/src/main/kotlin/edu/ntnu/idi/idatt/backend/bootstrap/DevDataBootstrap.kt index daf9fb0a..3a9a3717 100644 --- a/src/main/kotlin/edu/ntnu/idi/idatt/backend/bootstrap/DevDataBootstrap.kt +++ b/src/main/kotlin/edu/ntnu/idi/idatt/backend/bootstrap/DevDataBootstrap.kt @@ -106,6 +106,81 @@ class DevDataBootstrap( role = UserRole.PUPIL, ) + val pupilSara = + seedUser( + username = "sara", + password = "Pupil123!", + role = UserRole.PUPIL, + ) + val pupilLiam = + seedUser( + username = "liam", + password = "Pupil123!", + role = UserRole.PUPIL, + ) + val pupilEmma = + seedUser( + username = "emma", + password = "Pupil123!", + role = UserRole.PUPIL, + ) + val pupilOliver = + seedUser( + username = "oliver", + password = "Pupil123!", + role = UserRole.PUPIL, + ) + val pupilMaja = + seedUser( + username = "maja", + password = "Pupil123!", + role = UserRole.PUPIL, + ) + val pupilJakob = + seedUser( + username = "jakob", + password = "Pupil123!", + role = UserRole.PUPIL, + ) + + val pupilChristina = + seedUser(username = "christina", password = "Pupil123!", role = UserRole.PUPIL) + val pupilSebastian = + seedUser(username = "sebastian", password = "Pupil123!", role = UserRole.PUPIL) + val pupilPedro = + seedUser(username = "pedro", password = "Pupil123!", role = UserRole.PUPIL) + val pupilCaroline = + seedUser(username = "caroline", password = "Pupil123!", role = UserRole.PUPIL) + val pupilMarkus = + seedUser(username = "markus", password = "Pupil123!", role = UserRole.PUPIL) + val pupilNora = + seedUser(username = "nora", password = "Pupil123!", role = UserRole.PUPIL) + val pupilTobias = + seedUser(username = "tobias", password = "Pupil123!", role = UserRole.PUPIL) + val pupilSigrid = + seedUser(username = "sigrid", password = "Pupil123!", role = UserRole.PUPIL) + val pupilHenrik = + seedUser(username = "henrik", password = "Pupil123!", role = UserRole.PUPIL) + + val pupilKristoffer = + seedUser(username = "kristoffer", password = "Pupil123!", role = UserRole.PUPIL) + val pupilPeder = + seedUser(username = "peder", password = "Pupil123!", role = UserRole.PUPIL) + val pupilPablo = + seedUser(username = "pablo", password = "Pupil123!", role = UserRole.PUPIL) + val pupilPetra = + seedUser(username = "petra", password = "Pupil123!", role = UserRole.PUPIL) + val pupilLars = + seedUser(username = "lars", password = "Pupil123!", role = UserRole.PUPIL) + val pupilIngrid = + seedUser(username = "ingrid", password = "Pupil123!", role = UserRole.PUPIL) + val pupilMagnus = + seedUser(username = "magnus", password = "Pupil123!", role = UserRole.PUPIL) + val pupilAstrid = + seedUser(username = "astrid", password = "Pupil123!", role = UserRole.PUPIL) + val pupilEirik = + seedUser(username = "eirik", password = "Pupil123!", role = UserRole.PUPIL) + seedTeacherProfile(teacher, "Ada Lunde", "Trondheim Montessori") val sampleClassroom = seedClassroom( @@ -114,17 +189,109 @@ class DevDataBootstrap( description = "Eksempelklasserom for lokal utvikling", joinCode = "CLASS42", ) + + val secondClassroom = + seedClassroom( + ownerTeacher = teacher, + title = "Detektivgjengen 6B", + description = "Another example", + joinCode = "CLASS31", + ) + val thirdClassroom = + seedClassroom( + ownerTeacher = teacher, + title = "Superdetektiver 4A", + description = "Another example of a classroom", + joinCode = "CLASS21", + ) + seedClassroomMembership(sampleClassroom, pupilAda, "Ada") seedClassroomMembership(sampleClassroom, pupilNoah, "Noah") seedClassroomMembership(sampleClassroom, pupilSofia, "Sofia") + seedClassroomMembership(sampleClassroom, pupilSara, "Sara") + seedClassroomMembership(sampleClassroom, pupilLiam, "Liam") + seedClassroomMembership(sampleClassroom, pupilEmma, "Emma") + seedClassroomMembership(sampleClassroom, pupilOliver, "Oliver") + seedClassroomMembership(sampleClassroom, pupilMaja, "Maja") + seedClassroomMembership(sampleClassroom, pupilJakob, "Jakob") + seedClassroomMembership(secondClassroom, pupilChristina, "Christina") + seedClassroomMembership(secondClassroom, pupilSebastian, "Sebastian") + seedClassroomMembership(secondClassroom, pupilPedro, "Pedro") + seedClassroomMembership(secondClassroom, pupilCaroline, "Caroline") + seedClassroomMembership(secondClassroom, pupilMarkus, "Markus") + seedClassroomMembership(secondClassroom, pupilNora, "Nora") + seedClassroomMembership(secondClassroom, pupilTobias, "Tobias") + seedClassroomMembership(secondClassroom, pupilSigrid, "Sigrid") + seedClassroomMembership(secondClassroom, pupilHenrik, "Henrik") + seedClassroomMembership(thirdClassroom, pupilKristoffer, "Kristoffer") + seedClassroomMembership(thirdClassroom, pupilPeder, "Peder") + seedClassroomMembership(thirdClassroom, pupilPablo, "Pablo") + seedClassroomMembership(thirdClassroom, pupilPetra, "Petra") + seedClassroomMembership(thirdClassroom, pupilLars, "Lars") + seedClassroomMembership(thirdClassroom, pupilIngrid, "Ingrid") + seedClassroomMembership(thirdClassroom, pupilMagnus, "Magnus") + seedClassroomMembership(thirdClassroom, pupilAstrid, "Astrid") + seedClassroomMembership(thirdClassroom, pupilEirik, "Eirik") + seedPupilProfile(pupilAda, "Ada", sampleClassroom) seedPupilProfile(pupilNoah, "Noah", sampleClassroom) seedPupilProfile(pupilSofia, "Sofia", sampleClassroom) + seedPupilProfile(pupilSara, "Sara", sampleClassroom) + seedPupilProfile(pupilLiam, "Liam", sampleClassroom) + seedPupilProfile(pupilEmma, "Emma", sampleClassroom) + seedPupilProfile(pupilOliver, "Oliver", sampleClassroom) + seedPupilProfile(pupilMaja, "Maja", sampleClassroom) + seedPupilProfile(pupilJakob, "Jakob", sampleClassroom) + + seedPupilProfile(pupilChristina, "Christina", secondClassroom) + seedPupilProfile(pupilSebastian, "Sebastian", secondClassroom) + seedPupilProfile(pupilPedro, "Pedro", secondClassroom) + seedPupilProfile(pupilCaroline, "Caroline", secondClassroom) + seedPupilProfile(pupilMarkus, "Markus", secondClassroom) + seedPupilProfile(pupilNora, "Nora", secondClassroom) + seedPupilProfile(pupilTobias, "Tobias", secondClassroom) + seedPupilProfile(pupilSigrid, "Sigrid", secondClassroom) + seedPupilProfile(pupilHenrik, "Henrik", secondClassroom) + + seedPupilProfile(pupilKristoffer, "Kristoffer", thirdClassroom) + seedPupilProfile(pupilPeder, "Peder", thirdClassroom) + seedPupilProfile(pupilPablo, "Pablo", thirdClassroom) + seedPupilProfile(pupilPetra, "Petra", thirdClassroom) + seedPupilProfile(pupilLars, "Lars", thirdClassroom) + seedPupilProfile(pupilIngrid, "Ingrid", thirdClassroom) + seedPupilProfile(pupilMagnus, "Magnus", thirdClassroom) + seedPupilProfile(pupilAstrid, "Astrid", thirdClassroom) + seedPupilProfile(pupilEirik, "Eirik", thirdClassroom) + seedClassroomBannedWord(sampleClassroom, teacher, "faen") seedClassroomBannedWord(sampleClassroom, teacher, "fuck") seedPupilAvatar(pupilAda) seedPupilAvatar(pupilNoah) seedPupilAvatar(pupilSofia) + seedPupilAvatar(pupilSara) + seedPupilAvatar(pupilLiam) + seedPupilAvatar(pupilEmma) + seedPupilAvatar(pupilOliver) + seedPupilAvatar(pupilMaja) + seedPupilAvatar(pupilJakob) + seedPupilAvatar(pupilChristina) + seedPupilAvatar(pupilSebastian) + seedPupilAvatar(pupilPedro) + seedPupilAvatar(pupilCaroline) + seedPupilAvatar(pupilMarkus) + seedPupilAvatar(pupilNora) + seedPupilAvatar(pupilTobias) + seedPupilAvatar(pupilSigrid) + seedPupilAvatar(pupilHenrik) + seedPupilAvatar(pupilKristoffer) + seedPupilAvatar(pupilPeder) + seedPupilAvatar(pupilPablo) + seedPupilAvatar(pupilPetra) + seedPupilAvatar(pupilLars) + seedPupilAvatar(pupilIngrid) + seedPupilAvatar(pupilMagnus) + seedPupilAvatar(pupilAstrid) + seedPupilAvatar(pupilEirik) seedPupilGameProgress( pupil = pupilAda, classroom = sampleClassroom, @@ -158,6 +325,72 @@ class DevDataBootstrap( finalBossCompleted = false, lastActivityAt = Instant.now(), ) + seedPupilGameProgress( + pupil = pupilSara, + classroom = sampleClassroom, + totalScore = 130, + totalXp = 280, + currentLevel = 3, + completedStopsCount = 2, + completedTasksCount = 6, + finalBossCompleted = false, + lastActivityAt = Instant.now(), + ) + seedPupilGameProgress( + pupil = pupilLiam, + classroom = sampleClassroom, + totalScore = 380, + totalXp = 720, + currentLevel = 6, + completedStopsCount = 5, + completedTasksCount = 15, + finalBossCompleted = true, + lastActivityAt = Instant.now().minus(3, ChronoUnit.HOURS), + ) + seedPupilGameProgress( + pupil = pupilEmma, + classroom = sampleClassroom, + totalScore = 290, + totalXp = 550, + currentLevel = 5, + completedStopsCount = 4, + completedTasksCount = 12, + finalBossCompleted = false, + lastActivityAt = Instant.now().minus(5, ChronoUnit.HOURS), + ) + seedPupilGameProgress( + pupil = pupilOliver, + classroom = sampleClassroom, + totalScore = 180, + totalXp = 340, + currentLevel = 3, + completedStopsCount = 2, + completedTasksCount = 7, + finalBossCompleted = false, + lastActivityAt = Instant.now().minus(2, ChronoUnit.DAYS), + ) + seedPupilGameProgress( + pupil = pupilMaja, + classroom = sampleClassroom, + totalScore = 45, + totalXp = 90, + currentLevel = 1, + completedStopsCount = 0, + completedTasksCount = 2, + finalBossCompleted = false, + lastActivityAt = Instant.now().minus(4, ChronoUnit.DAYS), + ) + seedPupilGameProgress( + pupil = pupilJakob, + classroom = sampleClassroom, + totalScore = 310, + totalXp = 600, + currentLevel = 5, + completedStopsCount = 4, + completedTasksCount = 11, + finalBossCompleted = false, + lastActivityAt = Instant.now().minus(1, ChronoUnit.HOURS), + ) seedRefreshToken(admin, "dev-admin-refresh-token", Instant.now().plus(14, ChronoUnit.DAYS), null) seedRefreshToken( teacher, @@ -183,6 +416,42 @@ class DevDataBootstrap( Instant.now().plus(7, ChronoUnit.DAYS), null, ) + seedRefreshToken( + pupilSara, + "dev-pupil-sara-refresh-token", + Instant.now().plus(7, ChronoUnit.DAYS), + null, + ) + seedRefreshToken( + pupilLiam, + "dev-pupil-liam-refresh-token", + Instant.now().plus(7, ChronoUnit.DAYS), + null, + ) + seedRefreshToken( + pupilEmma, + "dev-pupil-emma-refresh-token", + Instant.now().plus(7, ChronoUnit.DAYS), + null, + ) + seedRefreshToken( + pupilOliver, + "dev-pupil-oliver-refresh-token", + Instant.now().plus(7, ChronoUnit.DAYS), + null, + ) + seedRefreshToken( + pupilMaja, + "dev-pupil-maja-refresh-token", + Instant.now().plus(7, ChronoUnit.DAYS), + null, + ) + seedRefreshToken( + pupilJakob, + "dev-pupil-jakob-refresh-token", + Instant.now().plus(7, ChronoUnit.DAYS), + null, + ) mapStopBootstrap.seedAllMapStops() medalBootstrap.seedAllMedals() @@ -193,6 +462,8 @@ class DevDataBootstrap( xpBootstrap.seedPupilXpEvent(pupilAda) xpBootstrap.seedPupilXpEvent(pupilAda) val activeStops = taskBootstrap.seedAllTasks(classroom = sampleClassroom, teacher = teacher) + taskBootstrap.seedAllTasks(classroom = secondClassroom, teacher = teacher) + taskBootstrap.seedAllTasks(classroom = thirdClassroom, teacher = teacher) seedNotebookEntries( classroom = sampleClassroom, pupilAda = pupilAda, @@ -213,6 +484,7 @@ class DevDataBootstrap( pupilAda = pupilAda, pupilNoah = pupilNoah, pupilSofia = pupilSofia, + pupilSara = pupilSara, ) logger.info( "Development bootstrap ensured sample rows for users, profiles, refresh tokens, classroom {} with join code {}, and seeded tasks for {} active map stops", diff --git a/src/main/kotlin/edu/ntnu/idi/idatt/backend/bootstrap/MysteryBootstrap.kt b/src/main/kotlin/edu/ntnu/idi/idatt/backend/bootstrap/MysteryBootstrap.kt index 4eff3331..8e8d69cf 100644 --- a/src/main/kotlin/edu/ntnu/idi/idatt/backend/bootstrap/MysteryBootstrap.kt +++ b/src/main/kotlin/edu/ntnu/idi/idatt/backend/bootstrap/MysteryBootstrap.kt @@ -33,6 +33,7 @@ class MysteryBootstrap( pupilAda: User, pupilNoah: User, pupilSofia: User, + pupilSara: User, ) { if (submissionRepository.findAllByClassroomId(classroom.id).isNotEmpty()) return @@ -72,6 +73,17 @@ class MysteryBootstrap( ).also { it.approve(teacher, "Veldig bra! Dette er et typisk phishing-forsøk.") }, ) + // Sara — approved, featured this week + val saraSubmission = + submissionRepository.save( + MysterySubmission( + classroom = classroom, + pupil = pupilSara, + description = "Jeg fant en nettside som hevder at en kjent politiker har sagt noe skandaløst, men ingen andre nyhetskilder skriver om det.", + attachmentUrl = null, + ).also { it.approve(teacher, "Bra jobbet! Det er viktig å sjekke om flere kilder bekrefter påstanden.") }, + ) + // Ada — pending (tests the 'mine' tab with pending status) submissionRepository.save( MysterySubmission( @@ -92,7 +104,7 @@ class MysteryBootstrap( ).also { it.reject(teacher, "Dette er reklame, ikke fake news. Prøv å finne et bedre eksempel.") }, ) - // Feature ada + noah this week, sofia last week + // Feature ada + noah + sara this week, sofia last week weeklyMysteryRepository.save( WeeklyMystery( classroom = classroom, @@ -117,6 +129,14 @@ class MysteryBootstrap( featuredBy = teacher, ), ) + weeklyMysteryRepository.save( + WeeklyMystery( + classroom = classroom, + submission = saraSubmission, + weekStart = thisWeek, + featuredBy = teacher, + ), + ) } private fun currentWeekStart(): LocalDate = LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))