Merge pull request #919 from AppFlowy-IO/template-publish-info

feat: add publish info to template
This commit is contained in:
Khor Shu Heng 2024-10-22 23:25:52 +08:00 committed by GitHub
commit f74b6a37bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 69 additions and 18 deletions

View File

@ -2,8 +2,8 @@ use client_api_entity::{
AccountLink, CreateTemplateCategoryParams, CreateTemplateCreatorParams, CreateTemplateParams,
GetTemplateCategoriesQueryParams, GetTemplateCreatorsQueryParams, GetTemplatesQueryParams,
Template, TemplateCategories, TemplateCategory, TemplateCategoryType, TemplateCreator,
TemplateCreators, Templates, UpdateTemplateCategoryParams, UpdateTemplateCreatorParams,
UpdateTemplateParams,
TemplateCreators, TemplateWithPublishInfo, Templates, UpdateTemplateCategoryParams,
UpdateTemplateCreatorParams, UpdateTemplateParams,
};
use reqwest::Method;
use shared_entity::response::{AppResponse, AppResponseError};
@ -231,7 +231,10 @@ impl Client {
.into_data()
}
pub async fn get_template(&self, view_id: Uuid) -> Result<Template, AppResponseError> {
pub async fn get_template(
&self,
view_id: Uuid,
) -> Result<TemplateWithPublishInfo, AppResponseError> {
let url = template_resource_url(&self.base_url, view_id);
let resp = self
.http_client_without_auth(Method::GET, &url)
@ -239,7 +242,7 @@ impl Client {
.send()
.await?;
AppResponse::<Template>::from_response(resp)
AppResponse::<TemplateWithPublishInfo>::from_response(resp)
.await?
.into_data()
}

View File

@ -408,7 +408,7 @@ pub struct AFCollabMember {
pub permission: AFPermission,
}
#[derive(Debug, Serialize, Deserialize)]
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct PublishInfo {
pub namespace: Option<String>,
pub publish_name: String,
@ -1220,7 +1220,7 @@ pub enum TemplateCategoryType {
Feature = 1,
}
#[derive(Serialize, Deserialize, Debug)]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TemplateCategory {
pub id: Uuid,
pub name: String,
@ -1231,7 +1231,7 @@ pub struct TemplateCategory {
pub priority: i32,
}
#[derive(Serialize, Deserialize, Debug)]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TemplateCategoryMinimal {
pub id: Uuid,
pub name: String,
@ -1270,13 +1270,13 @@ pub struct TemplateCreators {
pub creators: Vec<TemplateCreator>,
}
#[derive(Serialize, Deserialize, Debug)]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct AccountLink {
pub link_type: String,
pub url: String,
}
#[derive(Serialize, Deserialize, Debug)]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TemplateCreator {
pub id: Uuid,
pub name: String,
@ -1285,7 +1285,7 @@ pub struct TemplateCreator {
pub number_of_templates: i32,
}
#[derive(Serialize, Deserialize, Debug)]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TemplateCreatorMinimal {
pub id: Uuid,
pub name: String,
@ -1328,6 +1328,43 @@ pub struct Template {
}
#[derive(Serialize, Deserialize, Debug)]
pub struct TemplateWithPublishInfo {
pub view_id: Uuid,
pub created_at: DateTime<Utc>,
pub last_updated_at: DateTime<Utc>,
pub name: String,
pub description: String,
pub about: String,
pub view_url: String,
pub categories: Vec<TemplateCategory>,
pub creator: TemplateCreator,
pub is_new_template: bool,
pub is_featured: bool,
pub related_templates: Vec<TemplateMinimal>,
pub publish_info: PublishInfo,
}
impl TemplateWithPublishInfo {
pub fn from_template_and_publish_info(template: &Template, publish_info: &PublishInfo) -> Self {
Self {
view_id: template.view_id,
created_at: template.created_at,
last_updated_at: template.last_updated_at,
name: template.name.clone(),
description: template.description.clone(),
about: template.about.clone(),
view_url: template.view_url.clone(),
categories: template.categories.clone(),
creator: template.creator.clone(),
is_new_template: template.is_new_template,
is_featured: template.is_featured,
related_templates: template.related_templates.clone(),
publish_info: publish_info.clone(),
}
}
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TemplateMinimal {
pub view_id: Uuid,
pub created_at: DateTime<Utc>,

View File

@ -8,8 +8,8 @@ use database_entity::dto::{
AvatarImageSource, CreateTemplateCategoryParams, CreateTemplateCreatorParams,
CreateTemplateParams, GetTemplateCategoriesQueryParams, GetTemplateCreatorsQueryParams,
GetTemplatesQueryParams, Template, TemplateCategories, TemplateCategory, TemplateCreator,
TemplateCreators, TemplateHomePage, TemplateHomePageQueryParams, Templates,
UpdateTemplateCategoryParams, UpdateTemplateCreatorParams, UpdateTemplateParams,
TemplateCreators, TemplateHomePage, TemplateHomePageQueryParams, TemplateWithPublishInfo,
Templates, UpdateTemplateCategoryParams, UpdateTemplateCreatorParams, UpdateTemplateParams,
};
use reqwest::StatusCode;
use shared_entity::response::{AppResponse, JsonAppResponse};
@ -235,10 +235,10 @@ async fn list_templates_handler(
async fn get_template_handler(
view_id: web::Path<Uuid>,
state: Data<AppState>,
) -> Result<JsonAppResponse<Template>> {
) -> Result<JsonAppResponse<TemplateWithPublishInfo>> {
let view_id = view_id.into_inner();
let template = get_template(&state.pg_pool, view_id).await?;
Ok(Json(AppResponse::Ok().with_data(template)))
let template_with_pub_info = get_template_with_publish_info(&state.pg_pool, view_id).await?;
Ok(Json(AppResponse::Ok().with_data(template_with_pub_info)))
}
async fn update_template_handler(

View File

@ -6,11 +6,12 @@ use app_error::ErrorCode;
use aws_sdk_s3::primitives::ByteStream;
use database::{
file::{s3_client_impl::AwsS3BucketClientImpl, BucketClient, ResponseBlob},
publish::select_published_collab_info,
template::*,
};
use database_entity::dto::{
AccountLink, Template, TemplateCategory, TemplateCategoryType, TemplateCreator, TemplateHomePage,
TemplateMinimal,
TemplateMinimal, TemplateWithPublishInfo,
};
use shared_entity::response::AppResponseError;
use sqlx::PgPool;
@ -247,9 +248,15 @@ pub async fn get_templates(
Ok(templates)
}
pub async fn get_template(pg_pool: &PgPool, view_id: Uuid) -> Result<Template, AppResponseError> {
pub async fn get_template_with_publish_info(
pg_pool: &PgPool,
view_id: Uuid,
) -> Result<TemplateWithPublishInfo, AppResponseError> {
let template = select_template_view_by_id(pg_pool, view_id).await?;
Ok(template)
let pub_info = select_published_collab_info(pg_pool, &view_id).await?;
let template_with_pub_info =
TemplateWithPublishInfo::from_template_and_publish_info(&template, &pub_info);
Ok(template_with_pub_info)
}
pub async fn delete_template(pg_pool: &PgPool, view_id: Uuid) -> Result<(), AppResponseError> {

View File

@ -392,6 +392,10 @@ async fn test_template_crud() {
assert_eq!(template.categories[0].id, category_2.id);
assert_eq!(template.related_templates.len(), 1);
assert_eq!(template.related_templates[0].view_id, published_view_ids[0]);
assert_eq!(
template.publish_info.namespace.unwrap(),
published_view_namespace.clone()
);
let params = UpdateTemplateParams {
name: format!("{}-{}", template_name_prefix, published_view_ids[3]),