fix: create default workspace after sign in

This commit is contained in:
appflowy 2021-07-24 15:05:47 +08:00
parent c05b772fe6
commit 64b8f37470
16 changed files with 122 additions and 110 deletions

View File

@ -5,8 +5,6 @@ import 'package:freezed_annotation/freezed_annotation.dart';
// ignore: import_of_legacy_library_into_null_safe
import 'package:flutter_bloc/flutter_bloc.dart';
part 'sign_in_event.dart';
part 'sign_in_state.dart';
part 'sign_in_bloc.freezed.dart';
class SignInBloc extends Bloc<SignInEvent, SignInState> {
@ -43,3 +41,27 @@ class SignInBloc extends Bloc<SignInEvent, SignInState> {
);
}
}
@freezed
abstract class SignInEvent with _$SignInEvent {
const factory SignInEvent.signedInWithUserEmailAndPassword() =
SignedInWithUserEmailAndPassword;
const factory SignInEvent.emailChanged(String email) = EmailChanged;
const factory SignInEvent.passwordChanged(String password) = PasswordChanged;
}
@freezed
abstract class SignInState with _$SignInState {
const factory SignInState({
String? email,
String? password,
required bool isSubmitting,
required Option<Either<UserDetail, UserError>> signInFailure,
}) = _SignInState;
factory SignInState.initial() => SignInState(
isSubmitting: false,
signInFailure: none(),
);
}

View File

@ -1,10 +0,0 @@
part of 'sign_in_bloc.dart';
@freezed
abstract class SignInEvent with _$SignInEvent {
const factory SignInEvent.signedInWithUserEmailAndPassword() =
SignedInWithUserEmailAndPassword;
const factory SignInEvent.emailChanged(String email) = EmailChanged;
const factory SignInEvent.passwordChanged(String password) = PasswordChanged;
}

View File

@ -1,16 +0,0 @@
part of 'sign_in_bloc.dart';
@freezed
abstract class SignInState with _$SignInState {
const factory SignInState({
String? email,
String? password,
required bool isSubmitting,
required Option<Either<UserDetail, UserError>> signInFailure,
}) = _SignInState;
factory SignInState.initial() => SignInState(
isSubmitting: false,
signInFailure: none(),
);
}

View File

@ -3,8 +3,6 @@ import 'package:app_flowy/welcome/domain/i_welcome.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'welcome_event.dart';
part 'welcome_state.dart';
part 'welcome_bloc.freezed.dart';
class WelcomeBloc extends Bloc<WelcomeEvent, WelcomeState> {
@ -21,3 +19,19 @@ class WelcomeBloc extends Bloc<WelcomeEvent, WelcomeState> {
);
}
}
@freezed
abstract class WelcomeEvent with _$WelcomeEvent {
const factory WelcomeEvent.getUser() = _GetUser;
}
@freezed
abstract class WelcomeState implements _$WelcomeState {
const factory WelcomeState({
required AuthState auth,
}) = _WelcomeState;
factory WelcomeState.initial() => const WelcomeState(
auth: AuthState.initial(),
);
}

View File

@ -1,6 +0,0 @@
part of 'welcome_bloc.dart';
@freezed
abstract class WelcomeEvent with _$WelcomeEvent {
const factory WelcomeEvent.getUser() = _GetUser;
}

View File

@ -1,12 +0,0 @@
part of 'welcome_bloc.dart';
@freezed
abstract class WelcomeState implements _$WelcomeState {
const factory WelcomeState({
required AuthState auth,
}) = _WelcomeState;
factory WelcomeState.initial() => const WelcomeState(
auth: AuthState.initial(),
);
}

View File

@ -11,7 +11,7 @@ class AppList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return apps.fold(() {
return const Text('You have no apps, create one?');
return const Expanded(child: Text('You have no apps, create one?'));
}, (apps) {
return ExpandableTheme(
data: const ExpandableThemeData(

View File

@ -25,6 +25,7 @@ class UserErrorCode extends $pb.ProtobufEnum {
static const UserErrorCode UserWorkspaceInvalid = UserErrorCode._(23, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UserWorkspaceInvalid');
static const UserErrorCode UserIdInvalid = UserErrorCode._(24, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UserIdInvalid');
static const UserErrorCode CreateDefaultWorkspaceFailed = UserErrorCode._(25, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CreateDefaultWorkspaceFailed');
static const UserErrorCode DefaultWorkspaceAlreadyExist = UserErrorCode._(26, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'DefaultWorkspaceAlreadyExist');
static const $core.List<UserErrorCode> values = <UserErrorCode> [
Unknown,
@ -42,6 +43,7 @@ class UserErrorCode extends $pb.ProtobufEnum {
UserWorkspaceInvalid,
UserIdInvalid,
CreateDefaultWorkspaceFailed,
DefaultWorkspaceAlreadyExist,
];
static final $core.Map<$core.int, UserErrorCode> _byValue = $pb.ProtobufEnum.initByValue(values);

View File

@ -27,11 +27,12 @@ const UserErrorCode$json = const {
const {'1': 'UserWorkspaceInvalid', '2': 23},
const {'1': 'UserIdInvalid', '2': 24},
const {'1': 'CreateDefaultWorkspaceFailed', '2': 25},
const {'1': 'DefaultWorkspaceAlreadyExist', '2': 26},
],
};
/// Descriptor for `UserErrorCode`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List userErrorCodeDescriptor = $convert.base64Decode('Cg1Vc2VyRXJyb3JDb2RlEgsKB1Vua25vd24QABIaChZVc2VyRGF0YWJhc2VJbml0RmFpbGVkEAESGwoXVXNlckRhdGFiYXNlV3JpdGVMb2NrZWQQAhIaChZVc2VyRGF0YWJhc2VSZWFkTG9ja2VkEAMSGwoXVXNlckRhdGFiYXNlRGlkTm90TWF0Y2gQBBIdChlVc2VyRGF0YWJhc2VJbnRlcm5hbEVycm9yEAUSEwoPVXNlck5vdExvZ2luWWV0EAoSFwoTUmVhZEN1cnJlbnRJZEZhaWxlZBALEhgKFFdyaXRlQ3VycmVudElkRmFpbGVkEAwSEAoMRW1haWxJbnZhbGlkEBQSEwoPUGFzc3dvcmRJbnZhbGlkEBUSEwoPVXNlck5hbWVJbnZhbGlkEBYSGAoUVXNlcldvcmtzcGFjZUludmFsaWQQFxIRCg1Vc2VySWRJbnZhbGlkEBgSIAocQ3JlYXRlRGVmYXVsdFdvcmtzcGFjZUZhaWxlZBAZ');
final $typed_data.Uint8List userErrorCodeDescriptor = $convert.base64Decode('Cg1Vc2VyRXJyb3JDb2RlEgsKB1Vua25vd24QABIaChZVc2VyRGF0YWJhc2VJbml0RmFpbGVkEAESGwoXVXNlckRhdGFiYXNlV3JpdGVMb2NrZWQQAhIaChZVc2VyRGF0YWJhc2VSZWFkTG9ja2VkEAMSGwoXVXNlckRhdGFiYXNlRGlkTm90TWF0Y2gQBBIdChlVc2VyRGF0YWJhc2VJbnRlcm5hbEVycm9yEAUSEwoPVXNlck5vdExvZ2luWWV0EAoSFwoTUmVhZEN1cnJlbnRJZEZhaWxlZBALEhgKFFdyaXRlQ3VycmVudElkRmFpbGVkEAwSEAoMRW1haWxJbnZhbGlkEBQSEwoPUGFzc3dvcmRJbnZhbGlkEBUSEwoPVXNlck5hbWVJbnZhbGlkEBYSGAoUVXNlcldvcmtzcGFjZUludmFsaWQQFxIRCg1Vc2VySWRJbnZhbGlkEBgSIAocQ3JlYXRlRGVmYXVsdFdvcmtzcGFjZUZhaWxlZBAZEiAKHERlZmF1bHRXb3Jrc3BhY2VBbHJlYWR5RXhpc3QQGg==');
@$core.Deprecated('Use userErrorDescriptor instead')
const UserError$json = const {
'1': 'UserError',

View File

@ -53,7 +53,8 @@ impl UserServer for FlowyServerMocker {
name: &str,
desc: &str,
_user_id: &str,
) -> DispatchFuture<Result<(), UserError>> {
) -> DispatchFuture<Result<String, UserError>> {
log::info!("Create user workspace: {:?}", name);
let payload: Vec<u8> = CreateWorkspaceRequest {
name: name.to_string(),
desc: desc.to_string(),
@ -64,7 +65,7 @@ impl UserServer for FlowyServerMocker {
let request = ModuleRequest::new(CreateWorkspace).payload(payload);
DispatchFuture {
fut: Box::pin(async move {
let _ = EventDispatch::async_send(request)
let result = EventDispatch::async_send(request)
.await
.parse::<Workspace, WorkspaceError>()
.map_err(|e| {
@ -72,7 +73,13 @@ impl UserServer for FlowyServerMocker {
.error(e)
.build()
})?;
Ok(())
let workspace = result.map_err(|e| {
ErrorBuilder::new(UserErrorCode::CreateDefaultWorkspaceFailed)
.error(e)
.build()
})?;
Ok(workspace.id)
}),
}
}

View File

@ -55,6 +55,9 @@ pub enum UserErrorCode {
UserIdInvalid = 24,
#[display(fmt = "Create user default workspace failed")]
CreateDefaultWorkspaceFailed = 25,
#[display(fmt = "User default workspace already exists")]
DefaultWorkspaceAlreadyExist = 26,
}
impl std::default::Default for UserErrorCode {

View File

@ -230,6 +230,7 @@ pub enum UserErrorCode {
UserWorkspaceInvalid = 23,
UserIdInvalid = 24,
CreateDefaultWorkspaceFailed = 25,
DefaultWorkspaceAlreadyExist = 26,
}
impl ::protobuf::ProtobufEnum for UserErrorCode {
@ -254,6 +255,7 @@ impl ::protobuf::ProtobufEnum for UserErrorCode {
23 => ::std::option::Option::Some(UserErrorCode::UserWorkspaceInvalid),
24 => ::std::option::Option::Some(UserErrorCode::UserIdInvalid),
25 => ::std::option::Option::Some(UserErrorCode::CreateDefaultWorkspaceFailed),
26 => ::std::option::Option::Some(UserErrorCode::DefaultWorkspaceAlreadyExist),
_ => ::std::option::Option::None
}
}
@ -275,6 +277,7 @@ impl ::protobuf::ProtobufEnum for UserErrorCode {
UserErrorCode::UserWorkspaceInvalid,
UserErrorCode::UserIdInvalid,
UserErrorCode::CreateDefaultWorkspaceFailed,
UserErrorCode::DefaultWorkspaceAlreadyExist,
];
values
}
@ -305,7 +308,7 @@ impl ::protobuf::reflect::ProtobufValue for UserErrorCode {
static file_descriptor_proto_data: &'static [u8] = b"\
\n\x0cerrors.proto\"A\n\tUserError\x12\"\n\x04code\x18\x01\x20\x01(\x0e2\
\x0e.UserErrorCodeR\x04code\x12\x10\n\x03msg\x18\x02\x20\x01(\tR\x03msg*\
\x80\x03\n\rUserErrorCode\x12\x0b\n\x07Unknown\x10\0\x12\x1a\n\x16UserDa\
\xa2\x03\n\rUserErrorCode\x12\x0b\n\x07Unknown\x10\0\x12\x1a\n\x16UserDa\
tabaseInitFailed\x10\x01\x12\x1b\n\x17UserDatabaseWriteLocked\x10\x02\
\x12\x1a\n\x16UserDatabaseReadLocked\x10\x03\x12\x1b\n\x17UserDatabaseDi\
dNotMatch\x10\x04\x12\x1d\n\x19UserDatabaseInternalError\x10\x05\x12\x13\
@ -313,46 +316,49 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\x18\n\x14WriteCurrentIdFailed\x10\x0c\x12\x10\n\x0cEmailInvalid\x10\x14\
\x12\x13\n\x0fPasswordInvalid\x10\x15\x12\x13\n\x0fUserNameInvalid\x10\
\x16\x12\x18\n\x14UserWorkspaceInvalid\x10\x17\x12\x11\n\rUserIdInvalid\
\x10\x18\x12\x20\n\x1cCreateDefaultWorkspaceFailed\x10\x19J\x97\x06\n\
\x06\x12\x04\0\0\x16\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\x04\0\
\x12\x04\x02\0\x05\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\x1b\n\x0c\n\x05\x04\0\x02\0\x06\x12\x03\
\x03\x04\x11\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x03\x12\x16\n\x0c\n\x05\
\x04\0\x02\0\x03\x12\x03\x03\x19\x1a\n\x0b\n\x04\x04\0\x02\x01\x12\x03\
\x04\x04\x13\n\x0c\n\x05\x04\0\x02\x01\x05\x12\x03\x04\x04\n\n\x0c\n\x05\
\x04\0\x02\x01\x01\x12\x03\x04\x0b\x0e\n\x0c\n\x05\x04\0\x02\x01\x03\x12\
\x03\x04\x11\x12\n\n\n\x02\x05\0\x12\x04\x06\0\x16\x01\n\n\n\x03\x05\0\
\x01\x12\x03\x06\x05\x12\n\x0b\n\x04\x05\0\x02\0\x12\x03\x07\x04\x10\n\
\x0c\n\x05\x05\0\x02\0\x01\x12\x03\x07\x04\x0b\n\x0c\n\x05\x05\0\x02\0\
\x02\x12\x03\x07\x0e\x0f\n\x0b\n\x04\x05\0\x02\x01\x12\x03\x08\x04\x1f\n\
\x0c\n\x05\x05\0\x02\x01\x01\x12\x03\x08\x04\x1a\n\x0c\n\x05\x05\0\x02\
\x01\x02\x12\x03\x08\x1d\x1e\n\x0b\n\x04\x05\0\x02\x02\x12\x03\t\x04\x20\
\n\x0c\n\x05\x05\0\x02\x02\x01\x12\x03\t\x04\x1b\n\x0c\n\x05\x05\0\x02\
\x02\x02\x12\x03\t\x1e\x1f\n\x0b\n\x04\x05\0\x02\x03\x12\x03\n\x04\x1f\n\
\x0c\n\x05\x05\0\x02\x03\x01\x12\x03\n\x04\x1a\n\x0c\n\x05\x05\0\x02\x03\
\x02\x12\x03\n\x1d\x1e\n\x0b\n\x04\x05\0\x02\x04\x12\x03\x0b\x04\x20\n\
\x0c\n\x05\x05\0\x02\x04\x01\x12\x03\x0b\x04\x1b\n\x0c\n\x05\x05\0\x02\
\x04\x02\x12\x03\x0b\x1e\x1f\n\x0b\n\x04\x05\0\x02\x05\x12\x03\x0c\x04\"\
\n\x0c\n\x05\x05\0\x02\x05\x01\x12\x03\x0c\x04\x1d\n\x0c\n\x05\x05\0\x02\
\x05\x02\x12\x03\x0c\x20!\n\x0b\n\x04\x05\0\x02\x06\x12\x03\r\x04\x19\n\
\x0c\n\x05\x05\0\x02\x06\x01\x12\x03\r\x04\x13\n\x0c\n\x05\x05\0\x02\x06\
\x02\x12\x03\r\x16\x18\n\x0b\n\x04\x05\0\x02\x07\x12\x03\x0e\x04\x1d\n\
\x0c\n\x05\x05\0\x02\x07\x01\x12\x03\x0e\x04\x17\n\x0c\n\x05\x05\0\x02\
\x07\x02\x12\x03\x0e\x1a\x1c\n\x0b\n\x04\x05\0\x02\x08\x12\x03\x0f\x04\
\x1e\n\x0c\n\x05\x05\0\x02\x08\x01\x12\x03\x0f\x04\x18\n\x0c\n\x05\x05\0\
\x02\x08\x02\x12\x03\x0f\x1b\x1d\n\x0b\n\x04\x05\0\x02\t\x12\x03\x10\x04\
\x16\n\x0c\n\x05\x05\0\x02\t\x01\x12\x03\x10\x04\x10\n\x0c\n\x05\x05\0\
\x02\t\x02\x12\x03\x10\x13\x15\n\x0b\n\x04\x05\0\x02\n\x12\x03\x11\x04\
\x19\n\x0c\n\x05\x05\0\x02\n\x01\x12\x03\x11\x04\x13\n\x0c\n\x05\x05\0\
\x02\n\x02\x12\x03\x11\x16\x18\n\x0b\n\x04\x05\0\x02\x0b\x12\x03\x12\x04\
\x19\n\x0c\n\x05\x05\0\x02\x0b\x01\x12\x03\x12\x04\x13\n\x0c\n\x05\x05\0\
\x02\x0b\x02\x12\x03\x12\x16\x18\n\x0b\n\x04\x05\0\x02\x0c\x12\x03\x13\
\x04\x1e\n\x0c\n\x05\x05\0\x02\x0c\x01\x12\x03\x13\x04\x18\n\x0c\n\x05\
\x05\0\x02\x0c\x02\x12\x03\x13\x1b\x1d\n\x0b\n\x04\x05\0\x02\r\x12\x03\
\x14\x04\x17\n\x0c\n\x05\x05\0\x02\r\x01\x12\x03\x14\x04\x11\n\x0c\n\x05\
\x05\0\x02\r\x02\x12\x03\x14\x14\x16\n\x0b\n\x04\x05\0\x02\x0e\x12\x03\
\x15\x04&\n\x0c\n\x05\x05\0\x02\x0e\x01\x12\x03\x15\x04\x20\n\x0c\n\x05\
\x05\0\x02\x0e\x02\x12\x03\x15#%b\x06proto3\
\x10\x18\x12\x20\n\x1cCreateDefaultWorkspaceFailed\x10\x19\x12\x20\n\x1c\
DefaultWorkspaceAlreadyExist\x10\x1aJ\xc0\x06\n\x06\x12\x04\0\0\x17\x01\
\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\n\n\x02\x04\0\x12\x04\x02\0\x05\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\x1b\n\x0c\n\x05\x04\0\x02\0\x06\x12\x03\x03\x04\x11\n\x0c\n\x05\
\x04\0\x02\0\x01\x12\x03\x03\x12\x16\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\
\x03\x19\x1a\n\x0b\n\x04\x04\0\x02\x01\x12\x03\x04\x04\x13\n\x0c\n\x05\
\x04\0\x02\x01\x05\x12\x03\x04\x04\n\n\x0c\n\x05\x04\0\x02\x01\x01\x12\
\x03\x04\x0b\x0e\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03\x04\x11\x12\n\n\n\
\x02\x05\0\x12\x04\x06\0\x17\x01\n\n\n\x03\x05\0\x01\x12\x03\x06\x05\x12\
\n\x0b\n\x04\x05\0\x02\0\x12\x03\x07\x04\x10\n\x0c\n\x05\x05\0\x02\0\x01\
\x12\x03\x07\x04\x0b\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\x07\x0e\x0f\n\
\x0b\n\x04\x05\0\x02\x01\x12\x03\x08\x04\x1f\n\x0c\n\x05\x05\0\x02\x01\
\x01\x12\x03\x08\x04\x1a\n\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\x08\x1d\
\x1e\n\x0b\n\x04\x05\0\x02\x02\x12\x03\t\x04\x20\n\x0c\n\x05\x05\0\x02\
\x02\x01\x12\x03\t\x04\x1b\n\x0c\n\x05\x05\0\x02\x02\x02\x12\x03\t\x1e\
\x1f\n\x0b\n\x04\x05\0\x02\x03\x12\x03\n\x04\x1f\n\x0c\n\x05\x05\0\x02\
\x03\x01\x12\x03\n\x04\x1a\n\x0c\n\x05\x05\0\x02\x03\x02\x12\x03\n\x1d\
\x1e\n\x0b\n\x04\x05\0\x02\x04\x12\x03\x0b\x04\x20\n\x0c\n\x05\x05\0\x02\
\x04\x01\x12\x03\x0b\x04\x1b\n\x0c\n\x05\x05\0\x02\x04\x02\x12\x03\x0b\
\x1e\x1f\n\x0b\n\x04\x05\0\x02\x05\x12\x03\x0c\x04\"\n\x0c\n\x05\x05\0\
\x02\x05\x01\x12\x03\x0c\x04\x1d\n\x0c\n\x05\x05\0\x02\x05\x02\x12\x03\
\x0c\x20!\n\x0b\n\x04\x05\0\x02\x06\x12\x03\r\x04\x19\n\x0c\n\x05\x05\0\
\x02\x06\x01\x12\x03\r\x04\x13\n\x0c\n\x05\x05\0\x02\x06\x02\x12\x03\r\
\x16\x18\n\x0b\n\x04\x05\0\x02\x07\x12\x03\x0e\x04\x1d\n\x0c\n\x05\x05\0\
\x02\x07\x01\x12\x03\x0e\x04\x17\n\x0c\n\x05\x05\0\x02\x07\x02\x12\x03\
\x0e\x1a\x1c\n\x0b\n\x04\x05\0\x02\x08\x12\x03\x0f\x04\x1e\n\x0c\n\x05\
\x05\0\x02\x08\x01\x12\x03\x0f\x04\x18\n\x0c\n\x05\x05\0\x02\x08\x02\x12\
\x03\x0f\x1b\x1d\n\x0b\n\x04\x05\0\x02\t\x12\x03\x10\x04\x16\n\x0c\n\x05\
\x05\0\x02\t\x01\x12\x03\x10\x04\x10\n\x0c\n\x05\x05\0\x02\t\x02\x12\x03\
\x10\x13\x15\n\x0b\n\x04\x05\0\x02\n\x12\x03\x11\x04\x19\n\x0c\n\x05\x05\
\0\x02\n\x01\x12\x03\x11\x04\x13\n\x0c\n\x05\x05\0\x02\n\x02\x12\x03\x11\
\x16\x18\n\x0b\n\x04\x05\0\x02\x0b\x12\x03\x12\x04\x19\n\x0c\n\x05\x05\0\
\x02\x0b\x01\x12\x03\x12\x04\x13\n\x0c\n\x05\x05\0\x02\x0b\x02\x12\x03\
\x12\x16\x18\n\x0b\n\x04\x05\0\x02\x0c\x12\x03\x13\x04\x1e\n\x0c\n\x05\
\x05\0\x02\x0c\x01\x12\x03\x13\x04\x18\n\x0c\n\x05\x05\0\x02\x0c\x02\x12\
\x03\x13\x1b\x1d\n\x0b\n\x04\x05\0\x02\r\x12\x03\x14\x04\x17\n\x0c\n\x05\
\x05\0\x02\r\x01\x12\x03\x14\x04\x11\n\x0c\n\x05\x05\0\x02\r\x02\x12\x03\
\x14\x14\x16\n\x0b\n\x04\x05\0\x02\x0e\x12\x03\x15\x04&\n\x0c\n\x05\x05\
\0\x02\x0e\x01\x12\x03\x15\x04\x20\n\x0c\n\x05\x05\0\x02\x0e\x02\x12\x03\
\x15#%\n\x0b\n\x04\x05\0\x02\x0f\x12\x03\x16\x04&\n\x0c\n\x05\x05\0\x02\
\x0f\x01\x12\x03\x16\x04\x20\n\x0c\n\x05\x05\0\x02\x0f\x02\x12\x03\x16#%\
b\x06proto3\
";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View File

@ -20,4 +20,5 @@ enum UserErrorCode {
UserWorkspaceInvalid = 23;
UserIdInvalid = 24;
CreateDefaultWorkspaceFailed = 25;
DefaultWorkspaceAlreadyExist = 26;
}

View File

@ -19,5 +19,5 @@ pub trait UserServer {
name: &str,
desc: &str,
user_id: &str,
) -> DispatchFuture<Result<(), UserError>>;
) -> DispatchFuture<Result<String, UserError>>;
}

View File

@ -63,21 +63,16 @@ impl UserSession {
pub async fn sign_in(&self, params: SignInParams) -> Result<UserTable, UserError> {
let user = self.server.sign_in(params)?;
let _ = self.set_user_id(Some(user.id.clone()))?;
let user_table = self.save_user(user).await?;
let user_table = self.save_user(user)?;
let _ = self
.create_default_workspace_if_need(&user_table.id)
.await?;
Ok(user_table)
}
pub async fn sign_up(&self, params: SignUpParams) -> Result<UserTable, UserError> {
let user = self.server.sign_up(params)?;
let _ = self.set_user_id(Some(user.id.clone()))?;
let user_table = self.save_user(user)?;
let _ = self
.create_default_workspace_if_need(&user_table.id)
.await?;
let user_table = self.save_user(user).await?;
Ok(user_table)
}
@ -96,7 +91,13 @@ impl UserSession {
Ok(())
}
fn save_user(&self, user: UserTable) -> Result<UserTable, UserError> {
async fn save_user(&self, mut user: UserTable) -> Result<UserTable, UserError> {
if user.workspace.is_empty() {
log::info!("Try to create user default workspace");
let workspace_id = self.create_default_workspace_if_need(&user.id).await?;
user.workspace = workspace_id;
}
let conn = self.get_db_connection()?;
let _ = diesel::insert_into(user_table::table)
.values(user.clone())
@ -188,19 +189,18 @@ impl UserSession {
Ok(())
}
async fn create_default_workspace_if_need(&self, user_id: &str) -> Result<(), UserError> {
async fn create_default_workspace_if_need(&self, user_id: &str) -> Result<String, UserError> {
let key = format!("{}{}", user_id, DEFAULT_WORKSPACE);
if KVStore::get_bool(&key).unwrap_or(false) {
return Ok(());
return Err(ErrorBuilder::new(UserErrorCode::DefaultWorkspaceAlreadyExist).build());
}
KVStore::set_bool(&key, true);
log::debug!("Create user:{} default workspace", user_id);
let _ = self
let workspace_id = self
.server
.create_workspace(DEFAULT_WORKSPACE_NAME, DEFAULT_WORKSPACE_DESC, user_id)
.await?;
Ok(())
Ok(workspace_id)
}
}

View File

@ -36,7 +36,7 @@ impl WorkspaceController {
let workspace_table = WorkspaceTable::new(params);
let detail: Workspace = workspace_table.clone().into();
let _ = self.sql.create_workspace(workspace_table)?;
let _ = self.user.set_cur_workspace_id(&detail.id).await?;
// let _ = self.user.set_cur_workspace_id(&detail.id).await?;
Ok(detail)
}