diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/create_user/create_user.dart b/packages/shorebird_code_push_protocol/lib/src/messages/create_user/create_user.dart new file mode 100644 index 00000000..ab2dfd19 --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/create_user/create_user.dart @@ -0,0 +1 @@ +export 'create_user_request.dart'; diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/create_user/create_user_request.dart b/packages/shorebird_code_push_protocol/lib/src/messages/create_user/create_user_request.dart new file mode 100644 index 00000000..f9d0db5c --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/create_user/create_user_request.dart @@ -0,0 +1,27 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; + +part 'create_user_request.g.dart'; + +/// {@template create_user_request} +/// The request body for POST /api/v1/users, which creates a new User. +/// +/// Email is retrieved from the user's auth token. +/// {@endtemplate} +@JsonSerializable() +class CreateUserRequest { + /// {@macro create_user_request} + const CreateUserRequest({ + required this.name, + }); + + /// Converts a JSON object to a [CreateUserRequest]. + factory CreateUserRequest.fromJson(Json json) => + _$CreateUserRequestFromJson(json); + + /// Converts a [CreateUserRequest] to a JSON object. + Json toJson() => _$CreateUserRequestToJson(this); + + /// The new user's display name. + final String name; +} diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/create_user/create_user_request.g.dart b/packages/shorebird_code_push_protocol/lib/src/messages/create_user/create_user_request.g.dart new file mode 100644 index 00000000..0d47612b --- /dev/null +++ b/packages/shorebird_code_push_protocol/lib/src/messages/create_user/create_user_request.g.dart @@ -0,0 +1,26 @@ +// 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 'create_user_request.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +CreateUserRequest _$CreateUserRequestFromJson(Map json) => + $checkedCreate( + 'CreateUserRequest', + json, + ($checkedConvert) { + final val = CreateUserRequest( + name: $checkedConvert('name', (v) => v as String), + ); + return val; + }, + ); + +Map _$CreateUserRequestToJson(CreateUserRequest instance) => + { + 'name': instance.name, + }; 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 45fa22fe..dbc0aa6d 100644 --- a/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart +++ b/packages/shorebird_code_push_protocol/lib/src/messages/messages.dart @@ -7,4 +7,5 @@ export 'create_patch/create_patch.dart'; export 'create_payment_link/create_payment_link.dart'; export 'create_release/create_release.dart'; export 'create_release_artifact/create_release_artifact.dart'; +export 'create_user/create_user.dart'; export 'promote_patch/promote_patch.dart'; diff --git a/packages/shorebird_code_push_protocol/lib/src/models/user.dart b/packages/shorebird_code_push_protocol/lib/src/models/user.dart index bd3afa80..1fb29034 100644 --- a/packages/shorebird_code_push_protocol/lib/src/models/user.dart +++ b/packages/shorebird_code_push_protocol/lib/src/models/user.dart @@ -12,6 +12,7 @@ class User { required this.id, required this.email, this.hasActiveSubscription = false, + this.displayName, }); /// Converts a Map to a [User] @@ -26,6 +27,9 @@ class User { /// The user's email address, as provided by the user during signup. final String email; + /// The user's name, as provided by the user during signup. + final String? displayName; + /// Whether the user is currently a paying customer. final bool hasActiveSubscription; } diff --git a/packages/shorebird_code_push_protocol/lib/src/models/user.g.dart b/packages/shorebird_code_push_protocol/lib/src/models/user.g.dart index c997396a..f87781da 100644 --- a/packages/shorebird_code_push_protocol/lib/src/models/user.g.dart +++ b/packages/shorebird_code_push_protocol/lib/src/models/user.g.dart @@ -17,14 +17,19 @@ User _$UserFromJson(Map json) => $checkedCreate( email: $checkedConvert('email', (v) => v as String), hasActiveSubscription: $checkedConvert( 'has_active_subscription', (v) => v as bool? ?? false), + displayName: $checkedConvert('display_name', (v) => v as String?), ); return val; }, - fieldKeyMap: const {'hasActiveSubscription': 'has_active_subscription'}, + fieldKeyMap: const { + 'hasActiveSubscription': 'has_active_subscription', + 'displayName': 'display_name' + }, ); Map _$UserToJson(User instance) => { 'id': instance.id, 'email': instance.email, + 'display_name': instance.displayName, 'has_active_subscription': instance.hasActiveSubscription, }; diff --git a/packages/shorebird_code_push_protocol/test/src/messages/create_user/create_user_request_test.dart b/packages/shorebird_code_push_protocol/test/src/messages/create_user/create_user_request_test.dart new file mode 100644 index 00000000..c4453c36 --- /dev/null +++ b/packages/shorebird_code_push_protocol/test/src/messages/create_user/create_user_request_test.dart @@ -0,0 +1,14 @@ +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; +import 'package:test/test.dart'; + +void main() { + group(CreateUserRequest, () { + test('can be (de)serialized', () { + const request = CreateUserRequest(name: 'Joe Tester'); + expect( + CreateUserRequest.fromJson(request.toJson()).toJson(), + equals(request.toJson()), + ); + }); + }); +}