use crate::{ entities::app::{AppIdPB, AppPB, CreateAppParams, CreateAppPayloadPB, UpdateAppParams, UpdateAppPayloadPB}, errors::FlowyError, services::{AppController, TrashController, ViewController}, }; use flowy_folder_data_model::revision::TrashRevision; use lib_dispatch::prelude::{data_result, AppData, Data, DataResult}; use std::{convert::TryInto, sync::Arc}; pub(crate) async fn create_app_handler( data: Data, controller: AppData>, ) -> DataResult { let params: CreateAppParams = data.into_inner().try_into()?; let detail = controller.create_app_from_params(params).await?; data_result(detail) } pub(crate) async fn delete_app_handler( data: Data, app_controller: AppData>, trash_controller: AppData>, ) -> Result<(), FlowyError> { let params: AppIdPB = data.into_inner(); let trash = app_controller .read_local_apps(vec![params.value]) .await? .into_iter() .map(|app_rev| app_rev.into()) .collect::>(); let _ = trash_controller.add(trash).await?; Ok(()) } #[tracing::instrument(level = "debug", skip(data, controller))] pub(crate) async fn update_app_handler( data: Data, controller: AppData>, ) -> Result<(), FlowyError> { let params: UpdateAppParams = data.into_inner().try_into()?; let _ = controller.update_app(params).await?; Ok(()) } #[tracing::instrument(level = "trace", skip(data, app_controller, view_controller))] pub(crate) async fn read_app_handler( data: Data, app_controller: AppData>, view_controller: AppData>, ) -> DataResult { let params: AppIdPB = data.into_inner(); let mut app_rev = app_controller.read_app(params.clone()).await?; app_rev.belongings = view_controller.read_views_belong_to(¶ms.value).await?; data_result(app_rev.into()) }