createUserProfile static method

Future<UserProfileModel> createUserProfile(
  1. Session session,
  2. UuidValue authUserId,
  3. UserProfileData userProfile, {
  4. Transaction? transaction,
})

Creates a new user profile and stores it in the database.

Implementation

static Future<UserProfileModel> createUserProfile(
  final Session session,
  final UuidValue authUserId,
  UserProfileData userProfile, {
  final Transaction? transaction,
}) async {
  return DatabaseUtil.runInTransactionOrSavepoint(
    session.db,
    transaction,
    (final transaction) async {
      final onBeforeUserProfileCreated =
          UserProfileConfig.current.onBeforeUserProfileCreated;
      if (onBeforeUserProfileCreated != null) {
        userProfile = await onBeforeUserProfileCreated(
          session,
          authUserId,
          userProfile,
          transaction: transaction,
        );
      }

      userProfile = userProfile.copyWith(
        email: userProfile.email?.toLowerCase().trim(),
      );

      final createdProfile = await UserProfile.db.insertRow(
        session,
        UserProfile(
          authUserId: authUserId,
          userName: userProfile.userName,
          fullName: userProfile.fullName,
          email: userProfile.email,
        ),
        transaction: transaction,
      );

      final createdProfileModel = createdProfile.toModel();

      await UserProfileConfig.current.onAfterUserProfileCreated?.call(
        session,
        createdProfileModel,
        transaction: transaction,
      );

      return createdProfileModel;
    },
  );
}