selfprivacy.org.app/lib/logic/models/hive/server_details.dart

131 lines
2.9 KiB
Dart
Raw Normal View History

2021-01-06 17:35:57 +00:00
import 'package:hive/hive.dart';
2022-11-23 07:55:28 +00:00
import 'package:selfprivacy/logic/api_maps/graphql_maps/schema/schema.graphql.dart';
2021-01-06 17:35:57 +00:00
part 'server_details.g.dart';
@HiveType(typeId: 2)
class ServerHostingDetails {
ServerHostingDetails({
2021-03-15 15:39:44 +00:00
required this.ip4,
required this.id,
required this.createTime,
required this.volume,
2021-11-18 19:10:40 +00:00
required this.apiToken,
required this.provider,
this.serverLocation,
this.serverType,
2021-01-19 12:05:40 +00:00
this.startTime,
2021-01-06 17:35:57 +00:00
});
@HiveField(0)
2021-03-30 17:38:40 +00:00
final String ip4;
2021-01-06 17:35:57 +00:00
@HiveField(1)
2021-03-30 17:38:40 +00:00
final int id;
2021-01-06 17:35:57 +00:00
// TODO: Check if it is still needed
2021-01-21 21:01:42 +00:00
@HiveField(2)
2021-03-15 15:39:44 +00:00
final DateTime? startTime;
2021-01-21 21:01:42 +00:00
@HiveField(3)
final DateTime? createTime;
// TODO: Check if it is still needed
2021-03-30 17:38:40 +00:00
@HiveField(4)
final ServerProviderVolume volume;
2021-03-30 17:38:40 +00:00
2021-11-18 19:10:40 +00:00
@HiveField(5)
final String apiToken;
@HiveField(6, defaultValue: ServerProviderType.hetzner)
final ServerProviderType provider;
@HiveField(7)
final String? serverLocation;
@HiveField(8)
final String? serverType;
ServerHostingDetails copyWith({
final DateTime? startTime,
final String? serverLocation,
final String? serverType,
}) =>
2022-06-09 21:13:06 +00:00
ServerHostingDetails(
startTime: startTime ?? this.startTime,
serverLocation: serverLocation ?? this.serverLocation,
serverType: serverType ?? this.serverType,
2022-06-09 21:13:06 +00:00
createTime: createTime,
id: id,
ip4: ip4,
volume: volume,
apiToken: apiToken,
provider: provider,
);
2021-01-19 12:05:40 +00:00
2022-05-24 18:55:39 +00:00
@override
2021-01-06 17:35:57 +00:00
String toString() => id.toString();
}
2021-03-30 17:38:40 +00:00
@HiveType(typeId: 5)
class ServerProviderVolume {
ServerProviderVolume({
2021-03-30 17:38:40 +00:00
required this.id,
required this.name,
2022-06-28 18:06:52 +00:00
required this.sizeByte,
2022-06-27 07:07:11 +00:00
required this.serverId,
required this.linuxDevice,
this.uuid,
2021-03-30 17:38:40 +00:00
});
@HiveField(1)
int id;
@HiveField(2)
String name;
2022-06-28 18:06:52 +00:00
@HiveField(3, defaultValue: 10737418240) // 10 Gb
int sizeByte;
2022-06-27 07:07:11 +00:00
@HiveField(4, defaultValue: null)
int? serverId;
@HiveField(5, defaultValue: null)
String? linuxDevice;
@HiveField(6, defaultValue: null)
String? uuid;
2021-03-30 17:38:40 +00:00
}
@HiveType(typeId: 101)
enum ServerProviderType {
@HiveField(0)
2022-05-24 18:55:39 +00:00
unknown,
@HiveField(1)
2022-05-24 18:55:39 +00:00
hetzner,
@HiveField(2)
2022-11-23 07:55:28 +00:00
digitalOcean;
factory ServerProviderType.fromGraphQL(final Enum$ServerProvider provider) {
2022-11-23 07:55:28 +00:00
switch (provider) {
case Enum$ServerProvider.HETZNER:
return hetzner;
case Enum$ServerProvider.DIGITALOCEAN:
return digitalOcean;
default:
return unknown;
}
}
String get displayName => switch (this) {
digitalOcean => 'Digital Ocean',
hetzner => 'Hetzner Cloud',
unknown => 'Unknown',
};
String get supportArticle => switch (this) {
digitalOcean => 'how_digital_ocean',
hetzner => 'how_hetzner',
unknown => '',
};
}
extension ServerProviderTypeIsSpecified on ServerProviderType? {
bool get isSpecified => this != null && this != ServerProviderType.unknown;
}