rename user detail

This commit is contained in:
appflowy 2021-09-04 16:53:58 +08:00
parent 36c044173d
commit 9771066d80
52 changed files with 513 additions and 512 deletions

View File

@ -35,8 +35,8 @@ class SignInBloc extends Bloc<SignInEvent, SignInState> {
final result = await authImpl.signIn(state.email, state.password);
yield result.fold(
(userDetail) => state.copyWith(
isSubmitting: false, successOrFail: some(left(userDetail))),
(UserProfile) => state.copyWith(
isSubmitting: false, successOrFail: some(left(UserProfile))),
(error) => stateFromCode(error),
);
}
@ -76,7 +76,7 @@ abstract class SignInState with _$SignInState {
required bool isSubmitting,
required Option<String> passwordError,
required Option<String> emailError,
required Option<Either<UserDetail, UserError>> successOrFail,
required Option<Either<UserProfile, UserError>> successOrFail,
}) = _SignInState;
factory SignInState.initial() => SignInState(

View File

@ -440,7 +440,7 @@ class _$SignInStateTearOff {
required bool isSubmitting,
required Option<String> passwordError,
required Option<String> emailError,
required Option<Either<UserDetail, UserError>> successOrFail}) {
required Option<Either<UserProfile, UserError>> successOrFail}) {
return _SignInState(
email: email,
password: password,
@ -462,7 +462,7 @@ mixin _$SignInState {
bool get isSubmitting => throw _privateConstructorUsedError;
Option<String> get passwordError => throw _privateConstructorUsedError;
Option<String> get emailError => throw _privateConstructorUsedError;
Option<Either<UserDetail, UserError>> get successOrFail =>
Option<Either<UserProfile, UserError>> get successOrFail =>
throw _privateConstructorUsedError;
@JsonKey(ignore: true)
@ -481,7 +481,7 @@ abstract class $SignInStateCopyWith<$Res> {
bool isSubmitting,
Option<String> passwordError,
Option<String> emailError,
Option<Either<UserDetail, UserError>> successOrFail});
Option<Either<UserProfile, UserError>> successOrFail});
}
/// @nodoc
@ -525,7 +525,7 @@ class _$SignInStateCopyWithImpl<$Res> implements $SignInStateCopyWith<$Res> {
successOrFail: successOrFail == freezed
? _value.successOrFail
: successOrFail // ignore: cast_nullable_to_non_nullable
as Option<Either<UserDetail, UserError>>,
as Option<Either<UserProfile, UserError>>,
));
}
}
@ -543,7 +543,7 @@ abstract class _$SignInStateCopyWith<$Res>
bool isSubmitting,
Option<String> passwordError,
Option<String> emailError,
Option<Either<UserDetail, UserError>> successOrFail});
Option<Either<UserProfile, UserError>> successOrFail});
}
/// @nodoc
@ -589,7 +589,7 @@ class __$SignInStateCopyWithImpl<$Res> extends _$SignInStateCopyWithImpl<$Res>
successOrFail: successOrFail == freezed
? _value.successOrFail
: successOrFail // ignore: cast_nullable_to_non_nullable
as Option<Either<UserDetail, UserError>>,
as Option<Either<UserProfile, UserError>>,
));
}
}
@ -616,7 +616,7 @@ class _$_SignInState implements _SignInState {
@override
final Option<String> emailError;
@override
final Option<Either<UserDetail, UserError>> successOrFail;
final Option<Either<UserProfile, UserError>> successOrFail;
@override
String toString() {
@ -669,7 +669,7 @@ abstract class _SignInState implements SignInState {
required bool isSubmitting,
required Option<String> passwordError,
required Option<String> emailError,
required Option<Either<UserDetail, UserError>> successOrFail}) =
required Option<Either<UserProfile, UserError>> successOrFail}) =
_$_SignInState;
@override
@ -683,7 +683,7 @@ abstract class _SignInState implements SignInState {
@override
Option<String> get emailError => throw _privateConstructorUsedError;
@override
Option<Either<UserDetail, UserError>> get successOrFail =>
Option<Either<UserProfile, UserError>> get successOrFail =>
throw _privateConstructorUsedError;
@override
@JsonKey(ignore: true)

View File

@ -3,15 +3,16 @@ import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart';
abstract class IAuth {
Future<Either<UserDetail, UserError>> signIn(String? email, String? password);
Future<Either<UserDetail, UserError>> signUp(
Future<Either<UserProfile, UserError>> signIn(
String? email, String? password);
Future<Either<UserProfile, UserError>> signUp(
String? name, String? password, String? email);
Future<Either<Unit, UserError>> signOut();
}
abstract class IAuthRouter {
void showWorkspaceSelectScreen(BuildContext context, UserDetail user);
void showWorkspaceSelectScreen(BuildContext context, UserProfile user);
void showSignUpScreen(BuildContext context);
void showForgetPasswordScreen(BuildContext context);
}

View File

@ -14,13 +14,13 @@ class AuthImpl extends IAuth {
});
@override
Future<Either<UserDetail, UserError>> signIn(
Future<Either<UserProfile, UserError>> signIn(
String? email, String? password) {
return repo.signIn(email: email, password: password);
}
@override
Future<Either<UserDetail, UserError>> signUp(
Future<Either<UserProfile, UserError>> signUp(
String? name, String? password, String? email) {
return repo.signUp(name: name, password: password, email: email);
}
@ -38,7 +38,7 @@ class AuthRouterImpl extends IAuthRouter {
}
@override
void showWorkspaceSelectScreen(BuildContext context, UserDetail user) {
void showWorkspaceSelectScreen(BuildContext context, UserProfile user) {
Navigator.of(context).push(
PageRoutes.fade(
() => WorkspaceSelectScreen(

View File

@ -3,7 +3,7 @@ import 'package:flowy_sdk/dispatch/dispatch.dart';
import 'package:flowy_sdk/protobuf/flowy-user/protobuf.dart';
class AuthRepository {
Future<Either<UserDetail, UserError>> signIn(
Future<Either<UserProfile, UserError>> signIn(
{required String? email, required String? password}) {
//
final request = SignInRequest.create()
@ -13,7 +13,7 @@ class AuthRepository {
return UserEventSignIn(request).send();
}
Future<Either<UserDetail, UserError>> signUp(
Future<Either<UserProfile, UserError>> signUp(
{required String? name,
required String? password,
required String? email}) {

View File

@ -6,7 +6,7 @@ import 'package:flowy_infra_ui/widget/rounded_button.dart';
import 'package:flowy_infra_ui/widget/rounded_input_field.dart';
import 'package:flowy_infra_ui/widget/spacing.dart';
import 'package:flowy_sdk/protobuf/flowy-user/errors.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_detail.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:dartz/dartz.dart';
@ -34,7 +34,7 @@ class SignInScreen extends StatelessWidget {
}
void _handleSuccessOrFail(
Either<UserDetail, UserError> result, BuildContext context) {
Either<UserProfile, UserError> result, BuildContext context) {
result.fold(
(user) => router.showWorkspaceSelectScreen(context, user),
(error) => _showErrorMessage(context, error.msg),

View File

@ -13,7 +13,7 @@ class WelcomeBloc extends Bloc<WelcomeEvent, WelcomeState> {
Stream<WelcomeState> mapEventToState(WelcomeEvent event) async* {
yield* event.map(
getUser: (val) async* {
final authState = await authImpl.currentUserDetail();
final authState = await authImpl.currentUserProfile();
yield state.copyWith(auth: authState);
},
);

View File

@ -4,7 +4,8 @@ part 'auth_state.freezed.dart';
@freezed
abstract class AuthState with _$AuthState {
const factory AuthState.authenticated(UserDetail userDetail) = Authenticated;
const factory AuthState.authenticated(UserProfile userProfile) =
Authenticated;
const factory AuthState.unauthenticated(UserError error) = Unauthenticated;
const factory AuthState.initial() = _Initial;
}

View File

@ -16,9 +16,9 @@ final _privateConstructorUsedError = UnsupportedError(
class _$AuthStateTearOff {
const _$AuthStateTearOff();
Authenticated authenticated(UserDetail userDetail) {
Authenticated authenticated(UserProfile userProfile) {
return Authenticated(
userDetail,
userProfile,
);
}
@ -40,14 +40,14 @@ const $AuthState = _$AuthStateTearOff();
mixin _$AuthState {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(UserDetail userDetail) authenticated,
required TResult Function(UserProfile userProfile) authenticated,
required TResult Function(UserError error) unauthenticated,
required TResult Function() initial,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(UserDetail userDetail)? authenticated,
TResult Function(UserProfile userProfile)? authenticated,
TResult Function(UserError error)? unauthenticated,
TResult Function()? initial,
required TResult orElse(),
@ -90,7 +90,7 @@ abstract class $AuthenticatedCopyWith<$Res> {
factory $AuthenticatedCopyWith(
Authenticated value, $Res Function(Authenticated) then) =
_$AuthenticatedCopyWithImpl<$Res>;
$Res call({UserDetail userDetail});
$Res call({UserProfile userProfile});
}
/// @nodoc
@ -105,13 +105,13 @@ class _$AuthenticatedCopyWithImpl<$Res> extends _$AuthStateCopyWithImpl<$Res>
@override
$Res call({
Object? userDetail = freezed,
Object? userProfile = freezed,
}) {
return _then(Authenticated(
userDetail == freezed
? _value.userDetail
: userDetail // ignore: cast_nullable_to_non_nullable
as UserDetail,
userProfile == freezed
? _value.userProfile
: userProfile // ignore: cast_nullable_to_non_nullable
as UserProfile,
));
}
}
@ -119,28 +119,28 @@ class _$AuthenticatedCopyWithImpl<$Res> extends _$AuthStateCopyWithImpl<$Res>
/// @nodoc
class _$Authenticated implements Authenticated {
const _$Authenticated(this.userDetail);
const _$Authenticated(this.userProfile);
@override
final UserDetail userDetail;
final UserProfile userProfile;
@override
String toString() {
return 'AuthState.authenticated(userDetail: $userDetail)';
return 'AuthState.authenticated(userProfile: $userProfile)';
}
@override
bool operator ==(dynamic other) {
return identical(this, other) ||
(other is Authenticated &&
(identical(other.userDetail, userDetail) ||
(identical(other.userProfile, userProfile) ||
const DeepCollectionEquality()
.equals(other.userDetail, userDetail)));
.equals(other.userProfile, userProfile)));
}
@override
int get hashCode =>
runtimeType.hashCode ^ const DeepCollectionEquality().hash(userDetail);
runtimeType.hashCode ^ const DeepCollectionEquality().hash(userProfile);
@JsonKey(ignore: true)
@override
@ -150,23 +150,23 @@ class _$Authenticated implements Authenticated {
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(UserDetail userDetail) authenticated,
required TResult Function(UserProfile userProfile) authenticated,
required TResult Function(UserError error) unauthenticated,
required TResult Function() initial,
}) {
return authenticated(userDetail);
return authenticated(userProfile);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(UserDetail userDetail)? authenticated,
TResult Function(UserProfile userProfile)? authenticated,
TResult Function(UserError error)? unauthenticated,
TResult Function()? initial,
required TResult orElse(),
}) {
if (authenticated != null) {
return authenticated(userDetail);
return authenticated(userProfile);
}
return orElse();
}
@ -197,9 +197,9 @@ class _$Authenticated implements Authenticated {
}
abstract class Authenticated implements AuthState {
const factory Authenticated(UserDetail userDetail) = _$Authenticated;
const factory Authenticated(UserProfile userProfile) = _$Authenticated;
UserDetail get userDetail => throw _privateConstructorUsedError;
UserProfile get userProfile => throw _privateConstructorUsedError;
@JsonKey(ignore: true)
$AuthenticatedCopyWith<Authenticated> get copyWith =>
throw _privateConstructorUsedError;
@ -269,7 +269,7 @@ class _$Unauthenticated implements Unauthenticated {
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(UserDetail userDetail) authenticated,
required TResult Function(UserProfile userProfile) authenticated,
required TResult Function(UserError error) unauthenticated,
required TResult Function() initial,
}) {
@ -279,7 +279,7 @@ class _$Unauthenticated implements Unauthenticated {
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(UserDetail userDetail)? authenticated,
TResult Function(UserProfile userProfile)? authenticated,
TResult Function(UserError error)? unauthenticated,
TResult Function()? initial,
required TResult orElse(),
@ -361,7 +361,7 @@ class _$_Initial implements _Initial {
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(UserDetail userDetail) authenticated,
required TResult Function(UserProfile userProfile) authenticated,
required TResult Function(UserError error) unauthenticated,
required TResult Function() initial,
}) {
@ -371,7 +371,7 @@ class _$_Initial implements _Initial {
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(UserDetail userDetail)? authenticated,
TResult Function(UserProfile userProfile)? authenticated,
TResult Function(UserError error)? unauthenticated,
TResult Function()? initial,
required TResult orElse(),

View File

@ -4,10 +4,10 @@ import 'package:flutter/widgets.dart';
import 'auth_state.dart';
abstract class IWelcomeAuth {
Future<AuthState> currentUserDetail();
Future<AuthState> currentUserProfile();
}
abstract class IWelcomeRoute {
Widget pushSignInScreen();
Future<void> pushHomeScreen(BuildContext context, UserDetail userDetail);
Future<void> pushHomeScreen(BuildContext context, UserProfile profile);
}

View File

@ -18,12 +18,12 @@ export 'package:app_flowy/welcome/domain/i_welcome.dart';
class WelcomeAuthImpl implements IWelcomeAuth {
@override
Future<AuthState> currentUserDetail() {
final result = UserEventGetStatus().send();
Future<AuthState> currentUserProfile() {
final result = UserEventGetUserProfile().send();
return result.then((result) {
return result.fold(
(userDetail) {
return AuthState.authenticated(userDetail);
(UserProfile) {
return AuthState.authenticated(UserProfile);
},
(userError) {
return AuthState.unauthenticated(userError);
@ -35,7 +35,7 @@ class WelcomeAuthImpl implements IWelcomeAuth {
class WelcomeRoute implements IWelcomeRoute {
@override
Future<void> pushHomeScreen(BuildContext context, UserDetail user) async {
Future<void> pushHomeScreen(BuildContext context, UserProfile user) async {
final repo = UserRepo(user: user);
return WorkspaceEventReadCurWorkspace().send().then(
(result) {

View File

@ -41,7 +41,7 @@ class WelcomeScreen extends StatelessWidget {
}
void _handleAuthenticated(BuildContext context, Authenticated result) {
getIt<IWelcomeRoute>().pushHomeScreen(context, result.userDetail);
getIt<IWelcomeRoute>().pushHomeScreen(context, result.userProfile);
}
void _handleUnauthenticated(BuildContext context, Unauthenticated result) {

View File

@ -1,5 +1,5 @@
import 'package:app_flowy/workspace/domain/i_user.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_detail.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/workspace_create.pb.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
@ -47,12 +47,12 @@ class MenuUserEvent with _$MenuUserEvent {
@freezed
class MenuUserState with _$MenuUserState {
const factory MenuUserState({
required UserDetail user,
required UserProfile user,
required Option<List<Workspace>> workspaces,
required Either<Unit, String> successOrFailure,
}) = _MenuUserState;
factory MenuUserState.initial(UserDetail user) => MenuUserState(
factory MenuUserState.initial(UserProfile user) => MenuUserState(
user: user,
workspaces: none(),
successOrFailure: left(unit),

View File

@ -249,7 +249,7 @@ class _$MenuUserStateTearOff {
const _$MenuUserStateTearOff();
_MenuUserState call(
{required UserDetail user,
{required UserProfile user,
required Option<List<Workspace>> workspaces,
required Either<Unit, String> successOrFailure}) {
return _MenuUserState(
@ -265,7 +265,7 @@ const $MenuUserState = _$MenuUserStateTearOff();
/// @nodoc
mixin _$MenuUserState {
UserDetail get user => throw _privateConstructorUsedError;
UserProfile get user => throw _privateConstructorUsedError;
Option<List<Workspace>> get workspaces => throw _privateConstructorUsedError;
Either<Unit, String> get successOrFailure =>
throw _privateConstructorUsedError;
@ -281,7 +281,7 @@ abstract class $MenuUserStateCopyWith<$Res> {
MenuUserState value, $Res Function(MenuUserState) then) =
_$MenuUserStateCopyWithImpl<$Res>;
$Res call(
{UserDetail user,
{UserProfile user,
Option<List<Workspace>> workspaces,
Either<Unit, String> successOrFailure});
}
@ -305,7 +305,7 @@ class _$MenuUserStateCopyWithImpl<$Res>
user: user == freezed
? _value.user
: user // ignore: cast_nullable_to_non_nullable
as UserDetail,
as UserProfile,
workspaces: workspaces == freezed
? _value.workspaces
: workspaces // ignore: cast_nullable_to_non_nullable
@ -326,7 +326,7 @@ abstract class _$MenuUserStateCopyWith<$Res>
__$MenuUserStateCopyWithImpl<$Res>;
@override
$Res call(
{UserDetail user,
{UserProfile user,
Option<List<Workspace>> workspaces,
Either<Unit, String> successOrFailure});
}
@ -352,7 +352,7 @@ class __$MenuUserStateCopyWithImpl<$Res>
user: user == freezed
? _value.user
: user // ignore: cast_nullable_to_non_nullable
as UserDetail,
as UserProfile,
workspaces: workspaces == freezed
? _value.workspaces
: workspaces // ignore: cast_nullable_to_non_nullable
@ -374,7 +374,7 @@ class _$_MenuUserState implements _MenuUserState {
required this.successOrFailure});
@override
final UserDetail user;
final UserProfile user;
@override
final Option<List<Workspace>> workspaces;
@override
@ -414,12 +414,12 @@ class _$_MenuUserState implements _MenuUserState {
abstract class _MenuUserState implements MenuUserState {
const factory _MenuUserState(
{required UserDetail user,
{required UserProfile user,
required Option<List<Workspace>> workspaces,
required Either<Unit, String> successOrFailure}) = _$_MenuUserState;
@override
UserDetail get user => throw _privateConstructorUsedError;
UserProfile get user => throw _privateConstructorUsedError;
@override
Option<List<Workspace>> get workspaces => throw _privateConstructorUsedError;
@override

View File

@ -1,12 +1,12 @@
import 'package:dartz/dartz.dart';
import 'package:flowy_sdk/protobuf/flowy-user/errors.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_detail.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/workspace_create.pb.dart';
export 'package:flowy_sdk/protobuf/flowy-workspace/workspace_create.pb.dart';
export 'package:flowy_sdk/protobuf/flowy-user/errors.pb.dart';
export 'package:flowy_sdk/protobuf/flowy-user/user_detail.pb.dart';
export 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
typedef UserCreateWorkspaceCallback = void Function(
Either<List<Workspace>, WorkspaceError> workspacesOrFailed);
@ -14,8 +14,8 @@ typedef UserDeleteWorkspaceCallback = void Function(
Either<List<Workspace>, WorkspaceError> workspacesOrFailed);
abstract class IUser {
UserDetail get user;
Future<Either<UserDetail, UserError>> fetchUserDetail(String userId);
UserProfile get user;
Future<Either<UserProfile, UserError>> fetchUserProfile(String userId);
Future<Either<List<Workspace>, WorkspaceError>> fetchWorkspaces();
Future<Either<Unit, WorkspaceError>> deleteWorkspace(String workspaceId);
Future<Either<Unit, UserError>> signOut();

View File

@ -18,7 +18,7 @@ import 'package:app_flowy/workspace/infrastructure/repos/doc_repo.dart';
import 'package:app_flowy/workspace/infrastructure/repos/view_repo.dart';
import 'package:app_flowy/workspace/infrastructure/repos/workspace_repo.dart';
import 'package:flowy_editor/flowy_editor.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_detail.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/view_create.pb.dart';
import 'package:get_it/get_it.dart';
@ -37,10 +37,10 @@ class HomeDepsResolver {
(appId, _) => IAppWatchImpl(repo: AppWatchRepository(appId: appId)));
//workspace
getIt.registerFactoryParam<IWorkspace, UserDetail, String>(
getIt.registerFactoryParam<IWorkspace, UserProfile, String>(
(user, workspaceId) => IWorkspaceImpl(
repo: WorkspaceRepo(user: user, workspaceId: workspaceId)));
getIt.registerFactoryParam<IWorkspaceWatch, UserDetail, String>(
getIt.registerFactoryParam<IWorkspaceWatch, UserProfile, String>(
(user, workspaceId) => IWorkspaceWatchImpl(
repo: WorkspaceWatchRepo(user: user, workspaceId: workspaceId)));
@ -55,20 +55,20 @@ class HomeDepsResolver {
(docId, _) => IDocImpl(repo: DocRepository(docId: docId)));
// User
getIt.registerFactoryParam<IUser, UserDetail, void>(
getIt.registerFactoryParam<IUser, UserProfile, void>(
(user, _) => IUserImpl(repo: UserRepo(user: user)));
getIt.registerFactoryParam<IUserWatch, UserDetail, void>(
getIt.registerFactoryParam<IUserWatch, UserProfile, void>(
(user, _) => IUserWatchImpl(repo: UserWatchRepo(user: user)));
//Menu Bloc
getIt.registerFactoryParam<MenuBloc, UserDetail, String>(
getIt.registerFactoryParam<MenuBloc, UserProfile, String>(
(user, workspaceId) =>
MenuBloc(getIt<IWorkspace>(param1: user, param2: workspaceId)));
getIt.registerFactoryParam<MenuWatchBloc, UserDetail, String>(
getIt.registerFactoryParam<MenuWatchBloc, UserProfile, String>(
(user, workspaceId) => MenuWatchBloc(
getIt<IWorkspaceWatch>(param1: user, param2: workspaceId)));
getIt.registerFactoryParam<MenuUserBloc, UserDetail, void>(
getIt.registerFactoryParam<MenuUserBloc, UserProfile, void>(
(user, _) => MenuUserBloc(getIt<IUser>(param1: user)));
//

View File

@ -17,8 +17,8 @@ class IUserImpl extends IUser {
}
@override
Future<Either<UserDetail, UserError>> fetchUserDetail(String userId) {
return repo.fetchUserDetail(userId: userId);
Future<Either<UserProfile, UserError>> fetchUserProfile(String userId) {
return repo.fetchUserProfile(userId: userId);
}
@override
@ -27,7 +27,7 @@ class IUserImpl extends IUser {
}
@override
UserDetail get user => repo.user;
UserProfile get user => repo.user;
@override
Future<Either<List<Workspace>, WorkspaceError>> fetchWorkspaces() {

View File

@ -4,7 +4,7 @@ import 'package:dartz/dartz.dart';
import 'package:flowy_sdk/dispatch/dispatch.dart';
import 'package:flowy_sdk/protobuf/flowy-observable/subject.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/errors.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_detail.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/observable.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/workspace_create.pb.dart';
@ -13,14 +13,14 @@ import 'package:flowy_sdk/rust_stream.dart';
import 'package:app_flowy/workspace/domain/i_user.dart';
class UserRepo {
final UserDetail user;
final UserProfile user;
UserRepo({
required this.user,
});
Future<Either<UserDetail, UserError>> fetchUserDetail(
Future<Either<UserProfile, UserError>> fetchUserProfile(
{required String userId}) {
return UserEventGetStatus().send();
return UserEventGetUserProfile().send();
}
Future<Either<Unit, WorkspaceError>> deleteWorkspace(
@ -73,7 +73,7 @@ class UserWatchRepo {
UserDeleteWorkspaceCallback? _deleteWorkspace;
late UserRepo _repo;
UserWatchRepo({
required UserDetail user,
required UserProfile user,
}) {
_repo = UserRepo(user: user);
}

View File

@ -4,7 +4,7 @@ import 'package:dartz/dartz.dart';
import 'package:flowy_infra/flowy_logger.dart';
import 'package:flowy_sdk/dispatch/dispatch.dart';
import 'package:flowy_sdk/protobuf/flowy-observable/subject.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_detail.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/app_create.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/observable.pb.dart';
@ -15,7 +15,7 @@ import 'package:flowy_sdk/rust_stream.dart';
import 'package:app_flowy/workspace/domain/i_workspace.dart';
class WorkspaceRepo {
UserDetail user;
UserProfile user;
String workspaceId;
WorkspaceRepo({
required this.user,
@ -64,7 +64,7 @@ class WorkspaceWatchRepo {
WorkspaceCreateAppCallback? _createApp;
WorkspaceDeleteAppCallback? _deleteApp;
WorkspaceUpdatedCallback? _update;
final UserDetail user;
final UserProfile user;
final String workspaceId;
late WorkspaceRepo _repo;

View File

@ -14,7 +14,7 @@ import 'home_layout.dart';
class HomeScreen extends StatelessWidget {
static GlobalKey<ScaffoldState> scaffoldKey = GlobalKey();
final UserDetail user;
final UserProfile user;
final String workspaceId;
const HomeScreen(this.user, this.workspaceId, {Key? key}) : super(key: key);

View File

@ -3,7 +3,7 @@ import 'package:app_flowy/workspace/presentation/widgets/menu/menu_top_bar.dart'
import 'package:dartz/dartz.dart';
import 'package:flowy_infra/size.dart';
import 'package:flowy_infra_ui/widget/error_page.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_detail.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-workspace/app_create.pb.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@ -22,7 +22,7 @@ import 'menu_list.dart';
class HomeMenu extends StatelessWidget {
final Function(HomeStackView?) pageContextChanged;
final Function(bool) isCollapseChanged;
final UserDetail user;
final UserProfile user;
final String workspaceId;
const HomeMenu({
@ -126,7 +126,7 @@ class MenuItemBuilder {
MenuItemBuilder();
MenuItemBuilder withUser(UserDetail user) {
MenuItemBuilder withUser(UserProfile user) {
items.add(MenuUser(user));
return this;
}

View File

@ -2,14 +2,14 @@ import 'package:app_flowy/startup/startup.dart';
import 'package:app_flowy/workspace/application/menu/menu_user_bloc.dart';
import 'package:app_flowy/workspace/presentation/widgets/menu/menu_list.dart';
import 'package:flowy_infra_ui/widget/spacing.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_detail.pb.dart';
import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flowy_infra_ui/style_widget/text.dart';
import 'package:flowy_infra_ui/style_widget/icon_button.dart';
class MenuUser extends MenuItem {
final UserDetail user;
final UserProfile user;
MenuUser(this.user, {Key? key}) : super(key: ValueKey(user.id));
@override

View File

@ -132,7 +132,7 @@ class WorkspaceItem extends StatelessWidget {
// }
// class WorkspaceSelectScreen extends StatelessWidget {
// final UserDetail user;
// final UserProfile user;
// const WorkspaceSelectScreen({
// Key? key,
// required this.user,
@ -206,7 +206,7 @@ class WorkspaceItem extends StatelessWidget {
// }
//
// class WorkspaceSelectScreen extends StatelessWidget {
// final UserDetail user;
// final UserProfile user;
// const WorkspaceSelectScreen({
// Key? key,
// required this.user,

View File

@ -1,369 +1,369 @@
/// Auto gen code from rust ast, do not edit
part of 'dispatch.dart';
class WorkspaceEventCreateWorkspace {
CreateWorkspaceRequest request;
WorkspaceEventCreateWorkspace(this.request);
CreateWorkspaceRequest request;
WorkspaceEventCreateWorkspace(this.request);
Future<Either<Workspace, WorkspaceError>> send() {
Future<Either<Workspace, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.CreateWorkspace.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.CreateWorkspace.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(Workspace.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(okBytes) => left(Workspace.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventReadCurWorkspace {
WorkspaceEventReadCurWorkspace();
WorkspaceEventReadCurWorkspace();
Future<Either<Workspace, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.ReadCurWorkspace.toString();
Future<Either<Workspace, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.ReadCurWorkspace.toString();
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(Workspace.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
return Dispatch.asyncRequest(request).then((bytesResult) => bytesResult.fold(
(okBytes) => left(Workspace.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventReadWorkspaces {
QueryWorkspaceRequest request;
WorkspaceEventReadWorkspaces(this.request);
QueryWorkspaceRequest request;
WorkspaceEventReadWorkspaces(this.request);
Future<Either<RepeatedWorkspace, WorkspaceError>> send() {
Future<Either<RepeatedWorkspace, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.ReadWorkspaces.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.ReadWorkspaces.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(RepeatedWorkspace.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(okBytes) => left(RepeatedWorkspace.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventDeleteWorkspace {
DeleteWorkspaceRequest request;
WorkspaceEventDeleteWorkspace(this.request);
DeleteWorkspaceRequest request;
WorkspaceEventDeleteWorkspace(this.request);
Future<Either<Unit, WorkspaceError>> send() {
Future<Either<Unit, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.DeleteWorkspace.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.DeleteWorkspace.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventOpenWorkspace {
QueryWorkspaceRequest request;
WorkspaceEventOpenWorkspace(this.request);
QueryWorkspaceRequest request;
WorkspaceEventOpenWorkspace(this.request);
Future<Either<Workspace, WorkspaceError>> send() {
Future<Either<Workspace, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.OpenWorkspace.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.OpenWorkspace.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(Workspace.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(okBytes) => left(Workspace.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventCreateApp {
CreateAppRequest request;
WorkspaceEventCreateApp(this.request);
CreateAppRequest request;
WorkspaceEventCreateApp(this.request);
Future<Either<App, WorkspaceError>> send() {
Future<Either<App, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.CreateApp.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.CreateApp.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(App.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(okBytes) => left(App.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventDeleteApp {
DeleteAppRequest request;
WorkspaceEventDeleteApp(this.request);
DeleteAppRequest request;
WorkspaceEventDeleteApp(this.request);
Future<Either<Unit, WorkspaceError>> send() {
Future<Either<Unit, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.DeleteApp.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.DeleteApp.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventReadApp {
QueryAppRequest request;
WorkspaceEventReadApp(this.request);
QueryAppRequest request;
WorkspaceEventReadApp(this.request);
Future<Either<App, WorkspaceError>> send() {
Future<Either<App, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.ReadApp.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.ReadApp.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(App.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(okBytes) => left(App.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventUpdateApp {
UpdateAppRequest request;
WorkspaceEventUpdateApp(this.request);
UpdateAppRequest request;
WorkspaceEventUpdateApp(this.request);
Future<Either<Unit, WorkspaceError>> send() {
Future<Either<Unit, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.UpdateApp.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.UpdateApp.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventCreateView {
CreateViewRequest request;
WorkspaceEventCreateView(this.request);
CreateViewRequest request;
WorkspaceEventCreateView(this.request);
Future<Either<View, WorkspaceError>> send() {
Future<Either<View, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.CreateView.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.CreateView.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(View.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(okBytes) => left(View.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventReadView {
QueryViewRequest request;
WorkspaceEventReadView(this.request);
QueryViewRequest request;
WorkspaceEventReadView(this.request);
Future<Either<View, WorkspaceError>> send() {
Future<Either<View, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.ReadView.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.ReadView.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(View.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(okBytes) => left(View.fromBuffer(okBytes)),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventUpdateView {
UpdateViewRequest request;
WorkspaceEventUpdateView(this.request);
UpdateViewRequest request;
WorkspaceEventUpdateView(this.request);
Future<Either<Unit, WorkspaceError>> send() {
Future<Either<Unit, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.UpdateView.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.UpdateView.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class WorkspaceEventDeleteView {
DeleteViewRequest request;
WorkspaceEventDeleteView(this.request);
DeleteViewRequest request;
WorkspaceEventDeleteView(this.request);
Future<Either<Unit, WorkspaceError>> send() {
Future<Either<Unit, WorkspaceError>> send() {
final request = FFIRequest.create()
..event = WorkspaceEvent.DeleteView.toString()
..payload = requestToBytes(this.request);
..event = WorkspaceEvent.DeleteView.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
(bytes) => left(unit),
(errBytes) => right(WorkspaceError.fromBuffer(errBytes)),
));
}
}
class EditorEventCreateDoc {
CreateDocRequest request;
EditorEventCreateDoc(this.request);
CreateDocRequest request;
EditorEventCreateDoc(this.request);
Future<Either<DocInfo, DocError>> send() {
Future<Either<DocInfo, DocError>> send() {
final request = FFIRequest.create()
..event = EditorEvent.CreateDoc.toString()
..payload = requestToBytes(this.request);
..event = EditorEvent.CreateDoc.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(DocInfo.fromBuffer(okBytes)),
(errBytes) => right(DocError.fromBuffer(errBytes)),
));
}
(okBytes) => left(DocInfo.fromBuffer(okBytes)),
(errBytes) => right(DocError.fromBuffer(errBytes)),
));
}
}
class EditorEventUpdateDoc {
UpdateDocRequest request;
EditorEventUpdateDoc(this.request);
UpdateDocRequest request;
EditorEventUpdateDoc(this.request);
Future<Either<Unit, DocError>> send() {
Future<Either<Unit, DocError>> send() {
final request = FFIRequest.create()
..event = EditorEvent.UpdateDoc.toString()
..payload = requestToBytes(this.request);
..event = EditorEvent.UpdateDoc.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(bytes) => left(unit),
(errBytes) => right(DocError.fromBuffer(errBytes)),
));
}
(bytes) => left(unit),
(errBytes) => right(DocError.fromBuffer(errBytes)),
));
}
}
class EditorEventReadDocInfo {
QueryDocRequest request;
EditorEventReadDocInfo(this.request);
QueryDocRequest request;
EditorEventReadDocInfo(this.request);
Future<Either<DocInfo, DocError>> send() {
Future<Either<DocInfo, DocError>> send() {
final request = FFIRequest.create()
..event = EditorEvent.ReadDocInfo.toString()
..payload = requestToBytes(this.request);
..event = EditorEvent.ReadDocInfo.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(DocInfo.fromBuffer(okBytes)),
(errBytes) => right(DocError.fromBuffer(errBytes)),
));
}
(okBytes) => left(DocInfo.fromBuffer(okBytes)),
(errBytes) => right(DocError.fromBuffer(errBytes)),
));
}
}
class EditorEventReadDocData {
QueryDocDataRequest request;
EditorEventReadDocData(this.request);
QueryDocDataRequest request;
EditorEventReadDocData(this.request);
Future<Either<DocData, DocError>> send() {
Future<Either<DocData, DocError>> send() {
final request = FFIRequest.create()
..event = EditorEvent.ReadDocData.toString()
..payload = requestToBytes(this.request);
..event = EditorEvent.ReadDocData.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(DocData.fromBuffer(okBytes)),
(errBytes) => right(DocError.fromBuffer(errBytes)),
));
}
(okBytes) => left(DocData.fromBuffer(okBytes)),
(errBytes) => right(DocError.fromBuffer(errBytes)),
));
}
}
class UserEventGetStatus {
UserEventGetStatus();
class UserEventGetUserProfile {
UserEventGetUserProfile();
Future<Either<UserDetail, UserError>> send() {
final request = FFIRequest.create()
..event = UserEvent.GetUserProfile.toString();
Future<Either<UserProfile, UserError>> send() {
final request = FFIRequest.create()
..event = UserEvent.GetUserProfile.toString();
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(UserDetail.fromBuffer(okBytes)),
(errBytes) => right(UserError.fromBuffer(errBytes)),
));
}
return Dispatch.asyncRequest(request).then((bytesResult) => bytesResult.fold(
(okBytes) => left(UserProfile.fromBuffer(okBytes)),
(errBytes) => right(UserError.fromBuffer(errBytes)),
));
}
}
class UserEventSignIn {
SignInRequest request;
UserEventSignIn(this.request);
SignInRequest request;
UserEventSignIn(this.request);
Future<Either<UserDetail, UserError>> send() {
Future<Either<UserProfile, UserError>> send() {
final request = FFIRequest.create()
..event = UserEvent.SignIn.toString()
..payload = requestToBytes(this.request);
..event = UserEvent.SignIn.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(UserDetail.fromBuffer(okBytes)),
(errBytes) => right(UserError.fromBuffer(errBytes)),
));
}
(okBytes) => left(UserProfile.fromBuffer(okBytes)),
(errBytes) => right(UserError.fromBuffer(errBytes)),
));
}
}
class UserEventSignUp {
SignUpRequest request;
UserEventSignUp(this.request);
SignUpRequest request;
UserEventSignUp(this.request);
Future<Either<UserDetail, UserError>> send() {
Future<Either<UserProfile, UserError>> send() {
final request = FFIRequest.create()
..event = UserEvent.SignUp.toString()
..payload = requestToBytes(this.request);
..event = UserEvent.SignUp.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(okBytes) => left(UserDetail.fromBuffer(okBytes)),
(errBytes) => right(UserError.fromBuffer(errBytes)),
));
}
(okBytes) => left(UserProfile.fromBuffer(okBytes)),
(errBytes) => right(UserError.fromBuffer(errBytes)),
));
}
}
class UserEventSignOut {
UserEventSignOut();
UserEventSignOut();
Future<Either<Unit, UserError>> send() {
final request = FFIRequest.create()..event = UserEvent.SignOut.toString();
Future<Either<Unit, UserError>> send() {
final request = FFIRequest.create()
..event = UserEvent.SignOut.toString();
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(bytes) => left(unit),
(errBytes) => right(UserError.fromBuffer(errBytes)),
));
}
return Dispatch.asyncRequest(request).then((bytesResult) => bytesResult.fold(
(bytes) => left(unit),
(errBytes) => right(UserError.fromBuffer(errBytes)),
));
}
}
class UserEventUpdateUser {
UpdateUserRequest request;
UserEventUpdateUser(this.request);
UpdateUserRequest request;
UserEventUpdateUser(this.request);
Future<Either<Unit, UserError>> send() {
Future<Either<Unit, UserError>> send() {
final request = FFIRequest.create()
..event = UserEvent.UpdateUser.toString()
..payload = requestToBytes(this.request);
..event = UserEvent.UpdateUser.toString()
..payload = requestToBytes(this.request);
return Dispatch.asyncRequest(request)
.then((bytesResult) => bytesResult.fold(
(bytes) => left(unit),
(errBytes) => right(UserError.fromBuffer(errBytes)),
));
}
(bytes) => left(unit),
(errBytes) => right(UserError.fromBuffer(errBytes)),
));
}
}

View File

@ -1,6 +1,6 @@
// Auto-generated, do not edit
export './user_table.pb.dart';
export './errors.pb.dart';
export './user_detail.pb.dart';
export './user_profile.pb.dart';
export './event.pb.dart';
export './auth.pb.dart';

View File

@ -1,6 +1,6 @@
///
// Generated code. Do not modify.
// source: user_detail.proto
// source: user_profile.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
@ -9,7 +9,7 @@ import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
export 'user_detail.pbenum.dart';
export 'user_profile.pbenum.dart';
class UserToken extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'UserToken', createEmptyInstance: create)
@ -58,16 +58,16 @@ class UserToken extends $pb.GeneratedMessage {
void clearToken() => clearField(1);
}
class UserDetail extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'UserDetail', createEmptyInstance: create)
class UserProfile extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'UserProfile', createEmptyInstance: create)
..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id')
..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'email')
..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'name')
..hasRequiredFields = false
;
UserDetail._() : super();
factory UserDetail({
UserProfile._() : super();
factory UserProfile({
$core.String? id,
$core.String? email,
$core.String? name,
@ -84,26 +84,26 @@ class UserDetail extends $pb.GeneratedMessage {
}
return _result;
}
factory UserDetail.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory UserDetail.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
factory UserProfile.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory UserProfile.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
UserDetail clone() => UserDetail()..mergeFromMessage(this);
UserProfile clone() => UserProfile()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
UserDetail copyWith(void Function(UserDetail) updates) => super.copyWith((message) => updates(message as UserDetail)) as UserDetail; // ignore: deprecated_member_use
UserProfile copyWith(void Function(UserProfile) updates) => super.copyWith((message) => updates(message as UserProfile)) as UserProfile; // ignore: deprecated_member_use
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static UserDetail create() => UserDetail._();
UserDetail createEmptyInstance() => create();
static $pb.PbList<UserDetail> createRepeated() => $pb.PbList<UserDetail>();
static UserProfile create() => UserProfile._();
UserProfile createEmptyInstance() => create();
static $pb.PbList<UserProfile> createRepeated() => $pb.PbList<UserProfile>();
@$core.pragma('dart2js:noInline')
static UserDetail getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<UserDetail>(create);
static UserDetail? _defaultInstance;
static UserProfile getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<UserProfile>(create);
static UserProfile? _defaultInstance;
@$pb.TagNumber(1)
$core.String get id => $_getSZ(0);

View File

@ -1,6 +1,6 @@
///
// Generated code. Do not modify.
// source: user_detail.proto
// source: user_profile.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields

View File

@ -1,6 +1,6 @@
///
// Generated code. Do not modify.
// source: user_detail.proto
// source: user_profile.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
@ -30,9 +30,9 @@ const UserToken$json = const {
/// Descriptor for `UserToken`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List userTokenDescriptor = $convert.base64Decode('CglVc2VyVG9rZW4SFAoFdG9rZW4YASABKAlSBXRva2Vu');
@$core.Deprecated('Use userDetailDescriptor instead')
const UserDetail$json = const {
'1': 'UserDetail',
@$core.Deprecated('Use userProfileDescriptor instead')
const UserProfile$json = const {
'1': 'UserProfile',
'2': const [
const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'},
const {'1': 'email', '3': 2, '4': 1, '5': 9, '10': 'email'},
@ -40,8 +40,8 @@ const UserDetail$json = const {
],
};
/// Descriptor for `UserDetail`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List userDetailDescriptor = $convert.base64Decode('CgpVc2VyRGV0YWlsEg4KAmlkGAEgASgJUgJpZBIUCgVlbWFpbBgCIAEoCVIFZW1haWwSEgoEbmFtZRgDIAEoCVIEbmFtZQ==');
/// Descriptor for `UserProfile`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List userProfileDescriptor = $convert.base64Decode('CgtVc2VyUHJvZmlsZRIOCgJpZBgBIAEoCVICaWQSFAoFZW1haWwYAiABKAlSBWVtYWlsEhIKBG5hbWUYAyABKAlSBG5hbWU=');
@$core.Deprecated('Use updateUserRequestDescriptor instead')
const UpdateUserRequest$json = const {
'1': 'UpdateUserRequest',

View File

@ -1,9 +1,9 @@
///
// Generated code. Do not modify.
// source: user_detail.proto
// source: user_profile.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package
export 'user_detail.pb.dart';
export 'user_profile.pb.dart';

View File

@ -85,8 +85,8 @@ fn user_scope() -> Scope {
.route(web::delete().to(user::sign_out_handler))
)
.service(web::resource("/user")
.route(web::patch().to(user::set_user_detail_handler))
.route(web::get().to(user::get_user_detail_handler))
.route(web::patch().to(user::set_user_profile_handler))
.route(web::get().to(user::get_user_profile_handler))
)
.service(web::resource("/register")
.route(web::post().to(user::register_handler))

View File

@ -21,7 +21,7 @@ use flowy_user::{
SignUpParams,
SignUpResponse,
UpdateUserParams,
UserDetail,
UserProfile,
},
};
use sqlx::{PgPool, Postgres};
@ -99,7 +99,7 @@ pub async fn register_user(
FlowyResponse::success().pb(response_data)
}
pub(crate) async fn get_user_details(
pub(crate) async fn get_user_profile(
pool: &PgPool,
logged_user: LoggedUser,
) -> Result<FlowyResponse, ServerError> {
@ -124,14 +124,14 @@ pub(crate) async fn get_user_details(
// update the user active time
let _ = AUTHORIZED_USERS.store_auth(logged_user, true)?;
let mut user_detail = UserDetail::default();
user_detail.set_id(user_table.id.to_string());
user_detail.set_email(user_table.email);
user_detail.set_name(user_table.name);
FlowyResponse::success().pb(user_detail)
let mut user_profile = UserProfile::default();
user_profile.set_id(user_table.id.to_string());
user_profile.set_email(user_table.email);
user_profile.set_name(user_table.name);
FlowyResponse::success().pb(user_profile)
}
pub(crate) async fn set_user_detail(
pub(crate) async fn set_user_profile(
pool: &PgPool,
logged_user: LoggedUser,
params: UpdateUserParams,

View File

@ -6,9 +6,9 @@ use actix_web::{
};
use crate::user_service::{
get_user_details,
get_user_profile,
register_user,
set_user_detail,
set_user_profile,
sign_in,
sign_out,
LoggedUser,
@ -40,21 +40,21 @@ pub async fn sign_out_handler(
Ok(response.into())
}
pub async fn get_user_detail_handler(
pub async fn get_user_profile_handler(
logged_user: LoggedUser,
pool: Data<PgPool>,
) -> Result<HttpResponse, ServerError> {
let response = get_user_details(pool.get_ref(), logged_user).await?;
let response = get_user_profile(pool.get_ref(), logged_user).await?;
Ok(response.into())
}
pub async fn set_user_detail_handler(
pub async fn set_user_profile_handler(
logged_user: LoggedUser,
pool: Data<PgPool>,
payload: Payload,
) -> Result<HttpResponse, ServerError> {
let params: UpdateUserParams = parse_from_payload(payload).await?;
let response = set_user_detail(pool.get_ref(), logged_user, params).await?;
let response = set_user_profile(pool.get_ref(), logged_user, params).await?;
Ok(response.into())
}

View File

@ -56,14 +56,14 @@ async fn user_sign_out() {
app.sign_out(&token).await;
// user_detail will be empty because use was sign out.
app.get_user_detail(&token).await;
app.get_user_profile(&token).await;
}
#[actix_rt::test]
async fn user_get_detail() {
let app = spawn_app().await;
let sign_up_resp = sign_up_user(&app).await;
log::info!("{:?}", app.get_user_detail(&sign_up_resp.token).await);
log::info!("{:?}", app.get_user_profile(&sign_up_resp.token).await);
}
#[actix_rt::test]
@ -74,7 +74,7 @@ async fn user_update_password() {
let sign_up_resp = register_user(&app, email, password).await;
let params = UpdateUserParams::new(&sign_up_resp.user_id).password("Hello123!");
app.update_user_detail(&sign_up_resp.token, params)
app.update_user_profile(&sign_up_resp.token, params)
.await
.unwrap();
@ -97,11 +97,11 @@ async fn user_update_name() {
let sign_up_resp = sign_up_user(&app).await;
let name = "tom".to_string();
let params = UpdateUserParams::new(&sign_up_resp.user_id).name(&name);
app.update_user_detail(&sign_up_resp.token, params)
app.update_user_profile(&sign_up_resp.token, params)
.await
.unwrap();
let user = app.get_user_detail(&sign_up_resp.token).await;
let user = app.get_user_profile(&sign_up_resp.token).await;
assert_eq!(user.name, name);
}
@ -111,11 +111,11 @@ async fn user_update_email() {
let sign_up_resp = sign_up_user(&app).await;
let email = "123@gmail.com".to_string();
let params = UpdateUserParams::new(&sign_up_resp.user_id).email(&email);
app.update_user_detail(&sign_up_resp.token, params)
app.update_user_profile(&sign_up_resp.token, params)
.await
.unwrap();
let user = app.get_user_detail(&sign_up_resp.token).await;
let user = app.get_user_profile(&sign_up_resp.token).await;
assert_eq!(user.email, email);
}

View File

@ -31,19 +31,19 @@ impl TestApp {
let _ = user_sign_out_request(token, &url).await.unwrap();
}
pub async fn get_user_detail(&self, token: &str) -> UserDetail {
pub async fn get_user_profile(&self, token: &str) -> UserProfile {
let url = format!("{}/api/user", self.address);
let user_detail = get_user_detail_request(token, &url).await.unwrap();
user_detail
let user_profile = get_user_profile_request(token, &url).await.unwrap();
user_profile
}
pub async fn update_user_detail(
pub async fn update_user_profile(
&self,
token: &str,
params: UpdateUserParams,
) -> Result<(), UserError> {
let url = format!("{}/api/user", self.address);
update_user_detail_request(token, params, &url).await
update_user_profile_request(token, params, &url).await
}
pub async fn create_workspace(&self, params: CreateWorkspaceParams, token: &str) -> Workspace {

View File

@ -66,7 +66,7 @@ pub fn category_from_str(type_str: &str) -> TypeCategory {
| "SignUpParams"
| "SignUpResponse"
| "UserToken"
| "UserDetail"
| "UserProfile"
| "UpdateUserRequest"
| "UpdateUserParams"
| "UserError"

View File

@ -1,5 +1,5 @@
use flowy_dispatch::prelude::{EventDispatch, EventResponse, FromBytes, ModuleRequest, StatusCode, ToBytes};
use flowy_user::entities::UserDetail;
use flowy_user::entities::UserProfile;
use std::{
fmt::{Debug, Display},
hash::Hash,
@ -26,13 +26,13 @@ impl WorkspaceTest {
pub type UserTest = Builder<UserError>;
impl UserTest {
pub fn new(sdk: FlowyTestSDK) -> Self { Builder::test(TestContext::new(sdk)) }
pub fn user_detail(&self) -> &Option<UserDetail> { &self.user_detail }
pub fn user_profile(&self) -> &Option<UserProfile> { &self.user_profile }
}
#[derive(Clone)]
pub struct Builder<E> {
context: TestContext,
user_detail: Option<UserDetail>,
user_profile: Option<UserProfile>,
err_phantom: PhantomData<E>,
}
@ -43,7 +43,7 @@ where
pub(crate) fn test(context: TestContext) -> Self {
Self {
context,
user_detail: None,
user_profile: None,
err_phantom: PhantomData,
}
}

View File

@ -3,7 +3,7 @@ use flowy_dispatch::prelude::{EventDispatch, ModuleRequest, ToBytes};
use flowy_infra::{kv::KV, uuid};
use flowy_user::{
entities::{SignInRequest, SignUpRequest, UserDetail},
entities::{SignInRequest, SignUpRequest, UserProfile},
errors::{ErrorBuilder, ErrorCode, UserError},
event::UserEvent::{SignIn, SignOut, SignUp},
};
@ -76,7 +76,7 @@ pub(crate) fn create_default_workspace_if_need(dispatch: Arc<EventDispatch>, use
}
pub struct SignUpContext {
pub user_detail: UserDetail,
pub user_profile: UserProfile,
pub password: String,
}
@ -91,17 +91,17 @@ pub fn sign_up(dispatch: Arc<EventDispatch>) -> SignUpContext {
.unwrap();
let request = ModuleRequest::new(SignUp).payload(payload);
let user_detail = EventDispatch::sync_send(dispatch.clone(), request)
.parse::<UserDetail, UserError>()
let user_profile = EventDispatch::sync_send(dispatch.clone(), request)
.parse::<UserProfile, UserError>()
.unwrap()
.unwrap();
let _ = create_default_workspace_if_need(dispatch.clone(), &user_detail.id);
SignUpContext { user_detail, password }
let _ = create_default_workspace_if_need(dispatch.clone(), &user_profile.id);
SignUpContext { user_profile, password }
}
#[allow(dead_code)]
fn sign_in(dispatch: Arc<EventDispatch>) -> UserDetail {
fn sign_in(dispatch: Arc<EventDispatch>) -> UserProfile {
let payload = SignInRequest {
email: login_email(),
password: login_password(),
@ -110,12 +110,12 @@ fn sign_in(dispatch: Arc<EventDispatch>) -> UserDetail {
.unwrap();
let request = ModuleRequest::new(SignIn).payload(payload);
let user_detail = EventDispatch::sync_send(dispatch, request)
.parse::<UserDetail, UserError>()
let user_profile = EventDispatch::sync_send(dispatch, request)
.parse::<UserProfile, UserError>()
.unwrap()
.unwrap();
user_detail
user_profile
}
#[allow(dead_code)]

View File

@ -3,7 +3,7 @@ mod helper;
use crate::helper::*;
use flowy_sdk::FlowySDK;
use flowy_user::entities::UserDetail;
use flowy_user::entities::UserProfile;
pub mod prelude {
pub use crate::{builder::*, helper::*, *};
@ -15,7 +15,7 @@ pub type FlowyTestSDK = FlowySDK;
#[derive(Clone)]
pub struct FlowyEnv {
pub sdk: FlowyTestSDK,
pub user: UserDetail,
pub user: UserProfile,
pub password: String,
}
@ -25,7 +25,7 @@ impl FlowyEnv {
let result = sign_up(sdk.dispatch());
let env = Self {
sdk,
user: result.user_detail,
user: result.user_profile,
password: result.password,
};
env

View File

@ -1,6 +1,6 @@
pub use auth::*;
pub use user_detail::*;
pub use user_profile::*;
pub mod parser;
pub mod auth;
mod user_detail;
mod user_profile;

View File

@ -18,7 +18,7 @@ impl std::default::Default for UserStatus {
}
#[derive(ProtoBuf, Default, Debug, PartialEq, Eq, Clone)]
pub struct UserDetail {
pub struct UserProfile {
#[pb(index = 1)]
pub id: String,
@ -36,9 +36,9 @@ use crate::{
};
use std::convert::TryInto;
impl std::convert::From<UserTable> for UserDetail {
impl std::convert::From<UserTable> for UserProfile {
fn from(user: UserTable) -> Self {
UserDetail {
UserProfile {
id: user.id,
email: user.email,
name: user.name,

View File

@ -4,13 +4,13 @@ use strum_macros::Display;
#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
#[event_err = "UserError"]
pub enum UserEvent {
#[event(output = "UserDetail")]
#[event(output = "UserProfile")]
GetUserProfile = 0,
#[event(input = "SignInRequest", output = "UserDetail")]
#[event(input = "SignInRequest", output = "UserProfile")]
SignIn = 1,
#[event(input = "SignUpRequest", output = "UserDetail")]
#[event(input = "SignUpRequest", output = "UserProfile")]
SignUp = 2,
#[event(passthrough)]

View File

@ -4,10 +4,10 @@ use std::{convert::TryInto, sync::Arc};
// tracing instrument 👉🏻 https://docs.rs/tracing/0.1.26/tracing/attr.instrument.html
#[tracing::instrument(name = "sign_in", skip(data, session), fields(email = %data.email))]
pub async fn sign_in(data: Data<SignInRequest>, session: Unit<Arc<UserSession>>) -> DataResult<UserDetail, UserError> {
pub async fn sign_in(data: Data<SignInRequest>, session: Unit<Arc<UserSession>>) -> DataResult<UserProfile, UserError> {
let params: SignInParams = data.into_inner().try_into()?;
let user_detail = session.sign_in(params).await?;
data_result(user_detail)
let user_profile = session.sign_in(params).await?;
data_result(user_profile)
}
#[tracing::instrument(
@ -18,9 +18,9 @@ pub async fn sign_in(data: Data<SignInRequest>, session: Unit<Arc<UserSession>>)
name = %data.name,
)
)]
pub async fn sign_up(data: Data<SignUpRequest>, session: Unit<Arc<UserSession>>) -> DataResult<UserDetail, UserError> {
pub async fn sign_up(data: Data<SignUpRequest>, session: Unit<Arc<UserSession>>) -> DataResult<UserProfile, UserError> {
let params: SignUpParams = data.into_inner().try_into()?;
let user_detail = session.sign_up(params).await?;
let user_profile = session.sign_up(params).await?;
data_result(user_detail)
data_result(user_profile)
}

View File

@ -4,9 +4,9 @@ use flowy_dispatch::prelude::*;
use std::{convert::TryInto, sync::Arc};
#[tracing::instrument(name = "get_user_status", skip(session))]
pub async fn user_profile_handler(session: Unit<Arc<UserSession>>) -> DataResult<UserDetail, UserError> {
let user_detail = session.user_detail().await?;
data_result(user_detail)
pub async fn user_profile_handler(session: Unit<Arc<UserSession>>) -> DataResult<UserProfile, UserError> {
let user_profile = session.user_profile().await?;
data_result(user_profile)
}
#[tracing::instrument(name = "sign_out", skip(session))]

View File

@ -6,8 +6,8 @@ pub use user_table::*;
mod errors;
pub use errors::*;
mod user_detail;
pub use user_detail::*;
mod user_profile;
pub use user_profile::*;
mod event;
pub use event::*;

View File

@ -17,7 +17,7 @@
#![allow(trivial_casts)]
#![allow(unused_imports)]
#![allow(unused_results)]
//! Generated file from `user_detail.proto`
//! Generated file from `user_profile.proto`
/// Generated files are compatible only with the same version
/// of protobuf runtime.
@ -183,7 +183,7 @@ impl ::protobuf::reflect::ProtobufValue for UserToken {
}
#[derive(PartialEq,Clone,Default)]
pub struct UserDetail {
pub struct UserProfile {
// message fields
pub id: ::std::string::String,
pub email: ::std::string::String,
@ -193,14 +193,14 @@ pub struct UserDetail {
pub cached_size: ::protobuf::CachedSize,
}
impl<'a> ::std::default::Default for &'a UserDetail {
fn default() -> &'a UserDetail {
<UserDetail as ::protobuf::Message>::default_instance()
impl<'a> ::std::default::Default for &'a UserProfile {
fn default() -> &'a UserProfile {
<UserProfile as ::protobuf::Message>::default_instance()
}
}
impl UserDetail {
pub fn new() -> UserDetail {
impl UserProfile {
pub fn new() -> UserProfile {
::std::default::Default::default()
}
@ -283,7 +283,7 @@ impl UserDetail {
}
}
impl ::protobuf::Message for UserDetail {
impl ::protobuf::Message for UserProfile {
fn is_initialized(&self) -> bool {
true
}
@ -367,8 +367,8 @@ impl ::protobuf::Message for UserDetail {
Self::descriptor_static()
}
fn new() -> UserDetail {
UserDetail::new()
fn new() -> UserProfile {
UserProfile::new()
}
fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
@ -377,34 +377,34 @@ impl ::protobuf::Message for UserDetail {
let mut fields = ::std::vec::Vec::new();
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"id",
|m: &UserDetail| { &m.id },
|m: &mut UserDetail| { &mut m.id },
|m: &UserProfile| { &m.id },
|m: &mut UserProfile| { &mut m.id },
));
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"email",
|m: &UserDetail| { &m.email },
|m: &mut UserDetail| { &mut m.email },
|m: &UserProfile| { &m.email },
|m: &mut UserProfile| { &mut m.email },
));
fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>(
"name",
|m: &UserDetail| { &m.name },
|m: &mut UserDetail| { &mut m.name },
|m: &UserProfile| { &m.name },
|m: &mut UserProfile| { &mut m.name },
));
::protobuf::reflect::MessageDescriptor::new_pb_name::<UserDetail>(
"UserDetail",
::protobuf::reflect::MessageDescriptor::new_pb_name::<UserProfile>(
"UserProfile",
fields,
file_descriptor_proto()
)
})
}
fn default_instance() -> &'static UserDetail {
static instance: ::protobuf::rt::LazyV2<UserDetail> = ::protobuf::rt::LazyV2::INIT;
instance.get(UserDetail::new)
fn default_instance() -> &'static UserProfile {
static instance: ::protobuf::rt::LazyV2<UserProfile> = ::protobuf::rt::LazyV2::INIT;
instance.get(UserProfile::new)
}
}
impl ::protobuf::Clear for UserDetail {
impl ::protobuf::Clear for UserProfile {
fn clear(&mut self) {
self.id.clear();
self.email.clear();
@ -413,13 +413,13 @@ impl ::protobuf::Clear for UserDetail {
}
}
impl ::std::fmt::Debug for UserDetail {
impl ::std::fmt::Debug for UserProfile {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f)
}
}
impl ::protobuf::reflect::ProtobufValue for UserDetail {
impl ::protobuf::reflect::ProtobufValue for UserProfile {
fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
::protobuf::reflect::ReflectValueRef::Message(self)
}
@ -1285,10 +1285,10 @@ impl ::protobuf::reflect::ProtobufValue for UserStatus {
}
static file_descriptor_proto_data: &'static [u8] = b"\
\n\x11user_detail.proto\"!\n\tUserToken\x12\x14\n\x05token\x18\x01\x20\
\x01(\tR\x05token\"F\n\nUserDetail\x12\x0e\n\x02id\x18\x01\x20\x01(\tR\
\x02id\x12\x14\n\x05email\x18\x02\x20\x01(\tR\x05email\x12\x12\n\x04name\
\x18\x03\x20\x01(\tR\x04name\"\xa1\x01\n\x11UpdateUserRequest\x12\x0e\n\
\n\x12user_profile.proto\"!\n\tUserToken\x12\x14\n\x05token\x18\x01\x20\
\x01(\tR\x05token\"G\n\x0bUserProfile\x12\x0e\n\x02id\x18\x01\x20\x01(\t\
R\x02id\x12\x14\n\x05email\x18\x02\x20\x01(\tR\x05email\x12\x12\n\x04nam\
e\x18\x03\x20\x01(\tR\x04name\"\xa1\x01\n\x11UpdateUserRequest\x12\x0e\n\
\x02id\x18\x01\x20\x01(\tR\x02id\x12\x14\n\x04name\x18\x02\x20\x01(\tH\0\
R\x04name\x12\x16\n\x05email\x18\x03\x20\x01(\tH\x01R\x05email\x12\x1c\n\
\x08password\x18\x04\x20\x01(\tH\x02R\x08passwordB\r\n\x0bone_of_nameB\
@ -1298,60 +1298,60 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\x05email\x12\x1c\n\x08password\x18\x04\x20\x01(\tH\x02R\x08passwordB\r\
\n\x0bone_of_nameB\x0e\n\x0cone_of_emailB\x11\n\x0fone_of_password*1\n\n\
UserStatus\x12\x0b\n\x07Unknown\x10\0\x12\t\n\x05Login\x10\x01\x12\x0b\n\
\x07Expired\x10\x02J\xbb\x08\n\x06\x12\x04\0\0\x1a\x01\n\x08\n\x01\x0c\
\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x02\0\x04\x01\n\n\n\x03\x04\0\
\x01\x12\x03\x02\x08\x11\n\x0b\n\x04\x04\0\x02\0\x12\x03\x03\x04\x15\n\
\x0c\n\x05\x04\0\x02\0\x05\x12\x03\x03\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\
\x12\x03\x03\x0b\x10\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x03\x13\x14\n\n\
\n\x02\x04\x01\x12\x04\x05\0\t\x01\n\n\n\x03\x04\x01\x01\x12\x03\x05\x08\
\x12\n\x0b\n\x04\x04\x01\x02\0\x12\x03\x06\x04\x12\n\x0c\n\x05\x04\x01\
\x02\0\x05\x12\x03\x06\x04\n\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\x06\
\x0b\r\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\x06\x10\x11\n\x0b\n\x04\x04\
\x01\x02\x01\x12\x03\x07\x04\x15\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03\
\x07\x04\n\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03\x07\x0b\x10\n\x0c\n\
\x05\x04\x01\x02\x01\x03\x12\x03\x07\x13\x14\n\x0b\n\x04\x04\x01\x02\x02\
\x12\x03\x08\x04\x14\n\x0c\n\x05\x04\x01\x02\x02\x05\x12\x03\x08\x04\n\n\
\x0c\n\x05\x04\x01\x02\x02\x01\x12\x03\x08\x0b\x0f\n\x0c\n\x05\x04\x01\
\x02\x02\x03\x12\x03\x08\x12\x13\n\n\n\x02\x04\x02\x12\x04\n\0\x0f\x01\n\
\n\n\x03\x04\x02\x01\x12\x03\n\x08\x19\n\x0b\n\x04\x04\x02\x02\0\x12\x03\
\x0b\x04\x12\n\x0c\n\x05\x04\x02\x02\0\x05\x12\x03\x0b\x04\n\n\x0c\n\x05\
\x04\x02\x02\0\x01\x12\x03\x0b\x0b\r\n\x0c\n\x05\x04\x02\x02\0\x03\x12\
\x03\x0b\x10\x11\n\x0b\n\x04\x04\x02\x08\0\x12\x03\x0c\x04*\n\x0c\n\x05\
\x04\x02\x08\0\x01\x12\x03\x0c\n\x15\n\x0b\n\x04\x04\x02\x02\x01\x12\x03\
\x0c\x18(\n\x0c\n\x05\x04\x02\x02\x01\x05\x12\x03\x0c\x18\x1e\n\x0c\n\
\x05\x04\x02\x02\x01\x01\x12\x03\x0c\x1f#\n\x0c\n\x05\x04\x02\x02\x01\
\x03\x12\x03\x0c&'\n\x0b\n\x04\x04\x02\x08\x01\x12\x03\r\x04,\n\x0c\n\
\x05\x04\x02\x08\x01\x01\x12\x03\r\n\x16\n\x0b\n\x04\x04\x02\x02\x02\x12\
\x03\r\x19*\n\x0c\n\x05\x04\x02\x02\x02\x05\x12\x03\r\x19\x1f\n\x0c\n\
\x05\x04\x02\x02\x02\x01\x12\x03\r\x20%\n\x0c\n\x05\x04\x02\x02\x02\x03\
\x12\x03\r()\n\x0b\n\x04\x04\x02\x08\x02\x12\x03\x0e\x042\n\x0c\n\x05\
\x04\x02\x08\x02\x01\x12\x03\x0e\n\x19\n\x0b\n\x04\x04\x02\x02\x03\x12\
\x03\x0e\x1c0\n\x0c\n\x05\x04\x02\x02\x03\x05\x12\x03\x0e\x1c\"\n\x0c\n\
\x05\x04\x02\x02\x03\x01\x12\x03\x0e#+\n\x0c\n\x05\x04\x02\x02\x03\x03\
\x12\x03\x0e./\n\n\n\x02\x04\x03\x12\x04\x10\0\x15\x01\n\n\n\x03\x04\x03\
\x01\x12\x03\x10\x08\x18\n\x0b\n\x04\x04\x03\x02\0\x12\x03\x11\x04\x12\n\
\x0c\n\x05\x04\x03\x02\0\x05\x12\x03\x11\x04\n\n\x0c\n\x05\x04\x03\x02\0\
\x01\x12\x03\x11\x0b\r\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x03\x11\x10\x11\
\n\x0b\n\x04\x04\x03\x08\0\x12\x03\x12\x04*\n\x0c\n\x05\x04\x03\x08\0\
\x01\x12\x03\x12\n\x15\n\x0b\n\x04\x04\x03\x02\x01\x12\x03\x12\x18(\n\
\x0c\n\x05\x04\x03\x02\x01\x05\x12\x03\x12\x18\x1e\n\x0c\n\x05\x04\x03\
\x02\x01\x01\x12\x03\x12\x1f#\n\x0c\n\x05\x04\x03\x02\x01\x03\x12\x03\
\x12&'\n\x0b\n\x04\x04\x03\x08\x01\x12\x03\x13\x04,\n\x0c\n\x05\x04\x03\
\x08\x01\x01\x12\x03\x13\n\x16\n\x0b\n\x04\x04\x03\x02\x02\x12\x03\x13\
\x19*\n\x0c\n\x05\x04\x03\x02\x02\x05\x12\x03\x13\x19\x1f\n\x0c\n\x05\
\x04\x03\x02\x02\x01\x12\x03\x13\x20%\n\x0c\n\x05\x04\x03\x02\x02\x03\
\x12\x03\x13()\n\x0b\n\x04\x04\x03\x08\x02\x12\x03\x14\x042\n\x0c\n\x05\
\x04\x03\x08\x02\x01\x12\x03\x14\n\x19\n\x0b\n\x04\x04\x03\x02\x03\x12\
\x03\x14\x1c0\n\x0c\n\x05\x04\x03\x02\x03\x05\x12\x03\x14\x1c\"\n\x0c\n\
\x05\x04\x03\x02\x03\x01\x12\x03\x14#+\n\x0c\n\x05\x04\x03\x02\x03\x03\
\x12\x03\x14./\n\n\n\x02\x05\0\x12\x04\x16\0\x1a\x01\n\n\n\x03\x05\0\x01\
\x12\x03\x16\x05\x0f\n\x0b\n\x04\x05\0\x02\0\x12\x03\x17\x04\x10\n\x0c\n\
\x05\x05\0\x02\0\x01\x12\x03\x17\x04\x0b\n\x0c\n\x05\x05\0\x02\0\x02\x12\
\x03\x17\x0e\x0f\n\x0b\n\x04\x05\0\x02\x01\x12\x03\x18\x04\x0e\n\x0c\n\
\x05\x05\0\x02\x01\x01\x12\x03\x18\x04\t\n\x0c\n\x05\x05\0\x02\x01\x02\
\x12\x03\x18\x0c\r\n\x0b\n\x04\x05\0\x02\x02\x12\x03\x19\x04\x10\n\x0c\n\
\x05\x05\0\x02\x02\x01\x12\x03\x19\x04\x0b\n\x0c\n\x05\x05\0\x02\x02\x02\
\x12\x03\x19\x0e\x0fb\x06proto3\
\x07Expired\x10\x02J\xbb\x08\n\x06\x12\x04\0\0\x19\x01\n\x08\n\x01\x0c\
\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x01\0\x03\x01\n\n\n\x03\x04\0\
\x01\x12\x03\x01\x08\x11\n\x0b\n\x04\x04\0\x02\0\x12\x03\x02\x04\x15\n\
\x0c\n\x05\x04\0\x02\0\x05\x12\x03\x02\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\
\x12\x03\x02\x0b\x10\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x02\x13\x14\n\n\
\n\x02\x04\x01\x12\x04\x04\0\x08\x01\n\n\n\x03\x04\x01\x01\x12\x03\x04\
\x08\x13\n\x0b\n\x04\x04\x01\x02\0\x12\x03\x05\x04\x12\n\x0c\n\x05\x04\
\x01\x02\0\x05\x12\x03\x05\x04\n\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\
\x05\x0b\r\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\x05\x10\x11\n\x0b\n\x04\
\x04\x01\x02\x01\x12\x03\x06\x04\x15\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\
\x03\x06\x04\n\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03\x06\x0b\x10\n\x0c\
\n\x05\x04\x01\x02\x01\x03\x12\x03\x06\x13\x14\n\x0b\n\x04\x04\x01\x02\
\x02\x12\x03\x07\x04\x14\n\x0c\n\x05\x04\x01\x02\x02\x05\x12\x03\x07\x04\
\n\n\x0c\n\x05\x04\x01\x02\x02\x01\x12\x03\x07\x0b\x0f\n\x0c\n\x05\x04\
\x01\x02\x02\x03\x12\x03\x07\x12\x13\n\n\n\x02\x04\x02\x12\x04\t\0\x0e\
\x01\n\n\n\x03\x04\x02\x01\x12\x03\t\x08\x19\n\x0b\n\x04\x04\x02\x02\0\
\x12\x03\n\x04\x12\n\x0c\n\x05\x04\x02\x02\0\x05\x12\x03\n\x04\n\n\x0c\n\
\x05\x04\x02\x02\0\x01\x12\x03\n\x0b\r\n\x0c\n\x05\x04\x02\x02\0\x03\x12\
\x03\n\x10\x11\n\x0b\n\x04\x04\x02\x08\0\x12\x03\x0b\x04*\n\x0c\n\x05\
\x04\x02\x08\0\x01\x12\x03\x0b\n\x15\n\x0b\n\x04\x04\x02\x02\x01\x12\x03\
\x0b\x18(\n\x0c\n\x05\x04\x02\x02\x01\x05\x12\x03\x0b\x18\x1e\n\x0c\n\
\x05\x04\x02\x02\x01\x01\x12\x03\x0b\x1f#\n\x0c\n\x05\x04\x02\x02\x01\
\x03\x12\x03\x0b&'\n\x0b\n\x04\x04\x02\x08\x01\x12\x03\x0c\x04,\n\x0c\n\
\x05\x04\x02\x08\x01\x01\x12\x03\x0c\n\x16\n\x0b\n\x04\x04\x02\x02\x02\
\x12\x03\x0c\x19*\n\x0c\n\x05\x04\x02\x02\x02\x05\x12\x03\x0c\x19\x1f\n\
\x0c\n\x05\x04\x02\x02\x02\x01\x12\x03\x0c\x20%\n\x0c\n\x05\x04\x02\x02\
\x02\x03\x12\x03\x0c()\n\x0b\n\x04\x04\x02\x08\x02\x12\x03\r\x042\n\x0c\
\n\x05\x04\x02\x08\x02\x01\x12\x03\r\n\x19\n\x0b\n\x04\x04\x02\x02\x03\
\x12\x03\r\x1c0\n\x0c\n\x05\x04\x02\x02\x03\x05\x12\x03\r\x1c\"\n\x0c\n\
\x05\x04\x02\x02\x03\x01\x12\x03\r#+\n\x0c\n\x05\x04\x02\x02\x03\x03\x12\
\x03\r./\n\n\n\x02\x04\x03\x12\x04\x0f\0\x14\x01\n\n\n\x03\x04\x03\x01\
\x12\x03\x0f\x08\x18\n\x0b\n\x04\x04\x03\x02\0\x12\x03\x10\x04\x12\n\x0c\
\n\x05\x04\x03\x02\0\x05\x12\x03\x10\x04\n\n\x0c\n\x05\x04\x03\x02\0\x01\
\x12\x03\x10\x0b\r\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x03\x10\x10\x11\n\
\x0b\n\x04\x04\x03\x08\0\x12\x03\x11\x04*\n\x0c\n\x05\x04\x03\x08\0\x01\
\x12\x03\x11\n\x15\n\x0b\n\x04\x04\x03\x02\x01\x12\x03\x11\x18(\n\x0c\n\
\x05\x04\x03\x02\x01\x05\x12\x03\x11\x18\x1e\n\x0c\n\x05\x04\x03\x02\x01\
\x01\x12\x03\x11\x1f#\n\x0c\n\x05\x04\x03\x02\x01\x03\x12\x03\x11&'\n\
\x0b\n\x04\x04\x03\x08\x01\x12\x03\x12\x04,\n\x0c\n\x05\x04\x03\x08\x01\
\x01\x12\x03\x12\n\x16\n\x0b\n\x04\x04\x03\x02\x02\x12\x03\x12\x19*\n\
\x0c\n\x05\x04\x03\x02\x02\x05\x12\x03\x12\x19\x1f\n\x0c\n\x05\x04\x03\
\x02\x02\x01\x12\x03\x12\x20%\n\x0c\n\x05\x04\x03\x02\x02\x03\x12\x03\
\x12()\n\x0b\n\x04\x04\x03\x08\x02\x12\x03\x13\x042\n\x0c\n\x05\x04\x03\
\x08\x02\x01\x12\x03\x13\n\x19\n\x0b\n\x04\x04\x03\x02\x03\x12\x03\x13\
\x1c0\n\x0c\n\x05\x04\x03\x02\x03\x05\x12\x03\x13\x1c\"\n\x0c\n\x05\x04\
\x03\x02\x03\x01\x12\x03\x13#+\n\x0c\n\x05\x04\x03\x02\x03\x03\x12\x03\
\x13./\n\n\n\x02\x05\0\x12\x04\x15\0\x19\x01\n\n\n\x03\x05\0\x01\x12\x03\
\x15\x05\x0f\n\x0b\n\x04\x05\0\x02\0\x12\x03\x16\x04\x10\n\x0c\n\x05\x05\
\0\x02\0\x01\x12\x03\x16\x04\x0b\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\x16\
\x0e\x0f\n\x0b\n\x04\x05\0\x02\x01\x12\x03\x17\x04\x0e\n\x0c\n\x05\x05\0\
\x02\x01\x01\x12\x03\x17\x04\t\n\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\x17\
\x0c\r\n\x0b\n\x04\x05\0\x02\x02\x12\x03\x18\x04\x10\n\x0c\n\x05\x05\0\
\x02\x02\x01\x12\x03\x18\x04\x0b\n\x0c\n\x05\x05\0\x02\x02\x02\x12\x03\
\x18\x0e\x0fb\x06proto3\
";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View File

@ -1,9 +1,8 @@
syntax = "proto3";
message UserToken {
string token = 1;
}
message UserDetail {
message UserProfile {
string id = 1;
string email = 2;
string name = 3;

View File

@ -6,7 +6,7 @@ pub use server_api_mock::*;
use std::sync::Arc;
pub(crate) type Server = Arc<dyn UserServerAPI + Send + Sync>;
use crate::{
entities::{SignInParams, SignInResponse, SignUpParams, SignUpResponse, UpdateUserParams, UserDetail},
entities::{SignInParams, SignInResponse, SignUpParams, SignUpResponse, UpdateUserParams, UserProfile},
errors::UserError,
};
use flowy_infra::future::ResultFuture;
@ -16,7 +16,7 @@ pub trait UserServerAPI {
fn sign_in(&self, params: SignInParams) -> ResultFuture<SignInResponse, UserError>;
fn sign_out(&self, token: &str) -> ResultFuture<(), UserError>;
fn update_user(&self, token: &str, params: UpdateUserParams) -> ResultFuture<(), UserError>;
fn get_user_detail(&self, token: &str) -> ResultFuture<UserDetail, UserError>;
fn get_user(&self, token: &str) -> ResultFuture<UserProfile, UserError>;
}
pub(crate) fn construct_user_server() -> Arc<dyn UserServerAPI + Send + Sync> {

View File

@ -1,5 +1,5 @@
use crate::{
entities::{SignInParams, SignInResponse, SignUpParams, SignUpResponse, UserDetail},
entities::{SignInParams, SignInResponse, SignUpParams, SignUpResponse, UserProfile},
errors::UserError,
};
@ -31,12 +31,12 @@ impl UserServerAPI for UserServer {
fn update_user(&self, token: &str, params: UpdateUserParams) -> ResultFuture<(), UserError> {
let token = token.to_owned();
ResultFuture::new(async move { update_user_detail_request(&token, params, USER_PROFILE_URL.as_ref()).await })
ResultFuture::new(async move { update_user_profile_request(&token, params, USER_PROFILE_URL.as_ref()).await })
}
fn get_user_detail(&self, token: &str) -> ResultFuture<UserDetail, UserError> {
fn get_user(&self, token: &str) -> ResultFuture<UserProfile, UserError> {
let token = token.to_owned();
ResultFuture::new(async move { get_user_detail_request(&token, USER_PROFILE_URL.as_ref()).await })
ResultFuture::new(async move { get_user_profile_request(&token, USER_PROFILE_URL.as_ref()).await })
}
}
@ -68,17 +68,17 @@ pub async fn user_sign_out_request(token: &str, url: &str) -> Result<(), UserErr
Ok(())
}
pub async fn get_user_detail_request(token: &str, url: &str) -> Result<UserDetail, UserError> {
let user_detail = HttpRequestBuilder::get(&url.to_owned())
pub async fn get_user_profile_request(token: &str, url: &str) -> Result<UserProfile, UserError> {
let user_profile = HttpRequestBuilder::get(&url.to_owned())
.header(HEADER_TOKEN, token)
.send()
.await?
.response()
.await?;
Ok(user_detail)
Ok(user_profile)
}
pub async fn update_user_detail_request(token: &str, params: UpdateUserParams, url: &str) -> Result<(), UserError> {
pub async fn update_user_profile_request(token: &str, params: UpdateUserParams, url: &str) -> Result<(), UserError> {
let _ = HttpRequestBuilder::patch(&url.to_owned())
.header(HEADER_TOKEN, token)
.protobuf(params)?

View File

@ -1,5 +1,5 @@
use crate::{
entities::{SignInParams, SignInResponse, SignUpParams, SignUpResponse, UpdateUserParams, UserDetail},
entities::{SignInParams, SignInResponse, SignUpParams, SignUpResponse, UpdateUserParams, UserProfile},
errors::{ErrorBuilder, ErrorCode, UserError},
};
@ -39,7 +39,7 @@ impl UserServerAPI for UserServerMock {
fn update_user(&self, _token: &str, _params: UpdateUserParams) -> ResultFuture<(), UserError> { ResultFuture::new(async { Ok(()) }) }
fn get_user_detail(&self, _token: &str) -> ResultFuture<UserDetail, UserError> {
fn get_user(&self, _token: &str) -> ResultFuture<UserProfile, UserError> {
ResultFuture::new(async { Err(ErrorBuilder::new(ErrorCode::Unknown).msg("mock data, ignore this error").build()) })
}
}

View File

@ -1,5 +1,5 @@
use crate::{
entities::{SignInParams, SignUpParams, UpdateUserParams, UserDetail},
entities::{SignInParams, SignUpParams, UpdateUserParams, UserProfile},
errors::{ErrorBuilder, ErrorCode, UserError},
services::user::{construct_user_server, database::UserDB},
sql_tables::{UserTable, UserTableChangeset},
@ -69,29 +69,29 @@ impl UserSession {
self.database.get_pool(&user_id)
}
pub async fn sign_in(&self, params: SignInParams) -> Result<UserDetail, UserError> {
pub async fn sign_in(&self, params: SignInParams) -> Result<UserProfile, UserError> {
if self.is_login(&params.email) {
self.user_detail().await
self.user_profile().await
} else {
let resp = self.server.sign_in(params).await?;
let session = Session::new(&resp.uid, &resp.token, &resp.email);
let _ = self.set_session(Some(session))?;
let user_table = self.save_user(resp.into()).await?;
let user_detail = UserDetail::from(user_table);
Ok(user_detail)
let user_profile = UserProfile::from(user_table);
Ok(user_profile)
}
}
pub async fn sign_up(&self, params: SignUpParams) -> Result<UserDetail, UserError> {
pub async fn sign_up(&self, params: SignUpParams) -> Result<UserProfile, UserError> {
if self.is_login(&params.email) {
self.user_detail().await
self.user_profile().await
} else {
let resp = self.server.sign_up(params).await?;
let session = Session::new(&resp.user_id, &resp.token, &resp.email);
let _ = self.set_session(Some(session))?;
let user_table = self.save_user(resp.into()).await?;
let user_detail = UserDetail::from(user_table);
Ok(user_detail)
let user_profile = UserProfile::from(user_table);
Ok(user_profile)
}
}
@ -127,15 +127,15 @@ impl UserSession {
Ok(())
}
pub async fn user_detail(&self) -> Result<UserDetail, UserError> {
pub async fn user_profile(&self) -> Result<UserProfile, UserError> {
let session = self.get_session()?;
let token = session.token;
let server = self.server.clone();
tokio::spawn(async move {
match server.get_user_detail(&token).await {
Ok(user_detail) => {
match server.get_user(&token).await {
Ok(profile) => {
//
log::info!("{:?}", user_detail);
log::info!("{:?}", profile);
},
Err(e) => {
//
@ -149,7 +149,7 @@ impl UserSession {
.filter(user_table::id.eq(&session.user_id))
.first::<UserTable>(&*(self.get_db_connection()?))?;
Ok(UserDetail::from(user))
Ok(UserProfile::from(user))
}
pub fn user_dir(&self) -> Result<String, UserError> {

View File

@ -50,7 +50,7 @@ fn sign_in_success() {
.event(SignIn)
.request(request)
.sync_send()
.parse::<UserDetail>();
.parse::<UserProfile>();
dbg!(&response);
}

View File

@ -9,7 +9,7 @@ use serial_test::*;
fn user_profile_get_failed() {
let sdk = init_test_sdk();
let result = UserTest::new(sdk).event(GetUserProfile).assert_error().sync_send();
assert!(result.user_detail().is_none())
assert!(result.user_profile().is_none())
}
#[test]
@ -19,7 +19,7 @@ fn user_profile_get() {
let user = UserTest::new(env.sdk.clone())
.event(GetUserProfile)
.sync_send()
.parse::<UserDetail>();
.parse::<UserProfile>();
assert_eq!(env.user, user);
}
@ -31,13 +31,13 @@ fn user_update_with_name() {
let request = UpdateUserRequest::new(&env.user.id).name(&new_name);
let _ = UserTest::new(env.sdk()).event(UpdateUser).request(request).sync_send();
let user_detail = UserTest::new(env.sdk())
let user_profile = UserTest::new(env.sdk())
.event(GetUserProfile)
.assert_error()
.sync_send()
.parse::<UserDetail>();
.parse::<UserProfile>();
assert_eq!(user_detail.name, new_name,);
assert_eq!(user_profile.name, new_name,);
}
#[test]
@ -47,13 +47,13 @@ fn user_update_with_email() {
let new_email = format!("{}@gmai.com", uuid());
let request = UpdateUserRequest::new(&env.user.id).email(&new_email);
let _ = UserTest::new(env.sdk()).event(UpdateUser).request(request).sync_send();
let user_detail = UserTest::new(env.sdk())
let user_profile = UserTest::new(env.sdk())
.event(GetUserProfile)
.assert_error()
.sync_send()
.parse::<UserDetail>();
.parse::<UserProfile>();
assert_eq!(user_detail.email, new_email,);
assert_eq!(user_profile.email, new_email,);
}
#[test]