LCOV - code coverage report
Current view: top level - src/services/editor/helper - helper_editor_service.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 46 69 66.7 %
Date: 2020-12-04 18:41:24 Functions: 0 0 -

          Line data    Source code
       1             : import 'package:flutter/cupertino.dart';
       2             : import 'package:pal/src/database/entity/helper/helper_entity.dart';
       3             : import 'package:pal/src/database/entity/page_entity.dart';
       4             : import 'package:pal/src/database/entity/pageable.dart';
       5             : import 'package:pal/src/database/entity/version_entity.dart';
       6             : import 'package:pal/src/database/repository/editor/helper_editor_repository.dart';
       7             : import 'package:pal/src/database/repository/page_repository.dart';
       8             : import 'package:pal/src/database/repository/version_repository.dart';
       9             : import 'package:pal/src/injectors/editor_app/editor_app_context.dart';
      10             : import 'package:pal/src/services/editor/helper/helper_editor_models.dart';
      11             : 
      12             : import 'helper_editor_model_adapter.dart';
      13             : 
      14             : abstract class EditorHelperService {
      15             :   
      16           6 :   factory EditorHelperService.build(EditorAppContext appContext) =>
      17          24 :       _EditorHelperHttpService(appContext.helperRepository, appContext.pageRepository, appContext.versionRepository);
      18             : 
      19           1 :   factory EditorHelperService.fromDependencies(
      20             :       EditorHelperRepository _editorHelperRepository,
      21             :       VersionRepository _versionRepository,
      22             :       PageRepository _pageRepository
      23           1 :     ) => _EditorHelperHttpService(_editorHelperRepository, _pageRepository, _versionRepository);
      24             : 
      25             : 
      26             :   Future<Pageable<HelperEntity>> getPage(final String route, final int page, final int pageSize);
      27             : 
      28             :   /// saves a simple helper to our api
      29             :   /// providing [args.config.id] will makes an update
      30             :   Future<HelperEntity> saveSimpleHelper(final CreateSimpleHelper args);
      31             : 
      32             :   /// saves a fullscreen helper to our api
      33             :   /// providing [args.config.id] will makes an update
      34             :   Future<HelperEntity> saveFullScreenHelper(final CreateFullScreenHelper createArgs);
      35             : 
      36             :   /// saves an update helper to our api
      37             :   /// providing [args.config.id] will makes an update
      38             :   Future<HelperEntity> saveUpdateHelper(final CreateUpdateHelper createArgs);
      39             : 
      40             :   /// Change helperPriority
      41             :   /// Priority depends on Helper type
      42             :   /// => the lower it is, the most chance we gonna show it
      43             :   Future<void> updateHelperPriority(final String pageId, final Map<String, int> priority);
      44             : 
      45             :   /// Delete an helper, we won't let your recover it.
      46             :   /// For stats we keep it in our database / TODO make a force arg to remove it completely
      47             :   Future<void> deleteHelper(String pageId, String helperId);
      48             : }
      49             : 
      50             : class _EditorHelperHttpService implements EditorHelperService {
      51             : 
      52             :   final EditorHelperRepository _editorHelperRepository;
      53             :   final VersionRepository _versionRepository;
      54             :   final PageRepository _pageRepository;
      55             : 
      56           7 :   _EditorHelperHttpService(this._editorHelperRepository, this._pageRepository, this._versionRepository);
      57             : 
      58             :   @override
      59           1 :   Future<HelperEntity> saveSimpleHelper(final CreateSimpleHelper createArgs) async {
      60           4 :     var pageId = await _getOrCreatePageId(createArgs.config.route);
      61           4 :     var minVersionId = await _getOrCreateVersionId(createArgs.config.minVersion);
      62             :     int maxVersionId;
      63           5 :     if(createArgs.config.minVersion == createArgs.config.maxVersion) {
      64             :       maxVersionId = minVersionId;
      65           0 :     } else if (createArgs.config.maxVersion != null) {
      66           0 :       maxVersionId = await _getOrCreateVersionId(createArgs.config.maxVersion);
      67             :     }
      68           2 :     return createArgs.config.id != null
      69           3 :       ? _editorHelperRepository.updateHelper(pageId, HelperEditorAdapter.parseSimpleHelper(createArgs, minVersionId, maxVersionId))
      70           3 :       : _editorHelperRepository.createHelper(pageId, HelperEditorAdapter.parseSimpleHelper(createArgs, minVersionId, maxVersionId));
      71             :   }
      72             : 
      73             : 
      74             :   @override
      75           1 :   Future<HelperEntity> saveFullScreenHelper(CreateFullScreenHelper createArgs) async {
      76           5 :     if (createArgs.title == null || createArgs.description == null || createArgs.title.text.isEmpty)
      77             :       throw "TITLE_AND_DESCRIPTION_REQUIRED";
      78           4 :     var pageId = await _getOrCreatePageId(createArgs.config.route);
      79           4 :     var minVersionId = await _getOrCreateVersionId(createArgs.config.minVersion);
      80             :     int maxVersionId;
      81           5 :     if(createArgs.config.minVersion == createArgs.config.maxVersion) {
      82             :       maxVersionId = minVersionId;
      83           0 :     } else if (createArgs.config.maxVersion != null) {
      84           0 :       maxVersionId = await _getOrCreateVersionId(createArgs.config.maxVersion);
      85             :     }
      86           1 :     var helperEntity = HelperEditorAdapter.parseFullscreenHelper(createArgs, minVersionId, maxVersionId);
      87           6 :     helperEntity.helperTexts.removeWhere((element) => element.value == null || element.value.isEmpty);
      88           2 :     return createArgs.config.id != null
      89           2 :       ? _editorHelperRepository.updateHelper(pageId, helperEntity)
      90           2 :       : _editorHelperRepository.createHelper(pageId, helperEntity);
      91             :   }
      92             : 
      93             :   @override
      94           1 :   Future<HelperEntity> saveUpdateHelper(CreateUpdateHelper createArgs) async {
      95           4 :     var pageId = await _getOrCreatePageId(createArgs.config.route);
      96           4 :     var minVersionId = await _getOrCreateVersionId(createArgs.config.minVersion);
      97             :     int maxVersionId;
      98           5 :     if(createArgs.config.minVersion == createArgs.config.maxVersion) {
      99             :       maxVersionId = minVersionId;
     100           0 :     } else if (createArgs.config.maxVersion != null) {
     101           0 :       maxVersionId = await _getOrCreateVersionId(createArgs.config.maxVersion);
     102             :     }
     103           1 :     var helperEntity = HelperEditorAdapter.parseUpdateHelper(createArgs, minVersionId, maxVersionId);
     104           6 :     helperEntity.helperTexts.removeWhere((element) => element.value == null || element.value.isEmpty);
     105           2 :     return createArgs.config.id != null
     106           2 :       ? _editorHelperRepository.updateHelper(pageId, helperEntity)
     107           2 :       : _editorHelperRepository.createHelper(pageId, helperEntity);
     108             :   }
     109             : 
     110           0 :   @override
     111             :   Future<Pageable<HelperEntity>> getPage(String pageId, int page, int pageSize)
     112           0 :     => this._editorHelperRepository.getPage(pageId, page, pageSize);
     113             : 
     114           0 :   @override
     115             :   Future<void> updateHelperPriority(String pageId, Map<String, int> priority)
     116           0 :     => this._editorHelperRepository.updateHelperPriority(pageId, priority);
     117             : 
     118           0 :   @override
     119             :   Future<void> deleteHelper(String pageId, String helperId)
     120           0 :     => this._editorHelperRepository.deleteHelper(pageId, helperId);
     121             : 
     122             :   // ------------------------------------------------------------
     123             :   // PRIVATES
     124             :   // ------------------------------------------------------------
     125             : 
     126           1 :   Future<String> _getOrCreatePageId(String routeName) async {
     127           1 :     if (routeName == null || routeName.isEmpty) {
     128           0 :       throw PageCreationException(message: "EMPTY_ROUTE_PROVIDED");
     129             :     }
     130           3 :     PageEntity resPage = await this._pageRepository.getPage(routeName);
     131           3 :     if (resPage == null || resPage.id == null || resPage.id.isEmpty) {
     132           3 :       resPage = await this._pageRepository.createPage(
     133           1 :         PageEntity(route: routeName),
     134             :       );
     135             :     }
     136           4 :     if (resPage?.id != null && resPage.id.length > 0) {
     137           1 :       return resPage?.id;
     138             :     } else {
     139           0 :       throw PageCreationException();
     140             :     }
     141             :   }
     142             : 
     143           1 :   Future<int> _getOrCreateVersionId(String versionCode) async {
     144           1 :     if (versionCode == null || versionCode.isEmpty) {
     145             :       return 0;
     146             :     }
     147           3 :     VersionEntity resVersion = await this._versionRepository.getVersion(name: versionCode);
     148           1 :     if (resVersion == null || resVersion.id == null) {
     149           3 :       resVersion = await this._versionRepository.createVersion(
     150           1 :         VersionEntity(name: versionCode),
     151             :       );
     152             :     }
     153             :     if (resVersion != null) {
     154           1 :       return resVersion.id;
     155             :     } else {
     156           0 :       throw PageCreationException();
     157             :     }
     158             :   }
     159             : 
     160             : }
     161             : 
     162             : class PageCreationException implements Exception {
     163             :   final String message;
     164             : 
     165           0 :   PageCreationException({this.message});
     166             : 
     167           0 :   String toString() {
     168           0 :     if (message == null) return "PageCreationException";
     169           0 :     return "PageCreationException: $message";
     170             :   }
     171             : }
     172             : 
     173             : class VersionCreationException implements Exception {
     174             :   final String message;
     175             : 
     176           0 :   VersionCreationException({this.message});
     177             : 
     178           0 :   String toString() {
     179           0 :     if (message == null) return "VersionCreationException";
     180           0 :     return "VersionCreationException: $message";
     181             :   }
     182             : }

Generated by: LCOV version 1.14