createUserApi static method

Future<Result<Map<String, dynamic>?>> createUserApi({
  1. required String email,
  2. required String name,
  3. String? dob,
  4. String? gender,
})

Implementation

static Future<Result<Map<String, dynamic>?>> createUserApi({
  required String email,
  required String name,
  String? dob,
  String? gender,
}) async {
  final result = await checkKwikpassHealth();
  if(result.isSuccess) {
    final healthData = result.getDataOrThrow();
    if(healthData?.isKwikpassHealthy == false){
      throw Exception('Kwikpass is unhealthy');
    }
  }

  try {
    final gokwik = DioClient().getClient();

    final response = (await gokwik.post(
      cdnConfigInstance.getEndpoint(APIEndpointKeys.customCreateUser)!,
      data: {
        'email': email,
        'name': name,
        if (dob != null) 'dob': dob,
        if (gender != null) 'gender': gender,
      },
    ))
        .toBaseResponse(
      fromJson: (json) => json,
    );
    if (response.isSuccess == false) {
      return Failure(response.errorMessage ?? 'Failed to create user');
    }

    final data = response.data;
    final merchantResponse = data?['merchantResponse']?['accountCreate'];
    final errors = merchantResponse?['accountErrors'];

    if (merchantResponse?['user'] == null &&
        errors != null &&
        errors.isNotEmpty) {
      throw errors[0];
    }

    final userRes = {
      'email': email,
      'username': name,
      'dob': dob,
      'gender': gender,
      'isSuccess': true,
      'emailRequired': true,
      'merchantResponse': {
        'csrfToken': merchantResponse?['user']?['csrfToken'],
        'id': merchantResponse?['user']?['id'],
        'token': merchantResponse?['user']?['token'],
        'refreshToken': merchantResponse?['user']?['refreshToken'],
        'email': email,
      },
    };

    await cacheInstance.setValue(
      cdnConfigInstance.getKeys(StorageKeyKeys.gkVerifiedUserKey)!,
      jsonEncode(userRes),
    );

    return Success(userRes);
  } catch (err) {
    throw handleApiError(err);
  }
}