From 68811efc1e53630db014bbe2a079991ee36b8339 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Fri, 28 Oct 2022 12:17:08 +0400 Subject: [PATCH] refactor(server-api): Generalize and unify api response objects - Separate response success from business logic operation success - Remove ApiResponse, replace with GenericResult - Make GenericMutationResult inherit GenericResult - Add generic error message for when a response couldn't be sent or received --- assets/translations/en.json | 3 +- assets/translations/ru.json | 3 +- .../graphql_maps/server_api/jobs_api.dart | 6 +- .../graphql_maps/server_api/server.dart | 107 ++++++++---------- .../graphql_maps/server_api/services_api.dart | 44 ++++--- .../graphql_maps/server_api/users_api.dart | 59 +++++----- .../graphql_maps/server_api/volume_api.dart | 24 ++-- lib/logic/cubit/devices/devices_cubit.dart | 6 +- .../recovery_key/recovery_key_cubit.dart | 4 +- .../server_installation_repository.dart | 26 ++--- .../cubit/server_jobs/server_jobs_cubit.dart | 14 ++- lib/logic/cubit/services/services_cubit.dart | 14 ++- lib/logic/cubit/users/users_cubit.dart | 35 +++--- 13 files changed, 182 insertions(+), 163 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index c74e33e8..ddb5c541 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -419,7 +419,8 @@ "create_ssh_key": "Create SSH key for {}", "delete_ssh_key": "Delete SSH key for {}", "server_jobs": "Jobs on the server", - "reset_user_password": "Reset password of user" + "reset_user_password": "Reset password of user", + "generic_error": "Couldn't connect to the server!" }, "validations": { "required": "Required", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 704e5991..d2e298c2 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -420,7 +420,8 @@ "create_ssh_key": "Создать SSH ключ для {}", "delete_ssh_key": "Удалить SSH ключ для {}", "server_jobs": "Задачи на сервере", - "reset_user_password": "Сбросить пароль пользователя" + "reset_user_password": "Сбросить пароль пользователя", + "generic_error": "Не удалось подключиться к серверу!" }, "validations": { "required": "Обязательное поле", diff --git a/lib/logic/api_maps/graphql_maps/server_api/jobs_api.dart b/lib/logic/api_maps/graphql_maps/server_api/jobs_api.dart index 8d731e3e..67e8bcb3 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/jobs_api.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/jobs_api.dart @@ -22,20 +22,22 @@ mixin JobsApi on ApiMap { return jobsList; } - Future removeApiJob(final String uid) async { + Future> removeApiJob(final String uid) async { try { final GraphQLClient client = await getClient(); final variables = Variables$Mutation$RemoveJob(jobId: uid); final mutation = Options$Mutation$RemoveJob(variables: variables); final response = await client.mutate$RemoveJob(mutation); return GenericMutationResult( - success: response.parsedData?.removeJob.success ?? false, + data: response.parsedData?.removeJob.success ?? false, + success: true, code: response.parsedData?.removeJob.code ?? 0, message: response.parsedData?.removeJob.message, ); } catch (e) { print(e); return GenericMutationResult( + data: false, success: false, code: 0, message: e.toString(), diff --git a/lib/logic/api_maps/graphql_maps/server_api/server.dart b/lib/logic/api_maps/graphql_maps/server_api/server.dart index 31ee89fe..82aa24be 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/server.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/server.dart @@ -26,39 +26,28 @@ part 'services_api.dart'; part 'users_api.dart'; part 'volume_api.dart'; -class GenericMutationResult { - GenericMutationResult({ - required this.success, - required this.code, - this.message, - }); - final bool success; - final int code; - final String? message; -} - -class GenericJobMutationReturn extends GenericMutationResult { - GenericJobMutationReturn({ - required super.success, - required super.code, - super.message, - this.job, - }); - final ServerJob? job; -} - -@Deprecated( - 'Extend GenericMutationResult for mutations, return data for queries', -) -class ApiResponse { - ApiResponse({ +class GenericResult { + GenericResult({ required this.success, required this.data, this.message, }); + + /// Whether was a response successfully received, + /// doesn't represent success of the request if `data` is `bool` final bool success; final String? message; - final D data; + final T data; +} + +class GenericMutationResult extends GenericResult { + GenericMutationResult({ + required super.success, + required this.code, + required super.data, + super.message, + }); + final int code; } class ServerApi extends ApiMap @@ -196,7 +185,7 @@ class ServerApi extends ApiMap return settings; } - Future> getRecoveryTokenStatus() async { + Future> getRecoveryTokenStatus() async { RecoveryKeyStatus? key; QueryResult response; String? error; @@ -213,18 +202,18 @@ class ServerApi extends ApiMap print(e); } - return ApiResponse( + return GenericResult( success: error == null, data: key, message: error, ); } - Future> generateRecoveryToken( + Future> generateRecoveryToken( final DateTime? expirationDate, final int? numberOfUses, ) async { - ApiResponse key; + GenericResult key; QueryResult response; try { @@ -245,19 +234,19 @@ class ServerApi extends ApiMap ); if (response.hasException) { print(response.exception.toString()); - key = ApiResponse( + key = GenericResult( success: false, data: '', message: response.exception.toString(), ); } - key = ApiResponse( + key = GenericResult( success: true, data: response.parsedData!.getNewRecoveryApiKey.key!, ); } catch (e) { print(e); - key = ApiResponse( + key = GenericResult( success: false, data: '', message: e.toString(), @@ -297,8 +286,8 @@ class ServerApi extends ApiMap return dkim; } - Future>> getApiTokens() async { - ApiResponse> tokens; + Future>> getApiTokens() async { + GenericResult> tokens; QueryResult response; try { @@ -307,7 +296,7 @@ class ServerApi extends ApiMap if (response.hasException) { final message = response.exception.toString(); print(message); - tokens = ApiResponse>( + tokens = GenericResult>( success: false, data: [], message: message, @@ -321,13 +310,13 @@ class ServerApi extends ApiMap ApiToken.fromGraphQL(device), ) .toList(); - tokens = ApiResponse>( + tokens = GenericResult>( success: true, data: parsed, ); } catch (e) { print(e); - tokens = ApiResponse>( + tokens = GenericResult>( success: false, data: [], message: e.toString(), @@ -337,8 +326,8 @@ class ServerApi extends ApiMap return tokens; } - Future> deleteApiToken(final String name) async { - ApiResponse returnable; + Future> deleteApiToken(final String name) async { + GenericResult returnable; QueryResult response; try { @@ -355,19 +344,19 @@ class ServerApi extends ApiMap ); if (response.hasException) { print(response.exception.toString()); - returnable = ApiResponse( + returnable = GenericResult( success: false, data: null, message: response.exception.toString(), ); } - returnable = ApiResponse( + returnable = GenericResult( success: true, data: null, ); } catch (e) { print(e); - returnable = ApiResponse( + returnable = GenericResult( success: false, data: null, message: e.toString(), @@ -377,8 +366,8 @@ class ServerApi extends ApiMap return returnable; } - Future> createDeviceToken() async { - ApiResponse token; + Future> createDeviceToken() async { + GenericResult token; QueryResult response; try { @@ -390,19 +379,19 @@ class ServerApi extends ApiMap ); if (response.hasException) { print(response.exception.toString()); - token = ApiResponse( + token = GenericResult( success: false, data: '', message: response.exception.toString(), ); } - token = ApiResponse( + token = GenericResult( success: true, data: response.parsedData!.getNewDeviceApiKey.key!, ); } catch (e) { print(e); - token = ApiResponse( + token = GenericResult( success: false, data: '', message: e.toString(), @@ -414,10 +403,10 @@ class ServerApi extends ApiMap Future isHttpServerWorking() async => (await getApiVersion()) != null; - Future> authorizeDevice( + Future> authorizeDevice( final DeviceToken deviceToken, ) async { - ApiResponse token; + GenericResult token; QueryResult response; try { @@ -439,19 +428,19 @@ class ServerApi extends ApiMap ); if (response.hasException) { print(response.exception.toString()); - token = ApiResponse( + token = GenericResult( success: false, data: '', message: response.exception.toString(), ); } - token = ApiResponse( + token = GenericResult( success: true, data: response.parsedData!.authorizeWithNewDeviceApiKey.token!, ); } catch (e) { print(e); - token = ApiResponse( + token = GenericResult( success: false, data: '', message: e.toString(), @@ -461,10 +450,10 @@ class ServerApi extends ApiMap return token; } - Future> useRecoveryToken( + Future> useRecoveryToken( final DeviceToken deviceToken, ) async { - ApiResponse token; + GenericResult token; QueryResult response; try { @@ -486,19 +475,19 @@ class ServerApi extends ApiMap ); if (response.hasException) { print(response.exception.toString()); - token = ApiResponse( + token = GenericResult( success: false, data: '', message: response.exception.toString(), ); } - token = ApiResponse( + token = GenericResult( success: true, data: response.parsedData!.useRecoveryApiKey.token!, ); } catch (e) { print(e); - token = ApiResponse( + token = GenericResult( success: false, data: '', message: e.toString(), diff --git a/lib/logic/api_maps/graphql_maps/server_api/services_api.dart b/lib/logic/api_maps/graphql_maps/server_api/services_api.dart index 62a55e15..2ef0e2ca 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/services_api.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/services_api.dart @@ -20,20 +20,24 @@ mixin ServicesApi on ApiMap { return services; } - Future enableService(final String serviceId) async { + Future> enableService( + final String serviceId, + ) async { try { final GraphQLClient client = await getClient(); final variables = Variables$Mutation$EnableService(serviceId: serviceId); final mutation = Options$Mutation$EnableService(variables: variables); final response = await client.mutate$EnableService(mutation); return GenericMutationResult( - success: response.parsedData?.enableService.success ?? false, + data: response.parsedData?.enableService.success ?? false, + success: true, code: response.parsedData?.enableService.code ?? 0, message: response.parsedData?.enableService.message, ); } catch (e) { print(e); return GenericMutationResult( + data: false, success: false, code: 0, message: e.toString(), @@ -41,13 +45,16 @@ mixin ServicesApi on ApiMap { } } - Future disableService(final String serviceId) async { + Future> disableService( + final String serviceId, + ) async { try { final GraphQLClient client = await getClient(); final variables = Variables$Mutation$DisableService(serviceId: serviceId); final mutation = Options$Mutation$DisableService(variables: variables); final response = await client.mutate$DisableService(mutation); return GenericMutationResult( + data: null, success: response.parsedData?.disableService.success ?? false, code: response.parsedData?.disableService.code ?? 0, message: response.parsedData?.disableService.message, @@ -55,6 +62,7 @@ mixin ServicesApi on ApiMap { } catch (e) { print(e); return GenericMutationResult( + data: null, success: false, code: 0, message: e.toString(), @@ -62,20 +70,24 @@ mixin ServicesApi on ApiMap { } } - Future stopService(final String serviceId) async { + Future> stopService( + final String serviceId, + ) async { try { final GraphQLClient client = await getClient(); final variables = Variables$Mutation$StopService(serviceId: serviceId); final mutation = Options$Mutation$StopService(variables: variables); final response = await client.mutate$StopService(mutation); return GenericMutationResult( - success: response.parsedData?.stopService.success ?? false, + data: response.parsedData?.stopService.success ?? false, + success: true, code: response.parsedData?.stopService.code ?? 0, message: response.parsedData?.stopService.message, ); } catch (e) { print(e); return GenericMutationResult( + data: false, success: false, code: 0, message: e.toString(), @@ -90,6 +102,7 @@ mixin ServicesApi on ApiMap { final mutation = Options$Mutation$StartService(variables: variables); final response = await client.mutate$StartService(mutation); return GenericMutationResult( + data: null, success: response.parsedData?.startService.success ?? false, code: response.parsedData?.startService.code ?? 0, message: response.parsedData?.startService.message, @@ -97,6 +110,7 @@ mixin ServicesApi on ApiMap { } catch (e) { print(e); return GenericMutationResult( + data: null, success: false, code: 0, message: e.toString(), @@ -104,20 +118,24 @@ mixin ServicesApi on ApiMap { } } - Future restartService(final String serviceId) async { + Future> restartService( + final String serviceId, + ) async { try { final GraphQLClient client = await getClient(); final variables = Variables$Mutation$RestartService(serviceId: serviceId); final mutation = Options$Mutation$RestartService(variables: variables); final response = await client.mutate$RestartService(mutation); return GenericMutationResult( - success: response.parsedData?.restartService.success ?? false, + data: response.parsedData?.restartService.success ?? false, + success: true, code: response.parsedData?.restartService.code ?? 0, message: response.parsedData?.restartService.message, ); } catch (e) { print(e); return GenericMutationResult( + data: false, success: false, code: 0, message: e.toString(), @@ -125,7 +143,7 @@ mixin ServicesApi on ApiMap { } } - Future moveService( + Future> moveService( final String serviceId, final String destination, ) async { @@ -140,19 +158,19 @@ mixin ServicesApi on ApiMap { final mutation = Options$Mutation$MoveService(variables: variables); final response = await client.mutate$MoveService(mutation); final jobJson = response.parsedData?.moveService.job?.toJson(); - return GenericJobMutationReturn( - success: response.parsedData?.moveService.success ?? false, + return GenericMutationResult( + success: true, code: response.parsedData?.moveService.code ?? 0, message: response.parsedData?.moveService.message, - job: jobJson != null ? ServerJob.fromJson(jobJson) : null, + data: jobJson != null ? ServerJob.fromJson(jobJson) : null, ); } catch (e) { print(e); - return GenericJobMutationReturn( + return GenericMutationResult( success: false, code: 0, message: e.toString(), - job: null, + data: null, ); } } diff --git a/lib/logic/api_maps/graphql_maps/server_api/users_api.dart b/lib/logic/api_maps/graphql_maps/server_api/users_api.dart index 07da1083..bb46bfef 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/users_api.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/users_api.dart @@ -1,16 +1,5 @@ part of 'server.dart'; -class UserMutationResult extends GenericMutationResult { - UserMutationResult({ - required super.success, - required super.code, - super.message, - this.user, - }); - - final User? user; -} - mixin UsersApi on ApiMap { Future> getAllUsers() async { QueryResult response; @@ -56,7 +45,7 @@ mixin UsersApi on ApiMap { return user; } - Future createUser( + Future> createUser( final String username, final String password, ) async { @@ -67,25 +56,26 @@ mixin UsersApi on ApiMap { ); final mutation = Options$Mutation$CreateUser(variables: variables); final response = await client.mutate$CreateUser(mutation); - return UserMutationResult( - success: response.parsedData?.createUser.success ?? false, + return GenericMutationResult( + success: true, code: response.parsedData?.createUser.code ?? 500, message: response.parsedData?.createUser.message, - user: response.parsedData?.createUser.user != null + data: response.parsedData?.createUser.user != null ? User.fromGraphQL(response.parsedData!.createUser.user!) : null, ); } catch (e) { print(e); - return UserMutationResult( + return GenericMutationResult( success: false, code: 0, message: e.toString(), + data: null, ); } } - Future deleteUser( + Future> deleteUser( final String username, ) async { try { @@ -94,13 +84,15 @@ mixin UsersApi on ApiMap { final mutation = Options$Mutation$DeleteUser(variables: variables); final response = await client.mutate$DeleteUser(mutation); return GenericMutationResult( - success: response.parsedData?.deleteUser.success ?? false, + data: response.parsedData?.deleteUser.success ?? false, + success: true, code: response.parsedData?.deleteUser.code ?? 500, message: response.parsedData?.deleteUser.message, ); } catch (e) { print(e); return GenericMutationResult( + data: false, success: false, code: 500, message: e.toString(), @@ -108,7 +100,7 @@ mixin UsersApi on ApiMap { } } - Future updateUser( + Future> updateUser( final String username, final String password, ) async { @@ -119,17 +111,18 @@ mixin UsersApi on ApiMap { ); final mutation = Options$Mutation$UpdateUser(variables: variables); final response = await client.mutate$UpdateUser(mutation); - return UserMutationResult( - success: response.parsedData?.updateUser.success ?? false, + return GenericMutationResult( + success: true, code: response.parsedData?.updateUser.code ?? 500, message: response.parsedData?.updateUser.message, - user: response.parsedData?.updateUser.user != null + data: response.parsedData?.updateUser.user != null ? User.fromGraphQL(response.parsedData!.updateUser.user!) : null, ); } catch (e) { print(e); - return UserMutationResult( + return GenericMutationResult( + data: null, success: false, code: 0, message: e.toString(), @@ -137,7 +130,7 @@ mixin UsersApi on ApiMap { } } - Future addSshKey( + Future> addSshKey( final String username, final String sshKey, ) async { @@ -151,17 +144,18 @@ mixin UsersApi on ApiMap { ); final mutation = Options$Mutation$AddSshKey(variables: variables); final response = await client.mutate$AddSshKey(mutation); - return UserMutationResult( - success: response.parsedData?.addSshKey.success ?? false, + return GenericMutationResult( + success: true, code: response.parsedData?.addSshKey.code ?? 500, message: response.parsedData?.addSshKey.message, - user: response.parsedData?.addSshKey.user != null + data: response.parsedData?.addSshKey.user != null ? User.fromGraphQL(response.parsedData!.addSshKey.user!) : null, ); } catch (e) { print(e); - return UserMutationResult( + return GenericMutationResult( + data: null, success: false, code: 0, message: e.toString(), @@ -169,7 +163,7 @@ mixin UsersApi on ApiMap { } } - Future removeSshKey( + Future> removeSshKey( final String username, final String sshKey, ) async { @@ -183,17 +177,18 @@ mixin UsersApi on ApiMap { ); final mutation = Options$Mutation$RemoveSshKey(variables: variables); final response = await client.mutate$RemoveSshKey(mutation); - return UserMutationResult( + return GenericMutationResult( success: response.parsedData?.removeSshKey.success ?? false, code: response.parsedData?.removeSshKey.code ?? 500, message: response.parsedData?.removeSshKey.message, - user: response.parsedData?.removeSshKey.user != null + data: response.parsedData?.removeSshKey.user != null ? User.fromGraphQL(response.parsedData!.removeSshKey.user!) : null, ); } catch (e) { print(e); - return UserMutationResult( + return GenericMutationResult( + data: null, success: false, code: 0, message: e.toString(), diff --git a/lib/logic/api_maps/graphql_maps/server_api/volume_api.dart b/lib/logic/api_maps/graphql_maps/server_api/volume_api.dart index 160a78ca..70119f28 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/volume_api.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/volume_api.dart @@ -1,15 +1,5 @@ part of 'server.dart'; -class MigrateToBindsMutationReturn extends GenericMutationResult { - MigrateToBindsMutationReturn({ - required super.success, - required super.code, - super.message, - this.jobUid, - }); - final String? jobUid; -} - mixin VolumeApi on ApiMap { Future> getServerDiskVolumes() async { QueryResult response; @@ -67,10 +57,10 @@ mixin VolumeApi on ApiMap { } } - Future migrateToBinds( + Future> migrateToBinds( final Map serviceToDisk, ) async { - MigrateToBindsMutationReturn? mutation; + GenericMutationResult? mutation; try { final GraphQLClient client = await getClient(); @@ -88,19 +78,19 @@ mixin VolumeApi on ApiMap { await client.mutate$MigrateToBinds( migrateMutation, ); - mutation = mutation = MigrateToBindsMutationReturn( - success: result.parsedData!.migrateToBinds.success, + mutation = mutation = GenericMutationResult( + success: true, code: result.parsedData!.migrateToBinds.code, message: result.parsedData!.migrateToBinds.message, - jobUid: result.parsedData!.migrateToBinds.job?.uid, + data: result.parsedData!.migrateToBinds.job?.uid, ); } catch (e) { print(e); - mutation = MigrateToBindsMutationReturn( + mutation = GenericMutationResult( success: false, code: 0, message: e.toString(), - jobUid: null, + data: null, ); } diff --git a/lib/logic/cubit/devices/devices_cubit.dart b/lib/logic/cubit/devices/devices_cubit.dart index 3c552c23..065113f1 100644 --- a/lib/logic/cubit/devices/devices_cubit.dart +++ b/lib/logic/cubit/devices/devices_cubit.dart @@ -35,7 +35,7 @@ class ApiDevicesCubit } Future?> _getApiTokens() async { - final ApiResponse> response = await api.getApiTokens(); + final GenericResult> response = await api.getApiTokens(); if (response.success) { return response.data; } else { @@ -44,7 +44,7 @@ class ApiDevicesCubit } Future deleteDevice(final ApiToken device) async { - final ApiResponse response = await api.deleteApiToken(device.name); + final GenericResult response = await api.deleteApiToken(device.name); if (response.success) { emit( ApiDevicesState( @@ -59,7 +59,7 @@ class ApiDevicesCubit } Future getNewDeviceKey() async { - final ApiResponse response = await api.createDeviceToken(); + final GenericResult response = await api.createDeviceToken(); if (response.success) { return response.data; } else { diff --git a/lib/logic/cubit/recovery_key/recovery_key_cubit.dart b/lib/logic/cubit/recovery_key/recovery_key_cubit.dart index 90f5330d..875d419a 100644 --- a/lib/logic/cubit/recovery_key/recovery_key_cubit.dart +++ b/lib/logic/cubit/recovery_key/recovery_key_cubit.dart @@ -32,7 +32,7 @@ class RecoveryKeyCubit } Future _getRecoveryKeyStatus() async { - final ApiResponse response = + final GenericResult response = await api.getRecoveryTokenStatus(); if (response.success) { return response.data; @@ -57,7 +57,7 @@ class RecoveryKeyCubit final DateTime? expirationDate, final int? numberOfUses, }) async { - final ApiResponse response = + final GenericResult response = await api.generateRecoveryToken(expirationDate, numberOfUses); if (response.success) { refresh(); diff --git a/lib/logic/cubit/server_installation/server_installation_repository.dart b/lib/logic/cubit/server_installation/server_installation_repository.dart index e8a69988..4bd500fd 100644 --- a/lib/logic/cubit/server_installation/server_installation_repository.dart +++ b/lib/logic/cubit/server_installation/server_installation_repository.dart @@ -494,13 +494,13 @@ class ServerInstallationRepository { overrideDomain: serverDomain.domainName, ); final String serverIp = await getServerIpFromDomain(serverDomain); - final ApiResponse apiResponse = await serverApi.authorizeDevice( + final GenericResult result = await serverApi.authorizeDevice( DeviceToken(device: await getDeviceName(), token: newDeviceKey), ); - if (apiResponse.success) { + if (result.success) { return ServerHostingDetails( - apiToken: apiResponse.data, + apiToken: result.data, volume: ServerVolume( id: 0, name: '', @@ -517,7 +517,7 @@ class ServerInstallationRepository { } throw ServerAuthorizationException( - apiResponse.message ?? apiResponse.data, + result.message ?? result.data, ); } @@ -531,13 +531,13 @@ class ServerInstallationRepository { overrideDomain: serverDomain.domainName, ); final String serverIp = await getServerIpFromDomain(serverDomain); - final ApiResponse apiResponse = await serverApi.useRecoveryToken( + final GenericResult result = await serverApi.useRecoveryToken( DeviceToken(device: await getDeviceName(), token: recoveryKey), ); - if (apiResponse.success) { + if (result.success) { return ServerHostingDetails( - apiToken: apiResponse.data, + apiToken: result.data, volume: ServerVolume( id: 0, name: '', @@ -554,7 +554,7 @@ class ServerInstallationRepository { } throw ServerAuthorizationException( - apiResponse.message ?? apiResponse.data, + result.message ?? result.data, ); } @@ -592,15 +592,15 @@ class ServerInstallationRepository { ); } } - final ApiResponse deviceAuthKey = + final GenericResult deviceAuthKey = await serverApi.createDeviceToken(); - final ApiResponse apiResponse = await serverApi.authorizeDevice( + final GenericResult result = await serverApi.authorizeDevice( DeviceToken(device: await getDeviceName(), token: deviceAuthKey.data), ); - if (apiResponse.success) { + if (result.success) { return ServerHostingDetails( - apiToken: apiResponse.data, + apiToken: result.data, volume: ServerVolume( id: 0, name: '', @@ -617,7 +617,7 @@ class ServerInstallationRepository { } throw ServerAuthorizationException( - apiResponse.message ?? apiResponse.data, + result.message ?? result.data, ); } diff --git a/lib/logic/cubit/server_jobs/server_jobs_cubit.dart b/lib/logic/cubit/server_jobs/server_jobs_cubit.dart index 1e808956..fc102115 100644 --- a/lib/logic/cubit/server_jobs/server_jobs_cubit.dart +++ b/lib/logic/cubit/server_jobs/server_jobs_cubit.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:easy_localization/easy_localization.dart'; import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/server_api/server.dart'; import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart'; @@ -46,14 +47,14 @@ class ServerJobsCubit Future migrateToBinds(final Map serviceToDisk) async { final result = await api.migrateToBinds(serviceToDisk); - if (!result.success || result.jobUid == null) { + if (result.data == null) { getIt().showSnackBar(result.message!); return; } emit( ServerJobsState( - migrationJobUid: result.jobUid, + migrationJobUid: result.data, ), ); } @@ -75,7 +76,13 @@ class ServerJobsCubit Future removeServerJob(final String uid) async { final result = await api.removeApiJob(uid); if (!result.success) { - getIt().showSnackBar(result.message!); + getIt().showSnackBar('jobs.generic_error'.tr()); + return; + } + + if (!result.data) { + getIt() + .showSnackBar(result.message ?? 'jobs.generic_error'.tr()); return; } @@ -87,7 +94,6 @@ class ServerJobsCubit ], ), ); - print('removed job $uid'); } Future removeAllFinishedJobs() async { diff --git a/lib/logic/cubit/services/services_cubit.dart b/lib/logic/cubit/services/services_cubit.dart index 13d3e84d..f76c15a7 100644 --- a/lib/logic/cubit/services/services_cubit.dart +++ b/lib/logic/cubit/services/services_cubit.dart @@ -1,5 +1,7 @@ import 'dart:async'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/server_api/server.dart'; import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart'; import 'package:selfprivacy/logic/models/service.dart'; @@ -39,7 +41,17 @@ class ServicesCubit extends ServerInstallationDependendCubit { Future restart(final String serviceId) async { emit(state.copyWith(lockedServices: [...state.lockedServices, serviceId])); - await api.restartService(serviceId); + final result = await api.restartService(serviceId); + if (!result.success) { + getIt().showSnackBar('jobs.generic_error'.tr()); + return; + } + if (!result.data) { + getIt() + .showSnackBar(result.message ?? 'jobs.generic_error'.tr()); + return; + } + await Future.delayed(const Duration(seconds: 2)); reload(); await Future.delayed(const Duration(seconds: 10)); diff --git a/lib/logic/cubit/users/users_cubit.dart b/lib/logic/cubit/users/users_cubit.dart index 87abcffd..f31580fb 100644 --- a/lib/logic/cubit/users/users_cubit.dart +++ b/lib/logic/cubit/users/users_cubit.dart @@ -78,17 +78,16 @@ class UsersCubit extends ServerInstallationDependendCubit { return; } // If API returned error, do nothing - final UserMutationResult result = + final GenericMutationResult result = await api.createUser(user.login, password); - final User? createdUser = result.user; - if (!result.success || createdUser == null) { + if (result.data == null) { getIt() .showSnackBar(result.message ?? 'users.could_not_create_user'.tr()); return; } final List loadedUsers = List.from(state.users); - loadedUsers.add(createdUser); + loadedUsers.add(result.data!); await box.clear(); await box.addAll(loadedUsers); emit(state.copyWith(users: loadedUsers)); @@ -103,14 +102,20 @@ class UsersCubit extends ServerInstallationDependendCubit { } final List loadedUsers = List.from(state.users); final GenericMutationResult result = await api.deleteUser(user.login); - if (result.success) { + if (result.success && result.data) { loadedUsers.removeWhere((final User u) => u.login == user.login); await box.clear(); await box.addAll(loadedUsers); emit(state.copyWith(users: loadedUsers)); - } else { + } + + if (!result.success) { + getIt().showSnackBar('jobs.generic_error'.tr()); + } + + if (!result.data) { getIt() - .showSnackBar(result.message ?? 'users.could_not_delete_user'.tr()); + .showSnackBar(result.message ?? 'jobs.generic_error'.tr()); } } @@ -123,9 +128,9 @@ class UsersCubit extends ServerInstallationDependendCubit { .showSnackBar('users.could_not_change_password'.tr()); return; } - final UserMutationResult result = + final GenericMutationResult result = await api.updateUser(user.login, newPassword); - if (!result.success) { + if (result.data == null) { getIt().showSnackBar( result.message ?? 'users.could_not_change_password'.tr(), ); @@ -133,10 +138,10 @@ class UsersCubit extends ServerInstallationDependendCubit { } Future addSshKey(final User user, final String publicKey) async { - final UserMutationResult result = + final GenericMutationResult result = await api.addSshKey(user.login, publicKey); - if (result.success) { - final User updatedUser = result.user!; + if (result.data != null) { + final User updatedUser = result.data!; final int index = state.users.indexWhere((final User u) => u.login == user.login); await box.putAt(index, updatedUser); @@ -152,10 +157,10 @@ class UsersCubit extends ServerInstallationDependendCubit { } Future deleteSshKey(final User user, final String publicKey) async { - final UserMutationResult result = + final GenericMutationResult result = await api.removeSshKey(user.login, publicKey); - if (result.success) { - final User updatedUser = result.user!; + if (result.data != null) { + final User updatedUser = result.data!; final int index = state.users.indexWhere((final User u) => u.login == user.login); await box.putAt(index, updatedUser);