Line data Source code
1 : import 'package:flutter/cupertino.dart'; 2 : import 'package:http/http.dart'; 3 : import 'package:pal/src/database/adapter/generic_adapter.dart'; 4 : import 'package:pal/src/database/entity/helper/schema_entity.dart'; 5 : import 'package:pal/src/database/repository/base_repository.dart'; 6 : import 'package:pal/src/services/http_client/base_client.dart'; 7 : import 'package:pal/src/database/adapter/schema_entity_adapter.dart' as Adapter; 8 : 9 : import '../../hive_client.dart'; 10 : 11 : abstract class ClientSchemaRepository { 12 : 13 : /// if [schemaVersion] is null returns the current schemaEntity 14 : /// if [schemaVersion] is provided and repository contains an upper version returns the current SchemaEntity 15 : /// if [schemaVersion] is provided and repository contains a lower or equal version returns nothing 16 : /// if [language] is null, returns the default language 17 : /// if [appVersion] must be provided, current application version in user pubspec.yml 18 : Future<SchemaEntity> get({int schemaVersion, String language, String appVersion}); 19 : 20 : } 21 : 22 : 23 : class ClientSchemaRemoteRepository extends BaseHttpRepository implements ClientSchemaRepository { 24 : 25 : GenericEntityAdapter<SchemaEntity> _adapter = Adapter.SchemaEntityAdapter(); 26 : 27 2 : ClientSchemaRemoteRepository({@required HttpClient httpClient}) 28 2 : : super(httpClient: httpClient); 29 : 30 : @override 31 0 : Future<SchemaEntity> get({int schemaVersion, String language, @required String appVersion}) async { 32 0 : final Response response = await this 33 0 : .httpClient 34 0 : .get('client/schema', headers: { 35 : 'appVersion': appVersion, 36 0 : 'schemaVersion': schemaVersion != null ? schemaVersion.toString() : '' 37 : }); 38 0 : if(response.body.isNotEmpty) { 39 0 : return this._adapter.parse(response.body); 40 : } 41 : return null; 42 : } 43 : 44 : } 45 : 46 : class ClientSchemaLocalRepository implements ClientSchemaRepository { 47 : 48 : final LocalDbOpener<SchemaEntity> _hiveBoxOpener; 49 : 50 4 : ClientSchemaLocalRepository({ LocalDbOpener<SchemaEntity> hiveBoxOpener}) 51 : : this._hiveBoxOpener = hiveBoxOpener; 52 : 53 : @override 54 2 : Future<SchemaEntity> get({int schemaVersion, String language, String appVersion}) async { 55 6 : var _hiveBox = await _hiveBoxOpener(); 56 2 : if(_hiveBox.isEmpty) 57 : return null; 58 4 : return _hiveBox.values.first; 59 : } 60 : 61 2 : Future<void> save(SchemaEntity schema) async { 62 6 : var _hiveBox = await _hiveBoxOpener(); 63 4 : await _hiveBox.clear(); 64 4 : await _hiveBox.add(schema); 65 : } 66 : 67 2 : Future<void> clear() async { 68 6 : var _hiveBox = await _hiveBoxOpener(); 69 4 : await _hiveBox.clear(); 70 : } 71 : 72 : }