deleteDocument method

Future<bool> deleteDocument({
  1. required String path,
  2. String? ifMatch,
  3. PeerId? toServer,
})

Delete a document from your own store

path Document path (e.g., "profile", "avatar") ifMatch Optional: ETag for conditional delete (prevents accidental deletion of updated documents) toServer Optional: specify which server to use

Returns true if document was deleted, false if not found or error occurred

Implementation

Future<bool> deleteDocument({
  required String path,
  String? ifMatch,
  PeerId? toServer,
}) async {
  final serverId = toServer ?? await _serverSelector.selectServer(config.preferredServers);
  if (serverId == null) {
    _logger.warning('No S&F server available for document DELETE');
    return false;
  }

  try {
    final context = Context();
    final stream = await host.newStream(
      serverId,
      ['/ricochet/store/doc/1.0.0'],
      context,
    ).timeout(config.connectionTimeout);

    final response = await DocumentHandler.deleteDocument(
      stream,
      ownerPeerId: host.id,  // Can only DELETE own documents
      path: path,
      ifMatch: ifMatch,
    ).timeout(config.messageTimeout);

    await stream.close();

    if (response.status == 204) {
      _logger.info('Deleted document: doc/$path');
      return true;
    } else if (response.status == 404) {
      _logger.info('Document not found for deletion: doc/$path');
      return false;
    } else {
      _logger.warning('DELETE document failed with status ${response.status}: ${response.error}');
      return false;
    }
  } on TimeoutException {
    _logger.warning('DELETE document timed out');
    return false;
  } catch (e) {
    _logger.warning('Failed to DELETE document: $e');
    return false;
  }
}