blob: 4f4fa3c6d5849ea0110b40755d367d94dbc931dd [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PERIDOT_BIN_CLOUD_PROVIDER_FIRESTORE_FIRESTORE_FIRESTORE_SERVICE_H_
#define PERIDOT_BIN_CLOUD_PROVIDER_FIRESTORE_FIRESTORE_FIRESTORE_SERVICE_H_
#include <functional>
#include <google/firestore/v1beta1/document.pb.h>
#include <google/firestore/v1beta1/firestore.grpc.pb.h>
#include <lib/fit/function.h>
#include <lib/fxl/macros.h>
#include "peridot/bin/cloud_provider_firestore/firestore/listen_call_client.h"
namespace cloud_provider_firestore {
// Client library for Firestore.
//
// Manages access to a particular Firestore database.
//
// Requests methods are assumed to be called on the |main_runner| thread. All
// client callbacks are called on the |main_runner|.
class FirestoreService {
public:
FirestoreService() {}
virtual ~FirestoreService() {}
// Returns the Firestore path to the managed database.
//
// The returned value is in the format:
// `projects/{project_id}/databases/{database_id}`.
virtual const std::string& GetDatabasePath() = 0;
// Returns the Firestore path to the root of the resource tree of the managed
// database.
//
// The returned value is in the format:
// `projects/{project_id}/databases/{database_id}/documents`.
virtual const std::string& GetRootPath() = 0;
// Gets a single document.
virtual void GetDocument(
google::firestore::v1beta1::GetDocumentRequest request,
std::shared_ptr<grpc::CallCredentials> call_credentials,
fit::function<void(grpc::Status, google::firestore::v1beta1::Document)>
callback) = 0;
// Lists documents.
virtual void ListDocuments(
google::firestore::v1beta1::ListDocumentsRequest request,
std::shared_ptr<grpc::CallCredentials> call_credentials,
fit::function<void(grpc::Status,
google::firestore::v1beta1::ListDocumentsResponse)>
callback) = 0;
// Creates a new document.
virtual void CreateDocument(
google::firestore::v1beta1::CreateDocumentRequest request,
std::shared_ptr<grpc::CallCredentials> call_credentials,
fit::function<void(grpc::Status, google::firestore::v1beta1::Document)>
callback) = 0;
// Deletes a document.
virtual void DeleteDocument(
google::firestore::v1beta1::DeleteDocumentRequest request,
std::shared_ptr<grpc::CallCredentials> call_credentials,
fit::function<void(grpc::Status)> callback) = 0;
// Commits a transaction, while optionally updating documents.
virtual void Commit(
google::firestore::v1beta1::CommitRequest request,
std::shared_ptr<grpc::CallCredentials> call_credentials,
fit::function<void(grpc::Status,
google::firestore::v1beta1::CommitResponse)>
callback) = 0;
// Runs a query.
virtual void RunQuery(
google::firestore::v1beta1::RunQueryRequest request,
std::shared_ptr<grpc::CallCredentials> call_credentials,
fit::function<
void(grpc::Status,
std::vector<google::firestore::v1beta1::RunQueryResponse>)>
callback) = 0;
// Initiates a stream to watch for change notifications.
virtual std::unique_ptr<ListenCallHandler> Listen(
std::shared_ptr<grpc::CallCredentials> call_credentials,
ListenCallClient* client) = 0;
// Shuts the client down.
//
// It is not allowed to make any calls on FirestoreService after ShutDown()
// was called.
//
// It is only safe to delete the class after the callback is called.
virtual void ShutDown(fit::closure callback) = 0;
private:
FXL_DISALLOW_COPY_AND_ASSIGN(FirestoreService);
};
} // namespace cloud_provider_firestore
#endif // PERIDOT_BIN_CLOUD_PROVIDER_FIRESTORE_FIRESTORE_FIRESTORE_SERVICE_H_