From 2a66d246c76a24c9a5fe963ccdbf46884413b12f Mon Sep 17 00:00:00 2001 From: NaiJi Date: Wed, 7 Jun 2023 00:03:34 -0300 Subject: [PATCH] chore: Replace dynamic blobs with HetznerServerType --- .../server_providers/hetzner/hetzner_api.dart | 48 ++++++++++--------- .../models/json/hetzner_server_info.dart | 20 +++++++- .../providers/server_providers/hetzner.dart | 32 ++++++------- 3 files changed, 60 insertions(+), 40 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 abfc488b..6cddfa22 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 @@ -147,7 +147,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi { 'format': 'ext4' }, ); - volume = HetznerVolume.fromJson(createVolumeResponse.data); + volume = HetznerVolume.fromJson(createVolumeResponse.data['volume']); } catch (e) { print(e); return GenericResult( @@ -167,8 +167,10 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi { ); } - Future> getVolumes({final String? status}) async { - List volumes = []; + Future>> getVolumes({ + final String? status, + }) async { + final List volumes = []; Response? getVolumesResonse; final Dio client = await getClient(); @@ -179,7 +181,9 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi { 'status': status, }, ); - volumes = getVolumesResonse.data['volumes']; + for (final volume in getVolumesResonse.data['volumes']) { + volumes.add(HetznerVolume.fromJson(volume)); + } } catch (e) { print(e); return GenericResult( @@ -199,34 +203,31 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi { ); } - Future getVolume( + Future> getVolume( final String volumeId, ) async { - ServerVolume? volume; + HetznerVolume? volume; final Response getVolumeResponse; final Dio client = await getClient(); try { getVolumeResponse = await client.get('/volumes/$volumeId'); - final int responseVolumeId = getVolumeResponse.data['volume']['id']; - final int volumeSize = getVolumeResponse.data['volume']['size']; - final int volumeServer = getVolumeResponse.data['volume']['server']; - final String volumeName = getVolumeResponse.data['volume']['name']; - final volumeDevice = getVolumeResponse.data['volume']['linux_device']; - volume = ServerVolume( - id: responseVolumeId, - name: volumeName, - sizeByte: volumeSize, - serverId: volumeServer, - linuxDevice: volumeDevice, - ); + volume = HetznerVolume.fromJson(getVolumeResponse.data['volume']); } catch (e) { print(e); + return GenericResult( + data: null, + success: false, + message: e.toString(), + ); } finally { client.close(); } - return volume; + return GenericResult( + data: volume, + success: true, + ); } Future> deleteVolume(final int volumeId) async { @@ -547,15 +548,18 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi { return GenericResult(success: true, data: locations); } - Future> getAvailableServerTypes() async { - List types = []; + Future>> + getAvailableServerTypes() async { + final List types = []; final Dio client = await getClient(); try { final Response response = await client.get( '/server_types', ); - types = response.data!['server_types']; + for (final type in response.data!['server_types']) { + types.add(HetznerServerTypeInfo.fromJson(type)); + } } catch (e) { print(e); return GenericResult( diff --git a/lib/logic/models/json/hetzner_server_info.dart b/lib/logic/models/json/hetzner_server_info.dart index 31d60509..96838b4e 100644 --- a/lib/logic/models/json/hetzner_server_info.dart +++ b/lib/logic/models/json/hetzner_server_info.dart @@ -72,11 +72,21 @@ enum ServerStatus { @JsonSerializable() class HetznerServerTypeInfo { - HetznerServerTypeInfo(this.cores, this.memory, this.disk, this.prices); + HetznerServerTypeInfo( + this.cores, + this.memory, + this.disk, + this.prices, + this.name, + this.description, + ); final int cores; final num memory; final int disk; + final String name; + final String description; + final List prices; static HetznerServerTypeInfo fromJson(final Map json) => @@ -85,7 +95,11 @@ class HetznerServerTypeInfo { @JsonSerializable() class HetznerPriceInfo { - HetznerPriceInfo(this.hourly, this.monthly); + HetznerPriceInfo( + this.hourly, + this.monthly, + this.location, + ); @JsonKey(name: 'price_hourly', fromJson: HetznerPriceInfo.getPrice) final double hourly; @@ -93,6 +107,8 @@ class HetznerPriceInfo { @JsonKey(name: 'price_monthly', fromJson: HetznerPriceInfo.getPrice) final double monthly; + final String location; + static HetznerPriceInfo fromJson(final Map json) => _$HetznerPriceInfoFromJson(json); diff --git a/lib/logic/providers/server_providers/hetzner.dart b/lib/logic/providers/server_providers/hetzner.dart index fae15b5b..ceec065f 100644 --- a/lib/logic/providers/server_providers/hetzner.dart +++ b/lib/logic/providers/server_providers/hetzner.dart @@ -150,19 +150,19 @@ class HetznerServerProvider extends ServerProvider { ); } - final List rawTypes = result.data; + final rawTypes = result.data; for (final rawType in rawTypes) { - for (final rawPrice in rawType['prices']) { - if (rawPrice['location'].toString() == location.identifier) { + for (final rawPrice in rawType.prices) { + if (rawPrice.location == location.identifier) { types.add( ServerType( - title: rawType['description'], - identifier: rawType['name'], - ram: rawType['memory'], - cores: rawType['cores'], - disk: DiskSize(byte: rawType['disk'] * 1024 * 1024 * 1024), + title: rawType.description, + identifier: rawType.name, + ram: rawType.memory.toDouble(), + cores: rawType.cores, + disk: DiskSize(byte: rawType.disk * 1024 * 1024 * 1024), price: Price( - value: double.parse(rawPrice['price_monthly']['gross']), + value: rawPrice.monthly, currency: 'EUR', ), location: location, @@ -532,7 +532,7 @@ class HetznerServerProvider extends ServerProvider { volume: ServerVolume( id: volume.id, name: volume.name, - sizeByte: volume.sizeByte, + sizeByte: volume.sizeByte * 1024 * 1024 * 1024, serverId: volume.serverId, linuxDevice: volume.linuxDevice, ), @@ -676,7 +676,7 @@ class HetznerServerProvider extends ServerProvider { volume = ServerVolume( id: result.data!.id, name: result.data!.name, - sizeByte: result.data!.sizeByte, + sizeByte: result.data!.sizeByte * 1024 * 1024 * 1024, serverId: result.data!.serverId, linuxDevice: result.data!.linuxDevice, ); @@ -716,11 +716,11 @@ class HetznerServerProvider extends ServerProvider { try { for (final rawVolume in result.data) { - final int volumeId = rawVolume['id']; - final int volumeSize = rawVolume['size'] * 1024 * 1024 * 1024; - final volumeServer = rawVolume['server']; - final String volumeName = rawVolume['name']; - final volumeDevice = rawVolume['linux_device']; + final int volumeId = rawVolume.id; + final int volumeSize = rawVolume.sizeByte * 1024 * 1024 * 1024; + final volumeServer = rawVolume.serverId; + final String volumeName = rawVolume.name; + final volumeDevice = rawVolume.linuxDevice; final volume = ServerVolume( id: volumeId, name: volumeName,