Data Layer

Overview

The Data Layer in the User module is responsible for implementing the repository interfaces defined in the domain layer. It handles the actual data operations, whether retrieving from local storage, communicating with APIs, or processing in-memory data.

Models

UserProfileModel

User profile model (lib/app/features/user/data/model/user_profile_model.dart):

  • Extends UserProfile entity with serialization capabilities

  • Implements toMap() for database storage: * Converts enum values to strings for storage * Formats DateTime to ISO 8601 string * Maps all fields to a database-friendly structure

  • Provides fromMap() factory for database retrieval: * Parses stored strings back to enum values * Converts ISO 8601 strings to DateTime objects * Creates new UserProfileModel with parsed data

  • Includes fromEntity() factory to convert domain entity to data model

UserTestResultLocalDataModel

Test result model (lib/app/features/user/data/model/user_test_result_local_data_model.dart):

  • Extends UserTestLocalDataResult with database serialization

  • Implements toMap() for creating database records: * Converts date to ISO 8601 string * Maps all fields to database columns

  • Provides fromMap() factory for database record conversion: * Parses date strings to DateTime * Maps database column names to model properties

  • Includes fromEntity() factory to convert domain entity to data model

Data Sources

UserProfileDataSource

Profile data source interface (lib/app/features/user/data/datasources/user_profle_data_soruce.dart):

  • Defines methods for user data operations: * getAllProfiles(): Retrieves all user profiles * getProfileByNickname(): Finds profile by nickname * saveProfile(): Saves new or updated profile * deleteProfileAndResultHistory(): Removes user data * getAllNicknames(): Gets list of existing nicknames * getAllUserId(): Gets list of user IDs * setCurrentProfile(): Sets active user profile * clearCurrentProfile(): Clears active profile * getCurrentProfile(): Gets current active profile

UserProfileDataSourceImpl

Implementation (lib/app/features/user/data/datasources/user_profle_data_soruce.dart):

  • Implements UserProfileDataSource interface using SQLite: * Uses UserDatabaseHelper for database operations * Creates and executes SQL queries for CRUD operations * Converts between database rows and data models * Uses LocalStorageServices for current user preferences

TestResultLocalDataSource

Test result data source interface (lib/app/features/user/data/datasources/test_result_data_soruce.dart):

  • Defines methods for test result operations: * getTestResultsByUserId(): Gets results for specific user * getTestResultsByNickname(): Gets results by user nickname * saveTestResult(): Stores new test result * isReferenceCodeUsed(): Checks for reference code duplicates

TestResultDataSourceImpl

Implementation (lib/app/features/user/data/datasources/test_result_data_soruce.dart):

  • Implements TestResultLocalDataSource interface: * Uses SQLite database for result storage * Creates SQL queries for test result operations * Converts between database records and model objects * Integrates with UserDatabaseHelper for database access

Repository Implementations

UserProfileRepositoryImpl

Implementation (lib/app/features/user/domain/repository/user_profile_repository.dart):

  • Implements UserProfileRepository interface: * Delegates database operations to data source * Converts between models and domain entities * Manages profile creation and updates * Handles current profile selection logic * Coordinates profile and test result deletion

TestResultLocalDataRepositoryImpl

Implementation (lib/app/features/user/domain/repository/test_result_local_data_repository.dart):

  • Implements TestResultLocalDataRepository interface: * Delegates database operations to data source * Converts between models and domain entities * Manages test result storage and retrieval * Performs reference code validation