From ffa13aee04d6f5e9a6acb813acabc1bd79200b60 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Tue, 6 Jun 2023 23:35:57 -0300 Subject: [PATCH] chore: Implement HetznerVolume model and use it instead dynamic json --- .../server_providers/hetzner/hetzner_api.dart | 6 ++-- .../models/json/hetzner_server_info.dart | 21 ++++++++++++ .../models/json/hetzner_server_info.g.dart | 18 ++++++++++ .../providers/server_providers/hetzner.dart | 33 ++++++++----------- 4 files changed, 57 insertions(+), 21 deletions(-) diff --git a/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart b/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart index 4fdd18da..abfc488b 100644 --- a/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart +++ b/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart @@ -131,8 +131,9 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi { ); } - Future createVolume() async { + Future> createVolume() async { Response? createVolumeResponse; + HetznerVolume? volume; final Dio client = await getClient(); try { createVolumeResponse = await client.post( @@ -146,6 +147,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi { 'format': 'ext4' }, ); + volume = HetznerVolume.fromJson(createVolumeResponse.data); } catch (e) { print(e); return GenericResult( @@ -158,7 +160,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi { } return GenericResult( - data: createVolumeResponse.data, + data: volume, success: true, code: createVolumeResponse.statusCode, message: createVolumeResponse.statusMessage, diff --git a/lib/logic/models/json/hetzner_server_info.dart b/lib/logic/models/json/hetzner_server_info.dart index 6e28f1cf..31d60509 100644 --- a/lib/logic/models/json/hetzner_server_info.dart +++ b/lib/logic/models/json/hetzner_server_info.dart @@ -113,3 +113,24 @@ class HetznerLocation { static HetznerLocation fromJson(final Map json) => _$HetznerLocationFromJson(json); } + +@JsonSerializable() +class HetznerVolume { + HetznerVolume( + this.id, + this.sizeByte, + this.serverId, + this.name, + this.linuxDevice, + ); + final int id; + final int sizeByte; + final int? serverId; + final String name; + + @JsonKey(name: 'linux_device') + final String? linuxDevice; + + static HetznerVolume fromJson(final Map json) => + _$HetznerVolumeFromJson(json); +} diff --git a/lib/logic/models/json/hetzner_server_info.g.dart b/lib/logic/models/json/hetzner_server_info.g.dart index 5201a1c5..7cc08abc 100644 --- a/lib/logic/models/json/hetzner_server_info.g.dart +++ b/lib/logic/models/json/hetzner_server_info.g.dart @@ -119,3 +119,21 @@ Map _$HetznerLocationToJson(HetznerLocation instance) => 'description': instance.description, 'network_zone': instance.zone, }; + +HetznerVolume _$HetznerVolumeFromJson(Map json) => + HetznerVolume( + json['id'] as int, + json['sizeByte'] as int, + json['serverId'] as int?, + json['name'] as String, + json['linux_device'] as String?, + ); + +Map _$HetznerVolumeToJson(HetznerVolume instance) => + { + 'id': instance.id, + 'sizeByte': instance.sizeByte, + 'serverId': instance.serverId, + 'name': instance.name, + 'linux_device': instance.linuxDevice, + }; diff --git a/lib/logic/providers/server_providers/hetzner.dart b/lib/logic/providers/server_providers/hetzner.dart index 7bacb8a2..fae15b5b 100644 --- a/lib/logic/providers/server_providers/hetzner.dart +++ b/lib/logic/providers/server_providers/hetzner.dart @@ -441,7 +441,7 @@ class HetznerServerProvider extends ServerProvider { ); } - final volume = volumeResult.data['volume']; + final volume = volumeResult.data!; final serverApiToken = StringGenerators.apiToken(); final hostname = getHostnameFromDomain( installationData.serverDomain.domainName, @@ -455,7 +455,7 @@ class HetznerServerProvider extends ServerProvider { dnsProviderType: dnsProviderToInfectName(installationData.dnsProviderType), hostName: hostname, - volumeId: volume['id'], + volumeId: volume.id, base64Password: base64.encode( utf8.encode(installationData.rootUser.password ?? 'PASS'), ), @@ -464,7 +464,7 @@ class HetznerServerProvider extends ServerProvider { ); if (!serverResult.success || serverResult.data == null) { - await _adapter.api().deleteVolume(volume['id']); + await _adapter.api().deleteVolume(volume.id); await Future.delayed(const Duration(seconds: 5)); if (serverResult.message != null && serverResult.message == 'uniqueness_error') { @@ -530,11 +530,11 @@ class HetznerServerProvider extends ServerProvider { ip4: serverResult.data['server']['public_net']['ipv4']['ip'], createTime: DateTime.now(), volume: ServerVolume( - id: volume['id'], - name: volume['name'], - sizeByte: volume['size'], - serverId: volume['server'], - linuxDevice: volume['linux_device'], + id: volume.id, + name: volume.name, + sizeByte: volume.sizeByte, + serverId: volume.serverId, + linuxDevice: volume.linuxDevice, ), apiToken: serverApiToken, provider: ServerProviderType.hetzner, @@ -564,7 +564,7 @@ class HetznerServerProvider extends ServerProvider { CallbackDialogueChoice( title: 'modals.try_again'.tr(), callback: () async { - await _adapter.api().deleteVolume(volume['id']); + await _adapter.api().deleteVolume(volume.id); await Future.delayed(const Duration(seconds: 5)); final deletion = await deleteServer(hostname); if (deletion.success) { @@ -673,17 +673,12 @@ class HetznerServerProvider extends ServerProvider { } try { - final volumeId = result.data['volume']['id']; - final volumeSize = result.data['volume']['size']; - final volumeServer = result.data['volume']['server']; - final volumeName = result.data['volume']['name']; - final volumeDevice = result.data['volume']['linux_device']; volume = ServerVolume( - id: volumeId, - name: volumeName, - sizeByte: volumeSize, - serverId: volumeServer, - linuxDevice: volumeDevice, + id: result.data!.id, + name: result.data!.name, + sizeByte: result.data!.sizeByte, + serverId: result.data!.serverId, + linuxDevice: result.data!.linuxDevice, ); } catch (e) { print(e);