diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart b/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart index 4d7220c5..8ac86d5a 100644 --- a/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart +++ b/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart @@ -12,3 +12,4 @@ export 'create_user/create_user.dart'; export 'get_release_artifacts/get_release_artifacts.dart'; export 'get_usage/get_usage.dart'; export 'promote_patch/promote_patch.dart'; +export 'update_release/update_release.dart'; diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/update_release/update_release.dart b/packages/shorebird_code_push_protocol/lib/src/messages/update_release/update_release.dart new file mode 100644 index 00000000..0d320c0a --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/update_release/update_release.dart @@ -0,0 +1 @@ +export 'update_release_request.dart'; diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/update_release/update_release_request.dart b/packages/shorebird_code_push_protocol/lib/src/messages/update_release/update_release_request.dart new file mode 100644 index 00000000..c92384c8 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/update_release/update_release_request.dart @@ -0,0 +1,29 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; + +part 'update_release_request.g.dart'; + +/// {@template update_release_request} +/// Request body for PUT `api/v1/release/:id` requests. +/// {@endtemplate} +@JsonSerializable() +class UpdateReleaseRequest { + /// {@macro update_release_request} + const UpdateReleaseRequest({ + required this.status, + required this.platform, + }); + + /// Converts a Map to a [UpdateReleaseRequest]. + factory UpdateReleaseRequest.fromJson(Json json) => + _$UpdateReleaseRequestFromJson(json); + + /// Converts a [UpdateReleaseRequest] to a Map. + Json toJson() => _$UpdateReleaseRequestToJson(this); + + /// The desired status of the release. + final ReleaseStatus status; + + /// The platform of the release. + final String platform; +} diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/update_release/update_release_request.g.dart b/packages/shorebird_code_push_protocol/lib/src/messages/update_release/update_release_request.g.dart new file mode 100644 index 00000000..125949bf --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/update_release/update_release_request.g.dart @@ -0,0 +1,36 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: implicit_dynamic_parameter, require_trailing_commas, cast_nullable_to_non_nullable, lines_longer_than_80_chars + +part of 'update_release_request.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +UpdateReleaseRequest _$UpdateReleaseRequestFromJson( + Map json) => + $checkedCreate( + 'UpdateReleaseRequest', + json, + ($checkedConvert) { + final val = UpdateReleaseRequest( + status: $checkedConvert( + 'status', (v) => $enumDecode(_$ReleaseStatusEnumMap, v)), + platform: $checkedConvert('platform', (v) => v as String), + ); + return val; + }, + ); + +Map _$UpdateReleaseRequestToJson( + UpdateReleaseRequest instance) => + { + 'status': _$ReleaseStatusEnumMap[instance.status]!, + 'platform': instance.platform, + }; + +const _$ReleaseStatusEnumMap = { + ReleaseStatus.draft: 'draft', + ReleaseStatus.active: 'active', +}; diff --git a/packages/shorebird_code_push_protocol/lib/src/models/models.dart b/packages/shorebird_code_push_protocol/lib/src/models/models.dart index d7564d1b..1b78e2d6 100644 --- a/packages/shorebird_code_push_protocol/lib/src/models/models.dart +++ b/packages/shorebird_code_push_protocol/lib/src/models/models.dart @@ -7,6 +7,7 @@ export 'patch.dart'; export 'patch_artifact.dart'; export 'release.dart'; export 'release_artifact.dart'; +export 'release_status.dart'; export 'shorebird_plan.dart'; export 'subscription.dart'; export 'user.dart'; diff --git a/packages/shorebird_code_push_protocol/lib/src/models/release_status.dart b/packages/shorebird_code_push_protocol/lib/src/models/release_status.dart new file mode 100644 index 00000000..2478a8b3 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/models/release_status.dart @@ -0,0 +1,13 @@ +/// The status of a release. +enum ReleaseStatus { + /// Indicates that the release has been created, but not all platform + /// artifacts have been uploaded. + draft, + + /// Indicates that all platform artifacts have been uploaded for this release. + active; + + /// Returns the [ReleaseStatus] with the given [name]. + factory ReleaseStatus.named(String name) => + ReleaseStatus.values.firstWhere((status) => status.name == name); +} diff --git a/packages/shorebird_code_push_protocol/test/src/messages/update_release/update_release_request_test.dart b/packages/shorebird_code_push_protocol/test/src/messages/update_release/update_release_request_test.dart new file mode 100644 index 00000000..f173b784 --- /dev/null +++ b/packages/shorebird_code_push_protocol/test/src/messages/update_release/update_release_request_test.dart @@ -0,0 +1,17 @@ +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; +import 'package:test/test.dart'; + +void main() { + group(UpdateReleaseRequest, () { + test('can be (de)serialized', () { + const request = UpdateReleaseRequest( + platform: 'android', + status: ReleaseStatus.active, + ); + expect( + UpdateReleaseRequest.fromJson(request.toJson()).toJson(), + equals(request.toJson()), + ); + }); + }); +} diff --git a/packages/shorebird_code_push_protocol/test/src/models/release_status_test.dart b/packages/shorebird_code_push_protocol/test/src/models/release_status_test.dart new file mode 100644 index 00000000..128d6f58 --- /dev/null +++ b/packages/shorebird_code_push_protocol/test/src/models/release_status_test.dart @@ -0,0 +1,11 @@ +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; +import 'package:test/test.dart'; + +void main() { + group(ReleaseStatus, () { + test('named allows lookup based on name', () { + expect(ReleaseStatus.named('draft'), equals(ReleaseStatus.draft)); + expect(ReleaseStatus.named('active'), equals(ReleaseStatus.active)); + }); + }); +}