checkForUpdate method

Future<UpdateInfo> checkForUpdate({
  1. String? platform,
  2. String? currentVersion,
  3. bool useProduction = true,
})

Implementation

Future<UpdateInfo> checkForUpdate({
  String? platform,
  String? currentVersion,
  bool useProduction = true,
}) async {
  try {
    String baseUrl = useProduction
        ? ApiConfig.baseURLProd
        : ApiConfig.baseURLDev;

    AppLogger.info(
      'Using ${useProduction ? "production" : "development"} API: $baseUrl',
      'VersionCheckerService',
    );

    final String appVersion = currentVersion ?? await getVersion();
    final String platformName = _platform;

    AppLogger.debug(
      'App version: $appVersion, Platform: $platformName, App ID: $appID',
      'VersionCheckerService',
    );

    final uri = Uri.parse(baseUrl).replace(
      queryParameters: {
        'app_id': appID,
        'current_version': appVersion,
        'platform': platformName,
      },
    );

    AppLogger.info(
      'Requesting update check from: ${uri.toString()}',
      'VersionCheckerService',
    );

    final response = await http.get(uri);

    AppLogger.debug(
      'API response - Status: ${response.statusCode}, '
          'Body length: ${response.body.length}',
      'VersionCheckerService',
    );

    final jsonData = json.decode(response.body) as Map<String, dynamic>;
    final apiResponse = ApiResponse.fromJson({
      'status_code': response.statusCode,
      'is_success': response.statusCode == 200 || response.statusCode == 201,
      'message': jsonData['message'],
      'data': jsonData['data'],
    });

    AppLogger.info('API response: $jsonData');

    if (!apiResponse.isSuccess) {
      AppLogger.error(
        'API request failed - Status: ${apiResponse.statusCode}, '
            'Message: ${apiResponse.message}',
        null,
        'VersionCheckerService',
      );
      throw AppException(
        apiResponse.message.toString(),
        apiResponse.statusCode,
      );
    }

    if (apiResponse.data == null) {
      AppLogger.warning(
        'API returned success but no data',
        'VersionCheckerService',
      );
      throw AppException('No data found', 404);
    }

    AppLogger.info(
      'Update check successful - hasUpdate: ${apiResponse.data!.updateAvailable}',
      'VersionCheckerService',
    );

    return apiResponse.data!;
  } catch (e, stackTrace) {
    if (e is AppException) {
      AppLogger.error(
        'Update check failed with AppException',
        e,
        'VersionCheckerService',
      );
      rethrow;
    }
    AppLogger.error(
      'Update check failed with unexpected error',
      e,
      'VersionCheckerService',
    );
    AppLogger.debug('Stack trace: $stackTrace', 'VersionCheckerService');
    throw AppException(e.toString(), 500);
  }
}