import 'package:hadi_hoda_flutter/core/constants/my_api.dart'; import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; import 'package:hadi_hoda_flutter/core/error_handler/my_exception.dart'; import 'package:hadi_hoda_flutter/core/network/http_request.dart'; import 'package:hadi_hoda_flutter/core/params/level_params.dart'; import 'package:hadi_hoda_flutter/core/response/base_response.dart'; import 'package:hadi_hoda_flutter/features/level/data/model/level_model.dart'; import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; import 'package:hive/hive.dart'; abstract class ILevelDatasource { Future> getLevels({required LevelParams params}); } /// Remote class RemoteLevelDatasourceImpl implements ILevelDatasource { final IHttpRequest httpRequest; const RemoteLevelDatasourceImpl(this.httpRequest); @override Future> getLevels({required LevelParams params}) async { final response = await httpRequest.get( path: MyApi.baseUrl, ); return BaseResponse.getDataList( response?['data'], (json) => LevelModel.fromJson(json), ); } } /// Local class LocalLevelDatasourceImpl implements ILevelDatasource { const LocalLevelDatasourceImpl(); @override Future> getLevels({required LevelParams params}) async { try { final Box levelBox = Hive.box(MyConstants.levelBox); return levelBox.values.toList(); } catch (_) { throw MyException(errorMessage: 'Operation Failed'); } } }