signupWithCredentials method

  1. @override
Future<Either<Failure, AuthenticationData?>> signupWithCredentials(
  1. AuthSignUpPayload payload
)
override

Implementation

@override
Future<Either<Failure, AuthenticationData?>> signupWithCredentials(
    AuthSignUpPayload payload) async {
  AuthDeviceInfo? authDeviceInfo;
  return wrapAndHandleHttpBaseRequest(
    () async {
      if (config.provideDeviceInfo) {
        payload = payload.copyWith(
          deviceInfo: await AuthDeviceInfoModel.create(),
        );
      }
      final url = config.signupCredentialsAPIendpoint();
      final data = payload.toMap();
      // let's check if payload data already has device info
      // if not we can add it if applies
      if (data["deviceInfo"] == null && config.provideDeviceInfo) {
        authDeviceInfo = await AuthDeviceInfoModel.create();
        data["deviceInfo"] = authDeviceInfo!.toMap();
      } else if (config.provideDeviceInfo) {
        authDeviceInfo = payload.deviceInfo;
      }

      final requestBody = jsonEncode(data);
      logger.v("Signup with credentials at API: $url");
      // logger.v("Request body is $requestBody");

      final request = Request(
        "POST",
        url,
      )..body = requestBody;
      return request;
    },
    onResponse: (response, left, right) async {
      AuthenticationData? authData;

      if (config.customSignupCredentialsResponseParser != null) {
        authData = await config
            .customSignupCredentialsResponseParser!(response.body);
      } else {
        authData = defaultAuthenticationDataParser(response.body)!;
      }

      /// check if we have an authData extracted from response
      /// so we can store the session
      if (authData != null && config.authenticateOnSignup) {
        await storeAuthDataSession(authData.copyWith(
          deviceInfo: authDeviceInfo,
        ));
      }

      logger.v("Login successfully");
      return right(
        authData,
      );
    },
  );
}