From fd0678c1fdc42d16daec5c71d9a4d7fd6465d124 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot Date: Wed, 3 Sep 2025 12:45:53 +0200 Subject: [PATCH] feat: Expand domain models and implement full DTO to domain mapping This commit significantly expands the domain models to fully represent the quiz structure and implements the complete mapping logic in `QuizMapper` to convert `QuizResponseDto` and its nested DTOs to their corresponding domain models. Key changes: - **Domain Layer (`domain` module):** - Introduced a `QuizId` value class for type safety. - Added comprehensive domain models for all aspects of a quiz, including: - `Quiz`: Updated to include all fields from the DTO. - `Question`, `Choice`, `Video`, `ImageMetadata`, `MediaItem`, `ChoiceRange`: For question details. - `CoverMetadata`, `ExtractedColor`, `Crop`, `Point`: For cover image information. - `ContentTags`: For curriculum and generated codes. - `Metadata`, `Access`, `FeaturedListMembership`, `LastEdit`, `VersionMetadata`: For quiz metadata. - `LanguageInfo`, `Channel`: Common reusable models. - Organized domain models into separate files for better maintainability (e.g., `Question.kt`, `CoverMetadata.kt`). - Added a placeholder `QuestionModels.kt` to indicate that models were moved. - **Data Layer (`model:data` module):** - Implemented a complete `toDomainModel()` extension function in `QuizMapper.kt` to map all fields from `QuizResponseDto` and its nested DTOs (like `CoverMetadataDto`, `QuestionDto`, etc.) to the new domain models. - This includes mapping for lists and nullable fields. - **App Module (`app` module):** - Updated `MainActivity` to access `quizId.value` due to `QuizId` being a value class. - **Network Layer (`core:network` module):** - Changed `QuizResponseDto.uuid` to be non-nullable (`String`) as it's essential for mapping to `QuizId`. - Removed `QuizResponse.kt` as DTOs were previously split into individual files. --- .idea/deploymentTargetSelector.xml | 4 +- .idea/gradle.xml | 8 + .../dev/adriankuta/kahootquiz/MainActivity.kt | 2 +- .../core/network/models/QuizResponse.kt | 10 - .../core/network/models/QuizResponseDto.kt | 2 +- .../kahootquiz/domain/models/Access.kt | 9 + .../kahootquiz/domain/models/Channel.kt | 5 + .../kahootquiz/domain/models/Choice.kt | 7 + .../kahootquiz/domain/models/ChoiceRange.kt | 11 ++ .../kahootquiz/domain/models/ContentTags.kt | 8 + .../kahootquiz/domain/models/CoverMetadata.kt | 17 ++ .../kahootquiz/domain/models/Crop.kt | 9 + .../domain/models/ExtractedColor.kt | 8 + .../domain/models/FeaturedListMembership.kt | 8 + .../kahootquiz/domain/models/ImageMetadata.kt | 16 ++ .../kahootquiz/domain/models/LanguageInfo.kt | 9 + .../kahootquiz/domain/models/LastEdit.kt | 9 + .../kahootquiz/domain/models/MediaItem.kt | 18 ++ .../kahootquiz/domain/models/Metadata.kt | 11 ++ .../kahootquiz/domain/models/Point.kt | 8 + .../kahootquiz/domain/models/Question.kt | 23 +++ .../domain/models/QuestionModels.kt | 3 + .../kahootquiz/domain/models/Quiz.kt | 32 +++- .../kahootquiz/domain/models/QuizId.kt | 5 + .../domain/models/VersionMetadata.kt | 9 + .../kahootquiz/domain/models/Video.kt | 9 + .../model/data/mappers/QuizMapper.kt | 175 +++++++++++++++++- 27 files changed, 417 insertions(+), 18 deletions(-) delete mode 100644 core/network/src/main/kotlin/dev/adriankuta/kahootquiz/core/network/models/QuizResponse.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Access.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Channel.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Choice.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ChoiceRange.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ContentTags.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/CoverMetadata.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Crop.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ExtractedColor.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/FeaturedListMembership.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/ImageMetadata.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/LanguageInfo.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/LastEdit.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/MediaItem.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Metadata.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Point.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Question.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/QuestionModels.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/QuizId.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/VersionMetadata.kt create mode 100644 domain/src/main/kotlin/dev/adriankuta/kahootquiz/domain/models/Video.kt diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index 6f2bec6..f7e760c 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -4,10 +4,10 @@