diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 05936c5..f971694 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,7 +20,7 @@ android { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" + "proguard-rules.pro", ) } } diff --git a/app/config/detekt/detekt.yml b/app/config/detekt/detekt.yml index aba4110..ab95a32 100644 --- a/app/config/detekt/detekt.yml +++ b/app/config/detekt/detekt.yml @@ -8,18 +8,18 @@ naming: complexity: LongParameterList: - ignoreAnnotated: ['Composable'] + ignoreAnnotated: [ 'Composable' ] TooManyFunctions: - ignoreAnnotatedFunctions: ['Preview'] + ignoreAnnotatedFunctions: [ 'Preview' ] style: MagicNumber: ignorePropertyDeclaration: true ignoreCompanionObjectPropertyDeclaration: true - ignoreAnnotated: ['Composable'] + ignoreAnnotated: [ 'Composable' ] UnusedPrivateMember: - ignoreAnnotated: ['Composable'] + ignoreAnnotated: [ 'Composable' ] # Deviations from defaults formatting: diff --git a/app/src/androidTest/java/dev/adriankuta/kahootquiz/ExampleInstrumentedTest.kt b/app/src/androidTest/java/dev/adriankuta/kahootquiz/ExampleInstrumentedTest.kt index 592357b..c4a659f 100644 --- a/app/src/androidTest/java/dev/adriankuta/kahootquiz/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/dev/adriankuta/kahootquiz/ExampleInstrumentedTest.kt @@ -1,13 +1,11 @@ package dev.adriankuta.kahootquiz -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - /** * Instrumented test, which will execute on an Android device. * diff --git a/app/src/main/java/dev/adriankuta/kahootquiz/KahootQuizApp.kt b/app/src/main/java/dev/adriankuta/kahootquiz/KahootQuizApp.kt index 9d9c7c9..ba0d955 100644 --- a/app/src/main/java/dev/adriankuta/kahootquiz/KahootQuizApp.kt +++ b/app/src/main/java/dev/adriankuta/kahootquiz/KahootQuizApp.kt @@ -9,7 +9,7 @@ import androidx.compose.ui.Modifier @Composable fun KahootQuizApp( - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { Scaffold( contentWindowInsets = WindowInsets.safeDrawing, diff --git a/app/src/main/java/dev/adriankuta/kahootquiz/KahootQuizNavGraph.kt b/app/src/main/java/dev/adriankuta/kahootquiz/KahootQuizNavGraph.kt index 014dcec..c12ca76 100644 --- a/app/src/main/java/dev/adriankuta/kahootquiz/KahootQuizNavGraph.kt +++ b/app/src/main/java/dev/adriankuta/kahootquiz/KahootQuizNavGraph.kt @@ -16,7 +16,7 @@ fun KahootQuizNavGraph( NavHost( navController = navController, startDestination = QuizRoute, - modifier = modifier + modifier = modifier, ) { quizScreen() } diff --git a/app/src/main/java/dev/adriankuta/kahootquiz/MyApplication.kt b/app/src/main/java/dev/adriankuta/kahootquiz/MyApplication.kt index b856884..8c7d879 100644 --- a/app/src/main/java/dev/adriankuta/kahootquiz/MyApplication.kt +++ b/app/src/main/java/dev/adriankuta/kahootquiz/MyApplication.kt @@ -4,4 +4,4 @@ import android.app.Application import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp -class MyApplication: Application() +class MyApplication : Application() diff --git a/app/src/test/java/dev/adriankuta/kahootquiz/ExampleUnitTest.kt b/app/src/test/java/dev/adriankuta/kahootquiz/ExampleUnitTest.kt index e568ce3..f5acc3d 100644 --- a/app/src/test/java/dev/adriankuta/kahootquiz/ExampleUnitTest.kt +++ b/app/src/test/java/dev/adriankuta/kahootquiz/ExampleUnitTest.kt @@ -1,9 +1,8 @@ package dev.adriankuta.kahootquiz +import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.Assert.* - /** * Example local unit test, which will execute on the development machine (host). * diff --git a/core/designsystem/config/detekt/detekt.yml b/core/designsystem/config/detekt/detekt.yml index aba4110..ab95a32 100644 --- a/core/designsystem/config/detekt/detekt.yml +++ b/core/designsystem/config/detekt/detekt.yml @@ -8,18 +8,18 @@ naming: complexity: LongParameterList: - ignoreAnnotated: ['Composable'] + ignoreAnnotated: [ 'Composable' ] TooManyFunctions: - ignoreAnnotatedFunctions: ['Preview'] + ignoreAnnotatedFunctions: [ 'Preview' ] style: MagicNumber: ignorePropertyDeclaration: true ignoreCompanionObjectPropertyDeclaration: true - ignoreAnnotated: ['Composable'] + ignoreAnnotated: [ 'Composable' ] UnusedPrivateMember: - ignoreAnnotated: ['Composable'] + ignoreAnnotated: [ 'Composable' ] # Deviations from defaults formatting: diff --git a/core/designsystem/src/main/kotlin/dev/adriankuta/kahootquiz/core/designsystem/Theme.kt b/core/designsystem/src/main/kotlin/dev/adriankuta/kahootquiz/core/designsystem/Theme.kt index 6294060..1091dd6 100644 --- a/core/designsystem/src/main/kotlin/dev/adriankuta/kahootquiz/core/designsystem/Theme.kt +++ b/core/designsystem/src/main/kotlin/dev/adriankuta/kahootquiz/core/designsystem/Theme.kt @@ -13,13 +13,13 @@ import androidx.compose.ui.platform.LocalContext private val DarkColorScheme = darkColorScheme( primary = Purple80, secondary = PurpleGrey80, - tertiary = Pink80 + tertiary = Pink80, ) private val LightColorScheme = lightColorScheme( primary = Purple40, secondary = PurpleGrey40, - tertiary = Pink40 + tertiary = Pink40, /* Other default colors to override background = Color(0xFFFFFBFE), @@ -37,7 +37,7 @@ fun KahootQuizTheme( darkTheme: Boolean = isSystemInDarkTheme(), // Dynamic color is available on Android 12+ dynamicColor: Boolean = true, - content: @Composable () -> Unit + content: @Composable () -> Unit, ) { val colorScheme = when { dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { @@ -52,6 +52,6 @@ fun KahootQuizTheme( MaterialTheme( colorScheme = colorScheme, typography = Typography, - content = content + content = content, ) } \ No newline at end of file diff --git a/core/designsystem/src/main/kotlin/dev/adriankuta/kahootquiz/core/designsystem/Type.kt b/core/designsystem/src/main/kotlin/dev/adriankuta/kahootquiz/core/designsystem/Type.kt index 7c11c64..a7a982d 100644 --- a/core/designsystem/src/main/kotlin/dev/adriankuta/kahootquiz/core/designsystem/Type.kt +++ b/core/designsystem/src/main/kotlin/dev/adriankuta/kahootquiz/core/designsystem/Type.kt @@ -13,8 +13,8 @@ val Typography = Typography( fontWeight = FontWeight.Normal, fontSize = 16.sp, lineHeight = 24.sp, - letterSpacing = 0.5.sp - ) + letterSpacing = 0.5.sp, + ), /* Other default text styles to override titleLarge = TextStyle( fontFamily = FontFamily.Default, diff --git a/core/designsystem/src/main/res/drawable/ic_circle.xml b/core/designsystem/src/main/res/drawable/ic_circle.xml index 8790a7f..8257b6e 100644 --- a/core/designsystem/src/main/res/drawable/ic_circle.xml +++ b/core/designsystem/src/main/res/drawable/ic_circle.xml @@ -3,13 +3,13 @@ android:height="40dp" android:viewportWidth="40" android:viewportHeight="40"> - - + + diff --git a/core/designsystem/src/main/res/drawable/ic_correct.xml b/core/designsystem/src/main/res/drawable/ic_correct.xml index 8eb3548..9d4082f 100644 --- a/core/designsystem/src/main/res/drawable/ic_correct.xml +++ b/core/designsystem/src/main/res/drawable/ic_correct.xml @@ -3,22 +3,21 @@ android:height="40dp" android:viewportWidth="40" android:viewportHeight="40"> - - - - - - + + + + + + diff --git a/core/designsystem/src/main/res/drawable/ic_diamond.xml b/core/designsystem/src/main/res/drawable/ic_diamond.xml index 114eca9..49cb44c 100644 --- a/core/designsystem/src/main/res/drawable/ic_diamond.xml +++ b/core/designsystem/src/main/res/drawable/ic_diamond.xml @@ -3,13 +3,13 @@ android:height="40dp" android:viewportWidth="40" android:viewportHeight="40"> - - + + diff --git a/core/designsystem/src/main/res/drawable/ic_square.xml b/core/designsystem/src/main/res/drawable/ic_square.xml index 8bd8e54..3db8b0e 100644 --- a/core/designsystem/src/main/res/drawable/ic_square.xml +++ b/core/designsystem/src/main/res/drawable/ic_square.xml @@ -3,13 +3,13 @@ android:height="41dp" android:viewportWidth="40" android:viewportHeight="41"> - - + + diff --git a/core/designsystem/src/main/res/drawable/ic_triangle.xml b/core/designsystem/src/main/res/drawable/ic_triangle.xml index cd19e6f..8e8a997 100644 --- a/core/designsystem/src/main/res/drawable/ic_triangle.xml +++ b/core/designsystem/src/main/res/drawable/ic_triangle.xml @@ -3,13 +3,13 @@ android:height="40dp" android:viewportWidth="40" android:viewportHeight="40"> - - + + diff --git a/core/designsystem/src/main/res/drawable/ic_type.xml b/core/designsystem/src/main/res/drawable/ic_type.xml index 0f3c58e..e14d2c0 100644 --- a/core/designsystem/src/main/res/drawable/ic_type.xml +++ b/core/designsystem/src/main/res/drawable/ic_type.xml @@ -3,48 +3,48 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - - - - - - - - - - + + + + + + + + + + + diff --git a/core/designsystem/src/main/res/drawable/ic_wrong.xml b/core/designsystem/src/main/res/drawable/ic_wrong.xml index 91359ed..6bbe0df 100644 --- a/core/designsystem/src/main/res/drawable/ic_wrong.xml +++ b/core/designsystem/src/main/res/drawable/ic_wrong.xml @@ -3,33 +3,32 @@ android:height="40dp" android:viewportWidth="40" android:viewportHeight="40"> - - - - - - - - + android:fillColor="#FF3355" + android:pathData="M20,20m-16,0a16,16 0,1 1,32 0a16,16 0,1 1,-32 0" /> + + + + + + + + diff --git a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/CommonDtos.kt b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/CommonDtos.kt index d9b6c94..d1d76cf 100644 --- a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/CommonDtos.kt +++ b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/CommonDtos.kt @@ -5,7 +5,7 @@ package dev.adriankuta.kahootquiz.core.network.models data class LanguageInfoDto( val language: String?, val lastUpdatedOn: Long?, - val readAloudSupported: Boolean? + val readAloudSupported: Boolean?, ) // Minimal channel info @@ -16,5 +16,5 @@ data class ChannelDto(val id: String?) data class PointDto( val x: Int?, - val y: Int? + val y: Int?, ) diff --git a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/ContentTagsDto.kt b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/ContentTagsDto.kt index 39d93b2..1befc54 100644 --- a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/ContentTagsDto.kt +++ b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/ContentTagsDto.kt @@ -4,5 +4,5 @@ package dev.adriankuta.kahootquiz.core.network.models data class ContentTagsDto( val curriculumCodes: List?, - val generatedCurriculumCodes: List? + val generatedCurriculumCodes: List?, ) diff --git a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/CoverDtos.kt b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/CoverDtos.kt index 5f8a3c2..555f680 100644 --- a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/CoverDtos.kt +++ b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/CoverDtos.kt @@ -13,14 +13,14 @@ data class CoverMetadataDto( val height: Int?, val extractedColors: List?, val blurhash: String?, - val crop: CropDto? + val crop: CropDto?, ) // Color extracted from cover image data class ExtractedColorDto( val swatch: String?, - val rgbHex: String? + val rgbHex: String?, ) // Crop descriptor @@ -28,5 +28,5 @@ data class ExtractedColorDto( data class CropDto( val origin: PointDto?, val target: PointDto?, - val circular: Boolean? + val circular: Boolean?, ) diff --git a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/MetadataDtos.kt b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/MetadataDtos.kt index 738a954..ea83701 100644 --- a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/MetadataDtos.kt +++ b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/MetadataDtos.kt @@ -7,7 +7,7 @@ data class MetadataDto( val duplicationProtection: Boolean?, val featuredListMemberships: List?, val lastEdit: LastEditDto?, - val versionMetadata: VersionMetadataDto? + val versionMetadata: VersionMetadataDto?, ) // Access settings @@ -15,14 +15,14 @@ data class MetadataDto( data class AccessDto( val groupRead: List?, val folderGroupIds: List?, - val features: List? + val features: List?, ) // Featured list membership data class FeaturedListMembershipDto( val list: String?, - val addedAt: Long? + val addedAt: Long?, ) // Last edit information @@ -30,7 +30,7 @@ data class FeaturedListMembershipDto( data class LastEditDto( val editorUserId: String?, val editorUsername: String?, - val editTimestamp: Long? + val editTimestamp: Long?, ) // Version metadata @@ -38,5 +38,5 @@ data class LastEditDto( data class VersionMetadataDto( val version: Int?, val created: Long?, - val creator: String? + val creator: String?, ) diff --git a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/QuestionDtos.kt b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/QuestionDtos.kt index ee956f5..ebb4cc2 100644 --- a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/QuestionDtos.kt +++ b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/QuestionDtos.kt @@ -17,7 +17,7 @@ data class QuestionDto( val questionFormat: Int?, val languageInfo: LanguageInfoDto?, val media: List?, - val choiceRange: ChoiceRangeDto? + val choiceRange: ChoiceRangeDto?, ) // Choice option @@ -25,7 +25,7 @@ data class QuestionDto( data class ChoiceDto( val answer: String?, val correct: Boolean, - val languageInfo: LanguageInfoDto? + val languageInfo: LanguageInfoDto?, ) // Optional video attachment @@ -35,7 +35,7 @@ data class VideoDto( val startTime: Int?, val endTime: Int?, val service: String?, - val fullUrl: String? + val fullUrl: String?, ) // Image metadata appearing in multiple places @@ -50,7 +50,7 @@ data class ImageMetadataDto( val width: Int? = null, val height: Int? = null, val effects: List? = null, - val crop: CropDto? = null + val crop: CropDto? = null, ) // Generic media item on question @@ -67,7 +67,7 @@ data class MediaItemDto( val resources: String? = null, val width: Int? = null, val height: Int? = null, - val crop: CropDto? = null + val crop: CropDto? = null, ) // Slider range for "slider" question type @@ -77,5 +77,5 @@ data class ChoiceRangeDto( val end: Int?, val step: Int?, val correct: Int?, - val tolerance: Int? + val tolerance: Int?, ) diff --git a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/QuizResponseDto.kt b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/QuizResponseDto.kt index 12db461..7d13fc9 100644 --- a/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/QuizResponseDto.kt +++ b/core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/QuizResponseDto.kt @@ -32,5 +32,5 @@ data class QuizResponseDto( val hasRestrictedContent: Boolean?, val type: String?, val created: Long?, - val modified: Long? + val modified: Long?, ) diff --git a/core/network/src/test/resources/sample_quiz.json b/core/network/src/test/resources/sample_quiz.json index aa8e613..fc7d355 100644 --- a/core/network/src/test/resources/sample_quiz.json +++ b/core/network/src/test/resources/sample_quiz.json @@ -42,8 +42,14 @@ ], "blurhash": "UuJ*#Qxtx]xaCAj[W=WqEma}M{R*M|WVn#j?", "crop": { - "origin": {"x": 227, "y": 0}, - "target": {"x": 1948, "y": 1299}, + "origin": { + "x": 227, + "y": 0 + }, + "target": { + "x": 1948, + "y": 1299 + }, "circular": false } }, @@ -55,8 +61,24 @@ "points": true, "pointsMultiplier": 1, "choices": [ - {"answer": "True", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "False", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "True", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "False", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "layout": "TRUE_FALSE", "image": "https://media.kahoot.it/b2709905-1c6e-45a0-9cc1-34c6580495e5", @@ -71,9 +93,18 @@ "height": 1406 }, "resources": "mikroman6/Moment/Getty Images", - "video": {"startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] }, { @@ -83,15 +114,56 @@ "points": true, "pointsMultiplier": 1, "choices": [ - {"answer": "A monument to the god Ra", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "A tomb", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "A momument to a great war victory", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "A temple", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "A monument to the god Ra", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "A tomb", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "A momument to a great war victory", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "A temple", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "resources": "", - "video": {"startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [ { "type": "background_image", @@ -105,7 +177,17 @@ "resources": "Nick Brundle Photography/Moment/Getty Images", "width": 2309, "height": 1299, - "crop": {"origin": {"x": 227, "y": 0}, "target": {"x": 1948, "y": 1299}, "circular": false} + "crop": { + "origin": { + "x": 227, + "y": 0 + }, + "target": { + "x": 1948, + "y": 1299 + }, + "circular": false + } } ] }, @@ -116,10 +198,42 @@ "points": true, "pointsMultiplier": 1, "choices": [ - {"answer": "As a tourist destination", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "A monument to Ninurta, the god of farmers", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "An engagement gift from a king to his future queen", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "A gift for the king's wife", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "As a tourist destination", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "A monument to Ninurta, the god of farmers", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "An engagement gift from a king to his future queen", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "A gift for the king's wife", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "image": "https://media.kahoot.it/7bce7efb-3d94-495c-905f-9c14190b7910", "imageMetadata": { @@ -129,9 +243,18 @@ "effects": [] }, "resources": "https://upload.wikimedia.org/wikipedia/commons/a/ae/Hanging_Gardens_of_Babylon.jpg CC0", - "video": {"startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] }, { @@ -141,10 +264,42 @@ "points": true, "pointsMultiplier": 1, "choices": [ - {"answer": "Greece", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Turkey", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Syria", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Iran", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "Greece", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Turkey", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Syria", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Iran", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "image": "https://media.kahoot.it/f999f2a2-5450-4821-a3c8-94288720bd46", "imageMetadata": { @@ -154,9 +309,18 @@ "effects": [] }, "resources": "Zee Prime at cs.wikipedia [GFDL (http://www.gnu.org/copyleft/fdl.html), CC-BY-SA-3.0 (http://creativecommons.org/licenses/by-sa/3.0/) or CC BY-SA 2.5 (https://creativecommons.org/licenses/by-sa/2.5)], from Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/1/1d/Miniaturk_009.jpg", - "video": {"startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] }, { @@ -166,10 +330,42 @@ "points": true, "pointsMultiplier": 1, "choices": [ - {"answer": "To become famous", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "It was an accident", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "He was angry at the gods", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Because of a bet", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "To become famous", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "It was an accident", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "He was angry at the gods", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Because of a bet", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "image": "https://media.kahoot.it/fe2c5c06-6d2e-4a5a-9441-a9c77391130e_opt", "imageMetadata": { @@ -179,9 +375,19 @@ "effects": [] }, "resources": " [Public domain], via Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/a/a9/Temple_of_Artemis.jpg", - "video": {"id": "", "startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "id": "", + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] }, { @@ -191,10 +397,42 @@ "points": true, "pointsMultiplier": 1, "choices": [ - {"answer": "Sparta", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Athens", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Olympia", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Delphi", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "Sparta", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Athens", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Olympia", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Delphi", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "image": "https://media.kahoot.it/9074a275-1874-4cb9-9c9f-248173ceae9d", "imageMetadata": { @@ -202,12 +440,31 @@ "contentType": "image/*", "resources": " [Public domain or Public domain], via Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/6/66/Le_Jupiter_Olympien_ou_l%27art_de_la_sculpture_antique.jpg", "effects": [], - "crop": {"origin": {"x": 53, "y": 0}, "target": {"x": 577, "y": 866}, "circular": false} + "crop": { + "origin": { + "x": 53, + "y": 0 + }, + "target": { + "x": 577, + "y": 866 + }, + "circular": false + } }, "resources": " [Public domain or Public domain], via Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/6/66/Le_Jupiter_Olympien_ou_l%27art_de_la_sculpture_antique.jpg", - "video": {"startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] }, { @@ -217,10 +474,42 @@ "points": true, "pointsMultiplier": 1, "choices": [ - {"answer": "Darius", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Xerxes", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Cyrus", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Mausoleus", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "Darius", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Xerxes", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Cyrus", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Mausoleus", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "image": "https://media.kahoot.it/38f43ef3-4507-4f11-ae33-f3e833a47d19", "imageMetadata": { @@ -234,9 +523,18 @@ "height": 1414 }, "resources": "MirageC/Moment/Getty Images", - "video": {"startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] }, { @@ -245,8 +543,24 @@ "time": 60000, "pointsMultiplier": 2, "choices": [ - {"answer": "Helios", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "helios", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "Helios", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "helios", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "image": "https://media.kahoot.it/d4ccbf4e-1026-46ad-ab35-84dc17c4d3a0_opt", "imageMetadata": { @@ -254,12 +568,32 @@ "contentType": "image/*", "resources": "By gravure sur bois de Sidney Barclay numérisée Google [Public domain], via Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/5/5f/Colosse_de_Rhodes_%28Barclay%29.jpg", "effects": [], - "crop": {"origin": {"x": 49, "y": 83}, "target": {"x": 531, "y": 796}, "circular": false} + "crop": { + "origin": { + "x": 49, + "y": 83 + }, + "target": { + "x": 531, + "y": 796 + }, + "circular": false + } }, "resources": "By gravure sur bois de Sidney Barclay numérisée Google [Public domain], via Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/5/5f/Colosse_de_Rhodes_%28Barclay%29.jpg", - "video": {"id": "", "startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "id": "", + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] }, { @@ -269,10 +603,42 @@ "points": true, "pointsMultiplier": 1, "choices": [ - {"answer": "Fire", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Earthquake", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Tidal Wave", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "Storm", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "Fire", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Earthquake", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Tidal Wave", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "Storm", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "image": "https://media.kahoot.it/e2d22765-942b-4dbd-9fd6-d71142d775c3", "imageMetadata": { @@ -280,12 +646,31 @@ "contentType": "image/*", "resources": "Emad Victor SHENOUDA [Attribution], from Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/3/33/PHAROS2013-3000x2250.jpg", "effects": [], - "crop": {"origin": {"x": 0, "y": 10}, "target": {"x": 1024, "y": 683}, "circular": false} + "crop": { + "origin": { + "x": 0, + "y": 10 + }, + "target": { + "x": 1024, + "y": 683 + }, + "circular": false + } }, "resources": "Emad Victor SHENOUDA [Attribution], from Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/3/33/PHAROS2013-3000x2250.jpg", - "video": {"startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] }, { @@ -295,10 +680,42 @@ "points": true, "pointsMultiplier": 1, "choices": [ - {"answer": "The Colossus of Rhodes", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "The Lighthouse of Alexandria", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "The Mausoleum at Halicarnassus", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "The Great Pyramid of Giza", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "The Colossus of Rhodes", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "The Lighthouse of Alexandria", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "The Mausoleum at Halicarnassus", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "The Great Pyramid of Giza", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "image": "https://media.kahoot.it/19382163-196f-495d-9a84-c2d8c3fd716c", "imageMetadata": { @@ -306,12 +723,32 @@ "contentType": "image/*", "resources": "By The original uploader was Mark22 at English Wikipedia (Transferred from en.wikipedia to Commons.) [Public domain], via Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/b/b7/SevenWondersOfTheWorld.png", "effects": [], - "crop": {"origin": {"x": 19, "y": 0}, "target": {"x": 491, "y": 736}, "circular": false} + "crop": { + "origin": { + "x": 19, + "y": 0 + }, + "target": { + "x": 491, + "y": 736 + }, + "circular": false + } }, "resources": "By The original uploader was Mark22 at English Wikipedia (Transferred from en.wikipedia to Commons.) [Public domain], via Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/b/b7/SevenWondersOfTheWorld.png", - "video": {"id": "", "startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "id": "", + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] }, { @@ -319,7 +756,13 @@ "question": "How many of the Seven Wonders still exist?", "time": 20000, "pointsMultiplier": 2, - "choiceRange": {"start": 0, "end": 7, "step": 1, "correct": 1, "tolerance": 0}, + "choiceRange": { + "start": 0, + "end": 7, + "step": 1, + "correct": 1, + "tolerance": 0 + }, "image": "https://media.kahoot.it/b431b3aa-4a46-49c9-b4ac-aa1dde40333f", "imageMetadata": { "id": "b431b3aa-4a46-49c9-b4ac-aa1dde40333f", @@ -328,9 +771,19 @@ "effects": [] }, "resources": "By Kandi [GFDL (http://www.gnu.org/copyleft/fdl.html) or CC BY-SA 3.0 (https://creativecommons.org/licenses/by-sa/3.0)], from Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/a/a4/Seven_Wonders_of_the_Ancient_World.png", - "video": {"id": "", "startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "id": "", + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] }, { @@ -340,10 +793,42 @@ "points": true, "pointsMultiplier": 1, "choices": [ - {"answer": "The Great Pyramid of Giza", "correct": true, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "The Temple of Artemis", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "The Mausoleum at Halicarnassus", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}}, - {"answer": "The Colossus of Rhodes", "correct": false, "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}} + { + "answer": "The Great Pyramid of Giza", + "correct": true, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "The Temple of Artemis", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "The Mausoleum at Halicarnassus", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + }, + { + "answer": "The Colossus of Rhodes", + "correct": false, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + } + } ], "image": "https://media.kahoot.it/34b01038-031c-4d23-b8a0-55402916586f_opt", "imageMetadata": { @@ -351,16 +836,39 @@ "contentType": "image/*", "resources": "By Varios [CC BY-SA 3.0 (https://creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/d/d6/Siete_maravillas_antiguas.jpg", "effects": [], - "crop": {"origin": {"x": 19, "y": 0}, "target": {"x": 491, "y": 736}, "circular": false} + "crop": { + "origin": { + "x": 19, + "y": 0 + }, + "target": { + "x": 491, + "y": 736 + }, + "circular": false + } }, "resources": "By Varios [CC BY-SA 3.0 (https://creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons\nhttps://upload.wikimedia.org/wikipedia/commons/d/d6/Siete_maravillas_antiguas.jpg", - "video": {"id": "", "startTime": 0, "endTime": 0, "service": "youtube", "fullUrl": ""}, + "video": { + "id": "", + "startTime": 0, + "endTime": 0, + "service": "youtube", + "fullUrl": "" + }, "questionFormat": 0, - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "media": [] } ], - "contentTags": {"curriculumCodes": [], "generatedCurriculumCodes": []}, + "contentTags": { + "curriculumCodes": [], + "generatedCurriculumCodes": [] + }, "metadata": { "access": { "groupRead": [ @@ -372,12 +880,20 @@ "36022fd9-43e1-4b36-9c98-a6a3b2b53038" ], "folderGroupIds": [], - "features": ["PremiumEduContent"] + "features": [ + "PremiumEduContent" + ] }, "duplicationProtection": true, "featuredListMemberships": [ - {"list": "youngfeatured", "addedAt": 1682336780289}, - {"list": "featured", "addedAt": 1682336738189} + { + "list": "youngfeatured", + "addedAt": 1682336780289 + }, + { + "list": "featured", + "addedAt": 1682336738189 + } ], "lastEdit": { "editorUserId": "4c1574ee-de54-40a2-be15-8d72b333afad", @@ -392,9 +908,17 @@ }, "resources": "Nick Brundle Photography/Moment/Getty Images", "slug": "seven-wonders-of-the-ancient-world", - "languageInfo": {"language": "en-US", "lastUpdatedOn": 1741920189202, "readAloudSupported": true}, + "languageInfo": { + "language": "en-US", + "lastUpdatedOn": 1741920189202, + "readAloudSupported": true + }, "inventoryItemIds": [], - "channels": [{"id": "247c3eb4-af80-4c1f-b006-558682c7bd2f"}], + "channels": [ + { + "id": "247c3eb4-af80-4c1f-b006-558682c7bd2f" + } + ], "isValid": true, "playAsGuest": true, "hasRestrictedContent": false, diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Access.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Access.kt index 06af84a..9e87006 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Access.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Access.kt @@ -5,5 +5,5 @@ package dev.adriankuta.kahootquiz.domain.models data class Access( val groupRead: List?, val folderGroupIds: List?, - val features: List? + val features: List?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Choice.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Choice.kt index 0023607..bb1f73b 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Choice.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Choice.kt @@ -3,5 +3,5 @@ package dev.adriankuta.kahootquiz.domain.models data class Choice( val answer: String?, val correct: Boolean, - val languageInfo: LanguageInfo? = null + val languageInfo: LanguageInfo? = null, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ChoiceRange.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ChoiceRange.kt index a53d7b8..5ce4f8f 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ChoiceRange.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ChoiceRange.kt @@ -7,5 +7,5 @@ data class ChoiceRange( val end: Int?, val step: Int?, val correct: Int?, - val tolerance: Int? + val tolerance: Int?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ContentTags.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ContentTags.kt index 46acb10..4c4c235 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ContentTags.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ContentTags.kt @@ -4,5 +4,5 @@ package dev.adriankuta.kahootquiz.domain.models data class ContentTags( val curriculumCodes: List?, - val generatedCurriculumCodes: List? + val generatedCurriculumCodes: List?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/CoverMetadata.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/CoverMetadata.kt index 1824137..ea749b5 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/CoverMetadata.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/CoverMetadata.kt @@ -13,5 +13,5 @@ data class CoverMetadata( val height: Int?, val extractedColors: List?, val blurhash: String?, - val crop: Crop? + val crop: Crop?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Crop.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Crop.kt index 9d4fb8a..fa6d4fc 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Crop.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Crop.kt @@ -5,5 +5,5 @@ package dev.adriankuta.kahootquiz.domain.models data class Crop( val origin: Point?, val target: Point?, - val circular: Boolean? + val circular: Boolean?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ExtractedColor.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ExtractedColor.kt index e77012b..29d50a9 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ExtractedColor.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ExtractedColor.kt @@ -4,5 +4,5 @@ package dev.adriankuta.kahootquiz.domain.models data class ExtractedColor( val swatch: String?, - val rgbHex: String? + val rgbHex: String?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/FeaturedListMembership.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/FeaturedListMembership.kt index 242921e..ee6c610 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/FeaturedListMembership.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/FeaturedListMembership.kt @@ -4,5 +4,5 @@ package dev.adriankuta.kahootquiz.domain.models data class FeaturedListMembership( val list: String?, - val addedAt: Long? + val addedAt: Long?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ImageMetadata.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ImageMetadata.kt index 736aae1..4480c2e 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ImageMetadata.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ImageMetadata.kt @@ -12,5 +12,5 @@ data class ImageMetadata( val width: Int? = null, val height: Int? = null, val effects: List? = null, - val crop: Crop? = null + val crop: Crop? = null, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/LanguageInfo.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/LanguageInfo.kt index 41786ef..0cbd7a3 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/LanguageInfo.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/LanguageInfo.kt @@ -5,5 +5,5 @@ package dev.adriankuta.kahootquiz.domain.models data class LanguageInfo( val language: String?, val lastUpdatedOn: Long?, - val readAloudSupported: Boolean? + val readAloudSupported: Boolean?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/LastEdit.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/LastEdit.kt index 298ee8f..3e00a81 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/LastEdit.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/LastEdit.kt @@ -5,5 +5,5 @@ package dev.adriankuta.kahootquiz.domain.models data class LastEdit( val editorUserId: String?, val editorUsername: String?, - val editTimestamp: Long? + val editTimestamp: Long?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/MediaItem.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/MediaItem.kt index 1898479..3fda83f 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/MediaItem.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/MediaItem.kt @@ -14,5 +14,5 @@ data class MediaItem( val resources: String? = null, val width: Int? = null, val height: Int? = null, - val crop: Crop? = null + val crop: Crop? = null, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Metadata.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Metadata.kt index 700967c..e73c2e0 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Metadata.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Metadata.kt @@ -7,5 +7,5 @@ data class Metadata( val duplicationProtection: Boolean?, val featuredListMemberships: List?, val lastEdit: LastEdit?, - val versionMetadata: VersionMetadata? + val versionMetadata: VersionMetadata?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Point.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Point.kt index 0d88599..e5c110b 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Point.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Point.kt @@ -4,5 +4,5 @@ package dev.adriankuta.kahootquiz.domain.models data class Point( val x: Int?, - val y: Int? + val y: Int?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Quiz.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Quiz.kt index 9e5d990..6fd1298 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Quiz.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Quiz.kt @@ -31,5 +31,5 @@ data class Quiz( val hasRestrictedContent: Boolean?, val type: String?, val created: Long?, - val modified: Long? + val modified: Long?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/VersionMetadata.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/VersionMetadata.kt index 0dab9f3..876a032 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/VersionMetadata.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/VersionMetadata.kt @@ -5,5 +5,5 @@ package dev.adriankuta.kahootquiz.domain.models data class VersionMetadata( val version: Int?, val created: Long?, - val creator: String? + val creator: String?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Video.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Video.kt index 713996a..f3a58ed 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Video.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Video.kt @@ -5,5 +5,5 @@ data class Video( val startTime: Int?, val endTime: Int?, val service: String?, - val fullUrl: String? + val fullUrl: String?, ) \ No newline at end of file diff --git a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/usecases/GetQuizUseCase.kt b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/usecases/GetQuizUseCase.kt index b1ae02b..f08e56e 100644 --- a/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/usecases/GetQuizUseCase.kt +++ b/domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/usecases/GetQuizUseCase.kt @@ -5,7 +5,7 @@ import dev.adriankuta.kahootquiz.domain.repositories.QuizRepository import javax.inject.Inject class GetQuizUseCase @Inject constructor( - private val quizRepository: QuizRepository + private val quizRepository: QuizRepository, ) { suspend operator fun invoke(): Quiz { diff --git a/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/QuizRepositoryImpl.kt b/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/QuizRepositoryImpl.kt index 9ae8f24..d011736 100644 --- a/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/QuizRepositoryImpl.kt +++ b/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/QuizRepositoryImpl.kt @@ -7,7 +7,7 @@ import dev.adriankuta.kahootquiz.model.data.mappers.toDomainModel import javax.inject.Inject internal class QuizRepositoryImpl @Inject constructor( - private val quizApi: QuizApi + private val quizApi: QuizApi, ) : QuizRepository { override suspend fun getQuiz(): Quiz { diff --git a/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/di/RepositoryModule.kt b/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/di/RepositoryModule.kt index a7e858f..614627e 100644 --- a/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/di/RepositoryModule.kt +++ b/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/di/RepositoryModule.kt @@ -15,6 +15,6 @@ internal abstract class RepositoryModule { @Binds @Singleton abstract fun bindsQuizRepository( - quizRepositoryImpl: QuizRepositoryImpl + quizRepositoryImpl: QuizRepositoryImpl, ): QuizRepository } diff --git a/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/mappers/QuizMapper.kt b/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/mappers/QuizMapper.kt index 70c71a1..59b481c 100644 --- a/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/mappers/QuizMapper.kt +++ b/model/data/src/main/kotlin/dev/adriankuta/kahootquiz/model/data/mappers/QuizMapper.kt @@ -1,7 +1,44 @@ package dev.adriankuta.kahootquiz.model.data.mappers -import dev.adriankuta.kahootquiz.core.network.models.* -import dev.adriankuta.kahootquiz.domain.models.* +import dev.adriankuta.kahootquiz.core.network.models.AccessDto +import dev.adriankuta.kahootquiz.core.network.models.ChannelDto +import dev.adriankuta.kahootquiz.core.network.models.ChoiceDto +import dev.adriankuta.kahootquiz.core.network.models.ChoiceRangeDto +import dev.adriankuta.kahootquiz.core.network.models.ContentTagsDto +import dev.adriankuta.kahootquiz.core.network.models.CoverMetadataDto +import dev.adriankuta.kahootquiz.core.network.models.CropDto +import dev.adriankuta.kahootquiz.core.network.models.ExtractedColorDto +import dev.adriankuta.kahootquiz.core.network.models.FeaturedListMembershipDto +import dev.adriankuta.kahootquiz.core.network.models.ImageMetadataDto +import dev.adriankuta.kahootquiz.core.network.models.LanguageInfoDto +import dev.adriankuta.kahootquiz.core.network.models.LastEditDto +import dev.adriankuta.kahootquiz.core.network.models.MediaItemDto +import dev.adriankuta.kahootquiz.core.network.models.MetadataDto +import dev.adriankuta.kahootquiz.core.network.models.PointDto +import dev.adriankuta.kahootquiz.core.network.models.QuestionDto +import dev.adriankuta.kahootquiz.core.network.models.QuizResponseDto +import dev.adriankuta.kahootquiz.core.network.models.VersionMetadataDto +import dev.adriankuta.kahootquiz.core.network.models.VideoDto +import dev.adriankuta.kahootquiz.domain.models.Access +import dev.adriankuta.kahootquiz.domain.models.Channel +import dev.adriankuta.kahootquiz.domain.models.Choice +import dev.adriankuta.kahootquiz.domain.models.ChoiceRange +import dev.adriankuta.kahootquiz.domain.models.ContentTags +import dev.adriankuta.kahootquiz.domain.models.CoverMetadata +import dev.adriankuta.kahootquiz.domain.models.Crop +import dev.adriankuta.kahootquiz.domain.models.ExtractedColor +import dev.adriankuta.kahootquiz.domain.models.FeaturedListMembership +import dev.adriankuta.kahootquiz.domain.models.ImageMetadata +import dev.adriankuta.kahootquiz.domain.models.LanguageInfo +import dev.adriankuta.kahootquiz.domain.models.LastEdit +import dev.adriankuta.kahootquiz.domain.models.MediaItem +import dev.adriankuta.kahootquiz.domain.models.Metadata +import dev.adriankuta.kahootquiz.domain.models.Point +import dev.adriankuta.kahootquiz.domain.models.Question +import dev.adriankuta.kahootquiz.domain.models.Quiz +import dev.adriankuta.kahootquiz.domain.models.QuizId +import dev.adriankuta.kahootquiz.domain.models.VersionMetadata +import dev.adriankuta.kahootquiz.domain.models.Video import kotlin.time.Duration.Companion.milliseconds internal fun QuizResponseDto.toDomainModel(): Quiz = @@ -34,7 +71,7 @@ internal fun QuizResponseDto.toDomainModel(): Quiz = hasRestrictedContent = hasRestrictedContent, type = type, created = created, - modified = modified + modified = modified, ) private fun CoverMetadataDto.toDomain(): CoverMetadata = CoverMetadata( @@ -48,25 +85,25 @@ private fun CoverMetadataDto.toDomain(): CoverMetadata = CoverMetadata( height = height, extractedColors = extractedColors?.map { it.toDomain() }, blurhash = blurhash, - crop = crop?.toDomain() + crop = crop?.toDomain(), ) private fun ExtractedColorDto.toDomain(): ExtractedColor = ExtractedColor( swatch = swatch, - rgbHex = rgbHex + rgbHex = rgbHex, ) private fun CropDto.toDomain(): Crop = Crop( origin = origin?.toDomain(), target = target?.toDomain(), - circular = circular + circular = circular, ) private fun PointDto.toDomain(): Point = Point(x = x, y = y) private fun ContentTagsDto.toDomain(): ContentTags = ContentTags( curriculumCodes = curriculumCodes, - generatedCurriculumCodes = generatedCurriculumCodes + generatedCurriculumCodes = generatedCurriculumCodes, ) private fun MetadataDto.toDomain(): Metadata = Metadata( @@ -74,36 +111,36 @@ private fun MetadataDto.toDomain(): Metadata = Metadata( duplicationProtection = duplicationProtection, featuredListMemberships = featuredListMemberships?.map { it.toDomain() }, lastEdit = lastEdit?.toDomain(), - versionMetadata = versionMetadata?.toDomain() + versionMetadata = versionMetadata?.toDomain(), ) private fun AccessDto.toDomain(): Access = Access( groupRead = groupRead, folderGroupIds = folderGroupIds, - features = features + features = features, ) private fun FeaturedListMembershipDto.toDomain(): FeaturedListMembership = FeaturedListMembership( list = list, - addedAt = addedAt + addedAt = addedAt, ) private fun LastEditDto.toDomain(): LastEdit = LastEdit( editorUserId = editorUserId, editorUsername = editorUsername, - editTimestamp = editTimestamp + editTimestamp = editTimestamp, ) private fun VersionMetadataDto.toDomain(): VersionMetadata = VersionMetadata( version = version, created = created, - creator = creator + creator = creator, ) private fun LanguageInfoDto.toDomain(): LanguageInfo = LanguageInfo( language = language, lastUpdatedOn = lastUpdatedOn, - readAloudSupported = readAloudSupported + readAloudSupported = readAloudSupported, ) private fun ChannelDto.toDomain(): Channel = Channel(id = id) @@ -123,13 +160,13 @@ private fun QuestionDto.toDomain(): Question = Question( questionFormat = questionFormat, languageInfo = languageInfo?.toDomain(), media = media?.map { it.toDomain() }, - choiceRange = choiceRange?.toDomain() + choiceRange = choiceRange?.toDomain(), ) private fun ChoiceDto.toDomain(): Choice = Choice( answer = answer, correct = correct, - languageInfo = languageInfo?.toDomain() + languageInfo = languageInfo?.toDomain(), ) private fun VideoDto.toDomain(): Video = Video( @@ -137,7 +174,7 @@ private fun VideoDto.toDomain(): Video = Video( startTime = startTime, endTime = endTime, service = service, - fullUrl = fullUrl + fullUrl = fullUrl, ) private fun ImageMetadataDto.toDomain(): ImageMetadata = ImageMetadata( @@ -150,7 +187,7 @@ private fun ImageMetadataDto.toDomain(): ImageMetadata = ImageMetadata( width = width, height = height, effects = effects, - crop = crop?.toDomain() + crop = crop?.toDomain(), ) private fun MediaItemDto.toDomain(): MediaItem = MediaItem( @@ -165,7 +202,7 @@ private fun MediaItemDto.toDomain(): MediaItem = MediaItem( resources = resources, width = width, height = height, - crop = crop?.toDomain() + crop = crop?.toDomain(), ) private fun ChoiceRangeDto.toDomain(): ChoiceRange = ChoiceRange( @@ -173,5 +210,5 @@ private fun ChoiceRangeDto.toDomain(): ChoiceRange = ChoiceRange( end = end, step = step, correct = correct, - tolerance = tolerance + tolerance = tolerance, )