bind method
Future<void>
bind(
- UserMeta user
)
Implementation
Future<void> bind(UserMeta user) async {
List<Future> work = [];
work.add(
$crud
.ensureExists<U>(user.user.uid, createUserModel(user))
.bang
.then((i) => _user.add(i)),
);
work.add(
$crud
.model<U>(user.user.uid)
.ensureExistsUnique<S>(createUserSettingsModel(user))
.bang
.then((i) => _settings.add(i)),
);
work.add(
$crud
.model<U>(user.user.uid)
.getUnique<C>()
.then((i) => i ?? createUserCapabilitiesModel(user))
.then((i) => _capabilities.add(i)),
);
await Future.wait(work);
_uSubscription = $crud.stream<U>(user.user.uid).listen(_user.add);
_sSubscription = $crud
.model<U>(user.user.uid)
.streamUnique<S>()
.listen(_settings.add);
_cSubscription = $crud
.model<U>(user.user.uid)
.streamUnique<C>()
.map((i) => i ?? createUserCapabilitiesModel(user))
.listen(_capabilities.add);
try {
onLoggedIn(_user.value!);
} catch (e, es) {}
try {
await onPostBind(_user.value!);
} catch (e, es) {
error("Failed to post bind service after user sign-in.");
error(e);
error(es);
}
}