chore: Move volume functions to provider layer for Hetzner

pull/213/head
NaiJi ✨ 2023-03-20 12:22:43 -03:00
parent 760d52e68a
commit dde6f7e80d
2 changed files with 140 additions and 40 deletions

View File

@ -11,7 +11,6 @@ import 'package:selfprivacy/logic/models/hive/server_details.dart';
import 'package:selfprivacy/logic/models/hive/user.dart'; import 'package:selfprivacy/logic/models/hive/user.dart';
import 'package:selfprivacy/logic/models/price.dart'; import 'package:selfprivacy/logic/models/price.dart';
import 'package:selfprivacy/logic/models/server_provider_location.dart'; import 'package:selfprivacy/logic/models/server_provider_location.dart';
import 'package:selfprivacy/utils/network_utils.dart';
import 'package:selfprivacy/utils/password_generator.dart'; import 'package:selfprivacy/utils/password_generator.dart';
class HetznerApi extends ServerProviderApi with VolumeProviderApi { class HetznerApi extends ServerProviderApi with VolumeProviderApi {
@ -129,9 +128,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
); );
} }
Future<GenericResult<ServerVolume?>> createVolume() async { Future<GenericResult> createVolume() async {
ServerVolume? volume;
Response? createVolumeResponse; Response? createVolumeResponse;
final Dio client = await getClient(); final Dio client = await getClient();
try { try {
@ -146,18 +143,6 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
'format': 'ext4' 'format': 'ext4'
}, },
); );
final volumeId = createVolumeResponse.data['volume']['id'];
final volumeSize = createVolumeResponse.data['volume']['size'];
final volumeServer = createVolumeResponse.data['volume']['server'];
final volumeName = createVolumeResponse.data['volume']['name'];
final volumeDevice = createVolumeResponse.data['volume']['linux_device'];
volume = ServerVolume(
id: volumeId,
name: volumeName,
sizeByte: volumeSize,
serverId: volumeServer,
linuxDevice: volumeDevice,
);
} catch (e) { } catch (e) {
print(e); print(e);
return GenericResult( return GenericResult(
@ -170,17 +155,17 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
} }
return GenericResult( return GenericResult(
data: volume, data: createVolumeResponse.data,
success: true, success: true,
code: createVolumeResponse.statusCode, code: createVolumeResponse.statusCode,
message: createVolumeResponse.statusMessage, message: createVolumeResponse.statusMessage,
); );
} }
Future<List<ServerVolume>> getVolumes({final String? status}) async { Future<GenericResult<List>> getVolumes({final String? status}) async {
final List<ServerVolume> volumes = []; List volumes = [];
final Response getVolumesResonse; Response? getVolumesResonse;
final Dio client = await getClient(); final Dio client = await getClient();
try { try {
getVolumesResonse = await client.get( getVolumesResonse = await client.get(
@ -189,29 +174,24 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
'status': status, 'status': status,
}, },
); );
final List<dynamic> rawVolumes = getVolumesResonse.data['volumes']; volumes = getVolumesResonse.data['volumes'];
for (final rawVolume in rawVolumes) {
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 volume = ServerVolume(
id: volumeId,
name: volumeName,
sizeByte: volumeSize,
serverId: volumeServer,
linuxDevice: volumeDevice,
);
volumes.add(volume);
}
} catch (e) { } catch (e) {
print(e); print(e);
return GenericResult(
data: [],
success: false,
message: e.toString(),
);
} finally { } finally {
client.close(); client.close();
} }
return volumes; return GenericResult(
data: volumes,
success: true,
code: getVolumesResonse.statusCode,
message: getVolumesResonse.statusMessage,
);
} }
Future<ServerVolume?> getVolume( Future<ServerVolume?> getVolume(
@ -244,7 +224,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
return volume; return volume;
} }
Future<GenericResult<void>> deleteVolume(final int volumeId) async { Future<GenericResult<bool>> deleteVolume(final int volumeId) async {
final Dio client = await getClient(); final Dio client = await getClient();
try { try {
await client.delete('/volumes/$volumeId'); await client.delete('/volumes/$volumeId');
@ -252,7 +232,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
print(e); print(e);
return GenericResult( return GenericResult(
success: false, success: false,
data: null, data: false,
message: e.toString(), message: e.toString(),
); );
} finally { } finally {
@ -261,7 +241,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
return GenericResult( return GenericResult(
success: true, success: true,
data: null, data: true,
); );
} }

View File

@ -631,4 +631,124 @@ class HetznerServerProvider extends ServerProvider {
data: null, data: null,
); );
} }
Future<GenericResult<ServerVolume?>> createVolume() async {
ServerVolume? volume;
final result = await _adapter.api().createVolume();
if (!result.success || result.data == null) {
return GenericResult(
data: null,
success: false,
message: result.message,
code: result.code,
);
}
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,
);
} catch (e) {
print(e);
return GenericResult(
data: null,
success: false,
message: e.toString(),
);
}
return GenericResult(
data: volume,
success: true,
code: result.code,
message: result.message,
);
}
Future<GenericResult<List<ServerVolume>>> getVolumes({
final String? status,
}) async {
final List<ServerVolume> volumes = [];
final result = await _adapter.api().getVolumes();
if (!result.success) {
return GenericResult(
data: [],
success: false,
message: result.message,
code: result.code,
);
}
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 volume = ServerVolume(
id: volumeId,
name: volumeName,
sizeByte: volumeSize,
serverId: volumeServer,
linuxDevice: volumeDevice,
);
volumes.add(volume);
}
} catch (e) {
return GenericResult(
data: [],
success: false,
message: e.toString(),
);
}
return GenericResult(
data: volumes,
success: true,
code: result.code,
message: result.message,
);
}
Future<GenericResult<void>> deleteVolume(final int volumeId) async =>
_adapter.api().deleteVolume(volumeId);
Future<GenericResult<bool>> attachVolume(
final ServerVolume volume,
final int serverId,
) async =>
_adapter.api().attachVolume(
volume,
serverId,
);
Future<GenericResult<bool>> detachVolume(
final int volumeId,
) async =>
_adapter.api().detachVolume(
volumeId,
);
Future<bool> resizeVolume(
final ServerVolume volume,
final DiskSize size,
) async =>
_adapter.api().resizeVolume(
volume,
size,
);
} }