|
| 1 | +/// The data within Firebase Remote Config update events. |
| 2 | +class ConfigUpdateData { |
| 3 | + const ConfigUpdateData({ |
| 4 | + required this.versionNumber, |
| 5 | + required this.updateTime, |
| 6 | + required this.updateUser, |
| 7 | + required this.description, |
| 8 | + required this.updateOrigin, |
| 9 | + required this.updateType, |
| 10 | + this.rollbackSource, |
| 11 | + }); |
| 12 | + |
| 13 | + /// Parses a ConfigUpdateData from JSON (CloudEvent data format). |
| 14 | + factory ConfigUpdateData.fromJson(Map<String, dynamic> json) { |
| 15 | + return ConfigUpdateData( |
| 16 | + versionNumber: json['versionNumber'] as num, |
| 17 | + updateTime: DateTime.parse(json['updateTime'] as String), |
| 18 | + updateUser: ConfigUser.fromJson( |
| 19 | + json['updateUser'] as Map<String, dynamic>, |
| 20 | + ), |
| 21 | + description: json['description'] as String? ?? '', |
| 22 | + updateOrigin: ConfigUpdateOrigin.fromValue( |
| 23 | + json['updateOrigin'] as String, |
| 24 | + ), |
| 25 | + updateType: ConfigUpdateType.fromValue(json['updateType'] as String), |
| 26 | + rollbackSource: json['rollbackSource'] as int?, |
| 27 | + ); |
| 28 | + } |
| 29 | + |
| 30 | + /// The version number of the version's corresponding Remote Config template. |
| 31 | + final num versionNumber; |
| 32 | + |
| 33 | + /// When the Remote Config template was written to the Remote Config server. |
| 34 | + final DateTime updateTime; |
| 35 | + |
| 36 | + /// Aggregation of all metadata fields about the account that performed |
| 37 | + /// the update. |
| 38 | + final ConfigUser updateUser; |
| 39 | + |
| 40 | + /// The user-provided description of the corresponding Remote Config template. |
| 41 | + final String description; |
| 42 | + |
| 43 | + /// Where the update action originated. |
| 44 | + final ConfigUpdateOrigin updateOrigin; |
| 45 | + |
| 46 | + /// What type of update was made. |
| 47 | + final ConfigUpdateType updateType; |
| 48 | + |
| 49 | + /// Only present if this version is the result of a rollback, and will be |
| 50 | + /// the version number of the Remote Config template that was rolled-back to. |
| 51 | + final int? rollbackSource; |
| 52 | + |
| 53 | + /// Converts this data to JSON. |
| 54 | + Map<String, dynamic> toJson() => <String, dynamic>{ |
| 55 | + 'versionNumber': versionNumber, |
| 56 | + 'updateTime': updateTime.toIso8601String(), |
| 57 | + 'updateUser': updateUser.toJson(), |
| 58 | + 'description': description, |
| 59 | + 'updateOrigin': updateOrigin.value, |
| 60 | + 'updateType': updateType.value, |
| 61 | + if (rollbackSource != null) 'rollbackSource': rollbackSource, |
| 62 | + }; |
| 63 | +} |
| 64 | + |
| 65 | +/// The person/service account that wrote a Remote Config template. |
| 66 | +class ConfigUser { |
| 67 | + const ConfigUser({ |
| 68 | + required this.name, |
| 69 | + required this.email, |
| 70 | + required this.imageUrl, |
| 71 | + }); |
| 72 | + |
| 73 | + /// Parses a ConfigUser from JSON. |
| 74 | + factory ConfigUser.fromJson(Map<String, dynamic> json) { |
| 75 | + return ConfigUser( |
| 76 | + name: json['name'] as String? ?? '', |
| 77 | + email: json['email'] as String? ?? '', |
| 78 | + imageUrl: json['imageUrl'] as String? ?? '', |
| 79 | + ); |
| 80 | + } |
| 81 | + |
| 82 | + /// Display name. |
| 83 | + final String name; |
| 84 | + |
| 85 | + /// Email address. |
| 86 | + final String email; |
| 87 | + |
| 88 | + /// Image URL. |
| 89 | + final String imageUrl; |
| 90 | + |
| 91 | + /// Converts this user to JSON. |
| 92 | + Map<String, dynamic> toJson() => <String, dynamic>{ |
| 93 | + 'name': name, |
| 94 | + 'email': email, |
| 95 | + 'imageUrl': imageUrl, |
| 96 | + }; |
| 97 | +} |
| 98 | + |
| 99 | +/// What type of update origin was associated with the Remote Config template |
| 100 | +/// version. |
| 101 | +enum ConfigUpdateOrigin { |
| 102 | + remoteConfigUpdateOriginUnspecified( |
| 103 | + 'REMOTE_CONFIG_UPDATE_ORIGIN_UNSPECIFIED', |
| 104 | + ), |
| 105 | + console('CONSOLE'), |
| 106 | + restApi('REST_API'), |
| 107 | + adminSdkNode('ADMIN_SDK_NODE'); |
| 108 | + |
| 109 | + const ConfigUpdateOrigin(this.value); |
| 110 | + |
| 111 | + /// The string value as sent in CloudEvents. |
| 112 | + final String value; |
| 113 | + |
| 114 | + /// Parses a ConfigUpdateOrigin from its string value. |
| 115 | + static ConfigUpdateOrigin fromValue(String value) { |
| 116 | + return ConfigUpdateOrigin.values.firstWhere( |
| 117 | + (e) => e.value == value, |
| 118 | + orElse: () => ConfigUpdateOrigin.remoteConfigUpdateOriginUnspecified, |
| 119 | + ); |
| 120 | + } |
| 121 | +} |
| 122 | + |
| 123 | +/// What type of update was associated with the Remote Config template version. |
| 124 | +enum ConfigUpdateType { |
| 125 | + remoteConfigUpdateTypeUnspecified('REMOTE_CONFIG_UPDATE_TYPE_UNSPECIFIED'), |
| 126 | + incrementalUpdate('INCREMENTAL_UPDATE'), |
| 127 | + forcedUpdate('FORCED_UPDATE'), |
| 128 | + rollback('ROLLBACK'); |
| 129 | + |
| 130 | + const ConfigUpdateType(this.value); |
| 131 | + |
| 132 | + /// The string value as sent in CloudEvents. |
| 133 | + final String value; |
| 134 | + |
| 135 | + /// Parses a ConfigUpdateType from its string value. |
| 136 | + static ConfigUpdateType fromValue(String value) { |
| 137 | + return ConfigUpdateType.values.firstWhere( |
| 138 | + (e) => e.value == value, |
| 139 | + orElse: () => ConfigUpdateType.remoteConfigUpdateTypeUnspecified, |
| 140 | + ); |
| 141 | + } |
| 142 | +} |
0 commit comments