Line data Source code
1 : 2 : import 'dart:convert'; 3 : 4 : import 'package:flutter/material.dart'; 5 : import 'package:hive/hive.dart'; 6 : import 'package:http/http.dart'; 7 : import 'package:pal/src/database/adapter/helper_group_visit_entity_adapter.dart' as Adapter; 8 : import 'package:pal/src/database/entity/page_user_visit_entity.dart'; 9 : import 'package:pal/src/services/http_client/base_client.dart'; 10 : 11 : import '../../hive_client.dart'; 12 : import '../base_repository.dart'; 13 : 14 : 15 : abstract class HelperGroupUserVisitRepository { 16 : 17 : Future<List<HelperGroupUserVisitEntity>> get(String userId, String minAppVersion); 18 : 19 : Future<void> saveAll(List<HelperGroupUserVisitEntity> visits); 20 : 21 : Future<void> add(HelperGroupUserVisitEntity visit, {bool feedback, String inAppUserId}); 22 : 23 : Future<void> clear(); 24 : } 25 : 26 : /// [HelperGroupUserVisitHttpRepository] 27 : class HelperGroupUserVisitHttpRepository extends BaseHttpRepository implements HelperGroupUserVisitRepository { 28 : 29 : Adapter.HelperGroupUserVisitEntityAdapter _adapter = Adapter.HelperGroupUserVisitEntityAdapter(); 30 : 31 4 : HelperGroupUserVisitHttpRepository({@required HttpClient httpClient}) 32 4 : : super(httpClient: httpClient); 33 : 34 : 35 1 : Future<List<HelperGroupUserVisitEntity>> get(String userId, String minAppVersion) async { 36 1 : final Response response = await this 37 1 : .httpClient 38 2 : .get('client/visited-user-groups', headers: { 39 : 'appVersion': minAppVersion, 40 : 'inAppUserId': userId 41 : }); 42 3 : return _adapter.parseArray(response.body); 43 : } 44 : 45 : @override 46 0 : Future<void> saveAll(List<HelperGroupUserVisitEntity> visits) async { 47 0 : throw UnimplementedError(); 48 : } 49 : 50 0 : @override 51 : Future<void> clear() { 52 0 : throw UnimplementedError(); 53 : } 54 : 55 : @override 56 1 : Future<void> add(HelperGroupUserVisitEntity visit, {bool feedback, String inAppUserId}) async { 57 2 : var url = 'client/group/${visit.helperGroupId}/triggered'; 58 2 : var body = jsonEncode({'positiveFeedback': feedback}); 59 2 : await httpClient 60 2 : .put(url, body: body, headers: {"inAppUserId": inAppUserId}); 61 : } 62 : } 63 : 64 : /// [HelperGroupUserVisitLocalRepository] 65 : class HelperGroupUserVisitLocalRepository implements HelperGroupUserVisitRepository{ 66 : 67 : LocalDbOpener<HelperGroupUserVisitEntity> _hiveBoxOpener; 68 : 69 4 : HelperGroupUserVisitLocalRepository({@required LocalDbOpener<HelperGroupUserVisitEntity> hiveBoxOpener}) 70 : : _hiveBoxOpener = hiveBoxOpener; 71 : 72 2 : Future<List<HelperGroupUserVisitEntity>> get(String userId, String minAppVersion) 73 12 : => _hiveBoxOpener().then((res) => res.values.toList()); 74 : 75 2 : @override 76 : Future<void> saveAll(List<HelperGroupUserVisitEntity> visits) 77 10 : => _hiveBoxOpener().then((res) => res.addAll(visits)); 78 : 79 2 : @override 80 10 : Future<void> clear() => _hiveBoxOpener().then((res) => res.clear()); 81 : 82 1 : @override 83 : Future<void> add(HelperGroupUserVisitEntity visit, {bool feedback, String inAppUserId}) 84 5 : => _hiveBoxOpener().then((res) => res.add(visit)); 85 : 86 : }