writeNewUser method

Future<UserChangeEnum?> writeNewUser(
  1. UserDto userDto
)

Implementation

Future<UserChangeEnum?> writeNewUser(UserDto userDto) async {
  UserChangeEnum? userChangeEnum;
  userTools.clearUserCache();
  // Read the latest user entry with newly assigned id
  UserDto? currentUserDto =
      await userTools.getCurrentUserDto(smd, transaction);
  int? newId = userDto.id;

  if (currentUserDto!.id != newId) {
    // rewrite the Ids
    UserStoreDto? userStoreDto =
        await userTools.getCurrentUserStoreDto(smd, transaction);
    int? userStoreId = userStoreDto!.id;

    // Modify user_store entry id
    try {
      UserStoreTrDao userStoreTrDao = UserStoreTrDao(smdSys, transaction);
      await userStoreTrDao.init();
      await userStoreTrDao.modifyField(userStoreId!, newId!, 'id');
    } on SqlException catch (e) {
      if (e.sqlExceptionEnum == SqlExceptionEnum.ENTRY_NOT_FOUND ||
          e.sqlExceptionEnum == SqlExceptionEnum.PARTITION_NOT_FOUND)
        print(e.cause);
    }
    try {
      UserStoreDao userStoreDao = UserStoreDao(smd, transaction);
      await userStoreDao.init();
      await userStoreDao.modifyId(userStoreId!, newId!);
    } on SqlException catch (e) {
      if (e.sqlExceptionEnum == SqlExceptionEnum.ENTRY_NOT_FOUND ||
          e.sqlExceptionEnum == SqlExceptionEnum.PARTITION_NOT_FOUND)
        print(e.cause);
    }
    userChangeEnum = UserChangeEnum.USER_ID;
  }
  if (userDto.warden != currentUserDto.warden) {
    userChangeEnum = UserChangeEnum.WARDEN;
  }
  if (userDto.pass_key == null) {
    userDto.pass_key = currentUserDto.pass_key;
    userChangeEnum = UserChangeEnum.PASS_KEY;
  }
  await userTools.setCurrentUserDto(smd, transaction, userDto);
  return userChangeEnum;
}