diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 4232d15fd..b58b87f91 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -22,11 +22,11 @@ import 'package:tmail_ui_user/features/composer/domain/state/search_email_addres import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_addresses_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/search_email_address_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart'; +import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/constants/email_constants.dart'; +import 'package:tmail_ui_user/features/email/presentation/extensions/email_content_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/model/attachment_file.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; -import 'package:tmail_ui_user/features/email/presentation/extensions/email_content_extension.dart'; -import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/model/message_content.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:uuid/uuid.dart'; @@ -217,9 +217,7 @@ class ComposerController extends BaseController { final generateEmailId = EmailId(Id(_uuid.v1())); final outboxMailboxId = composerArguments.value!.mapMailboxId[PresentationMailbox.roleOutbox]; final listFromEmailAddress = { - EmailAddress( - composerArguments.value!.userProfile.getNameDisplay(), - composerArguments.value!.userProfile.getEmailAddress()) + EmailAddress(null, composerArguments.value!.userProfile.email) }; final generatePartId = PartId(_uuid.v1()); final generateBlobId = Id(_uuid.v1()); diff --git a/lib/features/composer/presentation/widgets/email_address_composer_widget_builder.dart b/lib/features/composer/presentation/widgets/email_address_composer_widget_builder.dart index 670dda8b6..f77493bdb 100644 --- a/lib/features/composer/presentation/widgets/email_address_composer_widget_builder.dart +++ b/lib/features/composer/presentation/widgets/email_address_composer_widget_builder.dart @@ -9,8 +9,8 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:model/model.dart'; -import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/prefix_email_address_extension.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; typedef OnOpenExpandAddressActionClick = void Function(); typedef OnSuggestionEmailAddress = Future> Function(String word); @@ -88,14 +88,10 @@ class EmailAddressComposerWidgetBuilder { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (_userProfile?.getFullName().isNotEmpty == true) - Text( - '${_userProfile?.getFullName()}', - style: TextStyle(fontWeight: FontWeight.w500, fontSize: 14, color: AppColor.nameUserColor)), - if (_userProfile?.getEmailAddress()?.isNotEmpty == true) - Text( - '<${_userProfile?.getEmailAddress()}>', - style: TextStyle(fontSize: 14, color: AppColor.nameUserColor)) + Text( + '<${_userProfile?.email}>', + style: TextStyle(fontSize: 14, color: AppColor.nameUserColor) + ) ], ) ) diff --git a/lib/features/login/data/datasource_impl/authentication_datasource_impl.dart b/lib/features/login/data/datasource_impl/authentication_datasource_impl.dart index bc40f8e1e..57796f5b3 100644 --- a/lib/features/login/data/datasource_impl/authentication_datasource_impl.dart +++ b/lib/features/login/data/datasource_impl/authentication_datasource_impl.dart @@ -1,20 +1,14 @@ import 'package:model/model.dart'; import 'package:tmail_ui_user/features/login/data/datasource/authentication_datasource.dart'; -import 'package:tmail_ui_user/features/login/data/network/login_api.dart'; class AuthenticationDataSourceImpl extends AuthenticationDataSource { - final LoginAPI loginAPI; - - AuthenticationDataSourceImpl(this.loginAPI); + AuthenticationDataSourceImpl(); @override Future authenticationUser(Uri baseUrl, UserName userName, Password password) { - return Future.sync(() async { - final userProfileResponse = await loginAPI.authenticationUser(baseUrl, AccountRequest(userName, password)); - return userProfileResponse.toUserProfile(); - }).catchError((error) { - throw error; + return Future.sync(() { + return UserProfile(userName.userName); }); } } \ No newline at end of file diff --git a/lib/features/login/data/network/login_api.dart b/lib/features/login/data/network/login_api.dart deleted file mode 100644 index 9282a5b0e..000000000 --- a/lib/features/login/data/network/login_api.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; - -import 'package:core/core.dart'; -import 'package:dio/dio.dart'; -import 'package:model/model.dart'; - -class LoginAPI { - final DioClient _dioClient; - - LoginAPI(this._dioClient); - - Future authenticationUser(Uri baseUrl, AccountRequest accountRequest) async { - final basicAuth = 'Basic ' + base64Encode(utf8.encode('${accountRequest.userName.userName}:${accountRequest.password.value}')); - final resultJson = await _dioClient.post( - Endpoint.authentication.generateAuthenticationUrl(baseUrl), - options: Options(headers: _buildHeaderRequestParam(basicAuth)), - data: accountRequest.toJson()); - return UserProfileResponse.fromJson(resultJson); - } - - Map _buildHeaderRequestParam(String authorizationHeader) { - final headerParam = _dioClient.getHeaders(); - headerParam[HttpHeaders.authorizationHeader] = authorizationHeader; - return headerParam; - } -} \ No newline at end of file diff --git a/lib/features/login/presentation/login_bindings.dart b/lib/features/login/presentation/login_bindings.dart index c0006e5bf..bc4c61fb7 100644 --- a/lib/features/login/presentation/login_bindings.dart +++ b/lib/features/login/presentation/login_bindings.dart @@ -3,7 +3,6 @@ import 'package:get/get.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:tmail_ui_user/features/login/data/datasource/authentication_datasource.dart'; import 'package:tmail_ui_user/features/login/data/datasource_impl/authentication_datasource_impl.dart'; -import 'package:tmail_ui_user/features/login/data/network/login_api.dart'; import 'package:tmail_ui_user/features/login/data/repository/authentication_repository_impl.dart'; import 'package:tmail_ui_user/features/login/data/repository/credential_repository_impl.dart'; import 'package:tmail_ui_user/features/login/domain/repository/authentication_repository.dart'; @@ -14,7 +13,7 @@ import 'package:tmail_ui_user/features/login/presentation/login_controller.dart' class LoginBindings extends Bindings { @override void dependencies() { - Get.lazyPut(() => AuthenticationDataSourceImpl(Get.find())); + Get.lazyPut(() => AuthenticationDataSourceImpl()); Get.lazyPut(() => Get.find()); Get.lazyPut(() => CredentialRepositoryImpl(Get.find())); diff --git a/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart b/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart index 395427b87..f99a7116e 100644 --- a/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart +++ b/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart @@ -42,21 +42,11 @@ class UserInformationWidgetBuilder { title: Transform( transform: Matrix4.translationValues(0.0, 0.0, 0.0), child: Text( - _userProfile != null ? _userProfile!.getNameDisplay() : '', + _userProfile != null ? _userProfile!.email : '', maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: 16, color: AppColor.nameUserColor, fontWeight: FontWeight.w500), )), - subtitle: (_userProfile != null && !_userProfile!.isUserEmpty()) - ? Transform( - transform: Matrix4.translationValues(0.0, 4.0, 0.0), - child: Text( - _userProfile!.getEmailAddress() ?? '', - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle(fontSize: 12, color: AppColor.emailUserColor, fontWeight: FontWeight.w500), - )) - : null, trailing: Transform( transform: Matrix4.translationValues(0.0, 0.0, 0.0), child: IconButton( diff --git a/lib/main/bindings/network/network_bindings.dart b/lib/main/bindings/network/network_bindings.dart index 397c32510..c3ccfe5ad 100644 --- a/lib/main/bindings/network/network_bindings.dart +++ b/lib/main/bindings/network/network_bindings.dart @@ -6,7 +6,6 @@ import 'package:flutter/foundation.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/http/http_client.dart' as JmapHttpClient; import 'package:tmail_ui_user/features/email/data/network/email_api.dart'; -import 'package:tmail_ui_user/features/login/data/network/login_api.dart'; import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart'; import 'package:tmail_ui_user/features/session/data/network/session_api.dart'; import 'package:tmail_ui_user/features/thread/data/network/thread_api.dart'; @@ -46,7 +45,6 @@ class NetworkBindings extends Bindings { void _bindingApi() { Get.put(DioClient(Get.find())); Get.put(JmapHttpClient.HttpClient(Get.find())); - Get.put(LoginAPI(Get.find())); Get.put(MailboxAPI(Get.find())); Get.put(SessionAPI(Get.find())); Get.put(ThreadAPI(Get.find())); diff --git a/model/lib/account/attribute.dart b/model/lib/account/attribute.dart deleted file mode 100644 index 84587132f..000000000 --- a/model/lib/account/attribute.dart +++ /dev/null @@ -1,9 +0,0 @@ -class Attribute { - static const id = '_id'; - static const firstname = 'firstname'; - static const lastname = 'lastname'; - static const job_title = 'job_title'; - static const building_location = 'building_location'; - static const office_location = 'office_location'; - static const main_phone = 'main_phone'; -} diff --git a/model/lib/account/presentation_account.dart b/model/lib/account/presentation_account.dart deleted file mode 100644 index efc6d76dc..000000000 --- a/model/lib/account/presentation_account.dart +++ /dev/null @@ -1,15 +0,0 @@ - -import 'package:equatable/equatable.dart'; -import 'package:model/account/account_type.dart'; -import 'package:model/email/presentation_email_address.dart'; - -class PresentationAccount with EquatableMixin { - final List emails; - final int preferredEmailIndex; - final AccountType type; - - PresentationAccount(this.emails, this.preferredEmailIndex, this.type); - - @override - List get props => [emails]; -} \ No newline at end of file diff --git a/model/lib/account/presentation_account_response.dart b/model/lib/account/presentation_account_response.dart deleted file mode 100644 index ff1f16f72..000000000 --- a/model/lib/account/presentation_account_response.dart +++ /dev/null @@ -1,29 +0,0 @@ - -import 'package:equatable/equatable.dart'; -import 'package:json_annotation/json_annotation.dart'; -import 'package:model/model.dart'; - -part 'presentation_account_response.g.dart'; - -@PresentationEmailAddressConverter() -@JsonSerializable() -class PresentationAccountResponse with EquatableMixin { - final List? emails; - final int preferredEmailIndex; - final AccountType type; - - PresentationAccountResponse(this.emails, this.preferredEmailIndex, this.type); - - factory PresentationAccountResponse.fromJson(Map json) => _$PresentationAccountResponseFromJson(json); - - Map toJson() => _$PresentationAccountResponseToJson(this); - - @override - List get props => [emails, preferredEmailIndex, type]; -} - -extension PresentationAccountResponseExtension on PresentationAccountResponse { - PresentationAccount toPresentationAccount() { - return PresentationAccount(emails ?? [], preferredEmailIndex, type); - } -} \ No newline at end of file diff --git a/model/lib/converter/avatar_id_converter.dart b/model/lib/converter/avatar_id_converter.dart deleted file mode 100644 index 6ffa0e262..000000000 --- a/model/lib/converter/avatar_id_converter.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:model/model.dart'; - -class AvatarIdConverter implements JsonConverter { - const AvatarIdConverter(); - - @override - AvatarId fromJson(String json) => AvatarId(json); - - @override - String toJson(AvatarId object) => object.id; -} diff --git a/model/lib/converter/avatar_id_nullable_converter.dart b/model/lib/converter/avatar_id_nullable_converter.dart deleted file mode 100644 index 7f250e44a..000000000 --- a/model/lib/converter/avatar_id_nullable_converter.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:model/model.dart'; - -class AvatarIdNullableConverter implements JsonConverter { - const AvatarIdNullableConverter(); - - @override - AvatarId? fromJson(String? json) => json != null ? AvatarId(json) : AvatarId.initial(); - - @override - String? toJson(AvatarId? object) => object?.id; -} diff --git a/model/lib/converter/presentation_email_address_converter.dart b/model/lib/converter/presentation_email_address_converter.dart deleted file mode 100644 index ec595aed0..000000000 --- a/model/lib/converter/presentation_email_address_converter.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:model/model.dart'; - -class PresentationEmailAddressConverter implements JsonConverter { - const PresentationEmailAddressConverter(); - - @override - PresentationEmailAddress fromJson(String json) => PresentationEmailAddress(json); - - @override - String toJson(PresentationEmailAddress object) => object.email; -} diff --git a/model/lib/converter/user_id_converter.dart b/model/lib/converter/user_id_converter.dart deleted file mode 100644 index 7eb5cd5ab..000000000 --- a/model/lib/converter/user_id_converter.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:model/model.dart'; - -class UserIdConverter implements JsonConverter { - const UserIdConverter(); - - @override - UserId fromJson(String json) => UserId(json); - - @override - String toJson(UserId object) => object.id; -} diff --git a/model/lib/extensions/presentation_account_extension.dart b/model/lib/extensions/presentation_account_extension.dart deleted file mode 100644 index 8c99aa5cb..000000000 --- a/model/lib/extensions/presentation_account_extension.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:model/model.dart'; - -extension PresentationAccountExtension on PresentationAccount { - PresentationAccountResponse toPresentationAccountResponse() { - return PresentationAccountResponse(emails, preferredEmailIndex, type); - } -} \ No newline at end of file diff --git a/model/lib/extensions/user_profile_extension.dart b/model/lib/extensions/user_profile_extension.dart index f891f2db8..b9f332d1a 100644 --- a/model/lib/extensions/user_profile_extension.dart +++ b/model/lib/extensions/user_profile_extension.dart @@ -2,19 +2,6 @@ import 'package:model/model.dart'; extension UserProfileExtension on UserProfile { UserProfileResponse toUserProfileResponse() { - return UserProfileResponse( - id, - firstName, - lastName, - jobTitle, - service, - buildingLocation, - officeLocation, - mainPhone, - description, - currentAvatar, - avatars, - accounts.map((account) => account.toPresentationAccountResponse()).toList() - ); + return UserProfileResponse(email); } } \ No newline at end of file diff --git a/model/lib/model.dart b/model/lib/model.dart index b33cc4ac9..ed401eef9 100644 --- a/model/lib/model.dart +++ b/model/lib/model.dart @@ -4,15 +4,10 @@ library model; export 'account/user_name.dart'; export 'account/password.dart'; export 'account/account_type.dart'; -export 'account/presentation_account.dart'; -export 'account/presentation_account_response.dart'; -export 'account/attribute.dart'; export 'account/account_request.dart'; // User -export 'user/user_id.dart'; export 'user/user_profile.dart'; -export 'user/avatar_id.dart'; export 'user/user_profile_response.dart'; // Mailbox @@ -35,14 +30,7 @@ export 'extensions/list_email_address_extension.dart'; export 'extensions/session_extension.dart'; export 'extensions/utc_date_extension.dart'; export 'extensions/email_extension.dart'; -export 'extensions/presentation_account_extension.dart'; export 'extensions/user_profile_extension.dart'; export 'extensions/presentation_email_extension.dart'; export 'extensions/keyword_identifier_extension.dart'; export 'extensions/presentation_mailbox_extension.dart'; - -// Converter -export 'converter/avatar_id_converter.dart'; -export 'converter/avatar_id_nullable_converter.dart'; -export 'converter/presentation_email_address_converter.dart'; -export 'converter/user_id_converter.dart'; \ No newline at end of file diff --git a/model/lib/user/user_id.dart b/model/lib/user/user_id.dart deleted file mode 100644 index 70bdf9d44..000000000 --- a/model/lib/user/user_id.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:equatable/equatable.dart'; - -class UserId with EquatableMixin { - final String id; - - UserId(this.id); - - @override - List get props => [id]; -} \ No newline at end of file diff --git a/model/lib/user/user_profile.dart b/model/lib/user/user_profile.dart index 5f3e4e36f..80609cd21 100644 --- a/model/lib/user/user_profile.dart +++ b/model/lib/user/user_profile.dart @@ -1,85 +1,15 @@ import 'package:equatable/equatable.dart'; -import 'package:model/account/account_type.dart'; -import 'package:model/account/presentation_account.dart'; -import 'package:model/user/avatar_id.dart'; -import 'package:model/user/user_id.dart'; class UserProfile with EquatableMixin { - final UserId id; - final String firstName; - final String lastName; - final String jobTitle; - final String service; - final String buildingLocation; - final String officeLocation; - final String mainPhone; - final String description; - final AvatarId currentAvatar; - final List avatars; - final List accounts; + final String email; - UserProfile( - this.id, - this.firstName, - this.lastName, - this.jobTitle, - this.service, - this.buildingLocation, - this.officeLocation, - this.mainPhone, - this.description, - this.currentAvatar, - this.avatars, - this.accounts, - ); - - String? getEmailAddress() { - try { - final accountEmail = accounts.firstWhere((account) => account.type == AccountType.email); - if (accountEmail.emails.isNotEmpty) { - final preferredEmailIndex = accountEmail.preferredEmailIndex < 0 ? 0 : accountEmail.preferredEmailIndex; - return accountEmail.emails[preferredEmailIndex].email; - } - return ''; - } catch(e) { - return ''; - } - } - - String getFullName() => '$firstName $lastName'; - - String getNameDisplay() { - if (getFullName().trim().isEmpty) { - return getEmailAddress() != null ? getEmailAddress()! : ''; - } - return getFullName(); - } - - bool isUserEmpty() => getFullName().trim().isEmpty || getEmailAddress() == null || getEmailAddress()!.isEmpty; + UserProfile(this.email); String getAvatarText() { - if (getFullName().trim().isNotEmpty) { - return getFullName().substring(0, 1).toUpperCase(); - } else if (getEmailAddress() != null && getEmailAddress()!.isNotEmpty) { - return getEmailAddress()![0].toUpperCase(); - } - return ''; + return email[0].toUpperCase(); } @override - List get props => [ - id, - firstName, - lastName, - jobTitle, - service, - buildingLocation, - officeLocation, - mainPhone, - description, - currentAvatar, - avatars, - accounts, - ]; + List get props => [email]; } \ No newline at end of file diff --git a/model/lib/user/user_profile_response.dart b/model/lib/user/user_profile_response.dart index dbba73f09..10f4842cb 100644 --- a/model/lib/user/user_profile_response.dart +++ b/model/lib/user/user_profile_response.dart @@ -4,80 +4,23 @@ import 'package:model/model.dart'; part 'user_profile_response.g.dart'; -@AvatarIdNullableConverter() -@AvatarIdConverter() -@UserIdConverter() @JsonSerializable() class UserProfileResponse with EquatableMixin { - @JsonKey(name: Attribute.id, includeIfNull: false) - final UserId id; - @JsonKey(name: Attribute.firstname, includeIfNull: false) - final String? firstName; - @JsonKey(name: Attribute.lastname, includeIfNull: false) - final String? lastName; - @JsonKey(name: Attribute.job_title, includeIfNull: false) - final String? jobTitle; - @JsonKey(includeIfNull: false) - final String? service; - @JsonKey(name: Attribute.building_location, includeIfNull: false) - final String? buildingLocation; - @JsonKey(name: Attribute.office_location, includeIfNull: false) - final String? officeLocation; - @JsonKey(name: Attribute.main_phone, includeIfNull: false) - final String? mainPhone; - @JsonKey(includeIfNull: false) - final String? description; - @JsonKey(includeIfNull: false) - final AvatarId? currentAvatar; - @JsonKey(includeIfNull: false) - final List? avatars; - @JsonKey(includeIfNull: false) - final List? accounts; + final String email; - UserProfileResponse( - this.id, - this.firstName, - this.lastName, - this.jobTitle, - this.service, - this.buildingLocation, - this.officeLocation, - this.mainPhone, - this.description, - this.currentAvatar, - this.avatars, - this.accounts - ); + UserProfileResponse(this.email); factory UserProfileResponse.fromJson(Map json) => _$UserProfileResponseFromJson(json); Map toJson() => _$UserProfileResponseToJson(this); @override - List get props => [ - id, - firstName, - lastName, - accounts, - ]; + List get props => [email]; } extension UserProfileResponseExtension on UserProfileResponse { UserProfile toUserProfile() { - return UserProfile( - id, - firstName ?? '', - lastName ?? '', - jobTitle ?? '', - service ?? '', - buildingLocation ?? '', - officeLocation ?? '', - mainPhone ?? '', - description ?? '', - currentAvatar ?? AvatarId.initial(), - avatars ?? [], - accounts != null ? accounts!.map((account) => account.toPresentationAccount()).toList() : [] - ); + return UserProfile(email); } } \ No newline at end of file