AppFlowy-Cloud/services/appflowy-history/src/api.rs

58 lines
2.0 KiB
Rust

use crate::application::AppState;
use crate::biz::history::get_snapshots;
use collab_entity::CollabType;
use tonic::{Request, Response, Status};
use tonic_proto::history::history_server::History;
use tonic_proto::history::{RepeatedSnapshotInfoPb, SingleSnapshotInfoPb, SnapshotRequestPb};
pub struct HistoryImpl {
pub state: AppState,
}
/// The `History` trait is automatically generated by the Tonic framework based on the definitions
/// provided in the `history.proto` file.
///
/// ## Modifying RPC Methods
/// - To add new RPC methods or modify existing ones, you should edit the `history.proto` file located at:
/// `libs/tonic-proto/proto/history.proto`
/// - After updating the protobuf file, you need to regenerate the Rust source code to reflect these changes.
///
/// ## Regenerating Code
/// - Code regeneration is handled by the `build.rs` script in the Tonic framework, which processes `.proto` files.
/// - To trigger this script and regenerate the code, run `cargo build` in the `tonic-proto` project.
/// This action rebuilds all project dependencies and updates generated code accordingly.
///
#[tonic::async_trait]
impl History for HistoryImpl {
async fn get_snapshots(
&self,
request: Request<SnapshotRequestPb>,
) -> Result<Response<tonic_proto::history::RepeatedSnapshotMetaPb>, Status> {
let request = request.into_inner();
let collab_type = CollabType::from(request.collab_type);
let data = get_snapshots(&request.object_id, &collab_type, &self.state.pg_pool).await?;
Ok(Response::new(data))
}
async fn get_num_of_snapshot(
&self,
_request: Request<SnapshotRequestPb>,
) -> Result<Response<RepeatedSnapshotInfoPb>, Status> {
todo!()
}
async fn get_latest_snapshot(
&self,
request: Request<SnapshotRequestPb>,
) -> Result<Response<SingleSnapshotInfoPb>, Status> {
let request = request.into_inner();
let resp = self
.state
.open_collab_manager
.get_latest_snapshot(request, &self.state.pg_pool)
.await?;
Ok(Response::new(resp))
}
}