Line data Source code
1 : import 'package:flutter/material.dart'; 2 : import 'package:pal/src/database/entity/helper/helper_group_entity.dart'; 3 : import 'package:pal/src/database/entity/helper/schema_entity.dart'; 4 : import 'package:pal/src/database/entity/page_user_visit_entity.dart'; 5 : import 'package:pal/src/database/repository/client/helper_repository.dart'; 6 : import 'package:pal/src/database/repository/client/page_user_visit_repository.dart'; 7 : import 'package:pal/src/database/repository/client/schema_repository.dart'; 8 : 9 : class HelperClientService { 10 : 11 3 : factory HelperClientService.build({ 12 : HelperGroupUserVisitRepository localVisitRepository, 13 : HelperGroupUserVisitRepository remoteVisitRepository, 14 : ClientSchemaRepository clientSchemaRepository, 15 : ClientHelperRepository helperRemoteRepository 16 3 : }) => _HelperClientService( 17 : clientSchemaRepository: clientSchemaRepository, 18 : helperRemoteRepository: helperRemoteRepository, 19 : localVisitRepository: localVisitRepository, 20 : remoteVisitRepository: remoteVisitRepository 21 : ); 22 : 23 0 : Future<HelperGroupEntity> getPageNextHelper(final String route, final String inAppUserId) => throw "not implemented"; 24 : 25 0 : Future onHelperTrigger(final String pageId, final HelperGroupEntity helperGroup, final String inAppUserId, final bool positiveFeedback) => throw "not implemented"; 26 : } 27 : 28 : class _HelperClientService implements HelperClientService { 29 : 30 : final ClientSchemaRepository _clientSchemaRepository; 31 : 32 : final ClientHelperRepository _helperRemoteRepository; 33 : 34 : final HelperGroupUserVisitRepository _localVisitRepository, _remoteVisitRepository; // ignore: unused_field 35 : 36 3 : _HelperClientService({ 37 : @required HelperGroupUserVisitRepository localVisitRepository, 38 : @required HelperGroupUserVisitRepository remoteVisitRepository, 39 : @required ClientSchemaRepository clientSchemaRepository, 40 : @required ClientHelperRepository helperRemoteRepository 41 : }) : this._clientSchemaRepository = clientSchemaRepository, 42 : this._localVisitRepository = localVisitRepository, 43 : this._remoteVisitRepository = remoteVisitRepository, 44 : this._helperRemoteRepository = helperRemoteRepository; 45 : 46 : @override 47 1 : Future<HelperGroupEntity> getPageNextHelper(String route, String inAppUserId) async { 48 3 : SchemaEntity currentSchema = await _clientSchemaRepository.get(); 49 3 : List<HelperGroupUserVisitEntity> userVisits = await _localVisitRepository.get(inAppUserId, null); 50 1 : List<HelperGroupEntity> group = currentSchema.groups 51 5 : .where((element) => element.page.route == route) 52 8 : .where((element) => userVisits.where((visit) => visit.helperGroupId == element.id).isEmpty) 53 1 : .toList(); 54 1 : if(group.isNotEmpty) { 55 6 : group.sort((a,b) => a.priority < b.priority ? -1 : 1); 56 1 : return group.last; 57 : } 58 : return null; 59 : } 60 : 61 : @override 62 1 : Future onHelperTrigger(String pageId, HelperGroupEntity helperGroup, String inAppUserId, bool positiveFeedback) async { 63 : try { 64 2 : var visit = HelperGroupUserVisitEntity(pageId: pageId, helperGroupId: helperGroup.id); 65 3 : await _remoteVisitRepository.add(visit, feedback: positiveFeedback, inAppUserId: inAppUserId); 66 3 : await _localVisitRepository.add(visit); // we only store locally that he already visited 67 : } catch(err) { 68 1 : print("error occured while sending visits"); 69 : } 70 : } 71 : 72 : }