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 : }