From e626ef87dc052b66e5ff450934f6ebcafaba6e79 Mon Sep 17 00:00:00 2001 From: Hamcha Date: Fri, 7 Jul 2023 01:38:56 +0200 Subject: [PATCH] page -> post --- src/content/mod.rs | 2 +- src/content/{page.rs => post.rs} | 52 +++++++++++++++---------------- src/database/mod.rs | 2 +- src/database/{page.rs => post.rs} | 32 +++++++++---------- src/routes/posts.rs | 30 +++++++++--------- 5 files changed, 59 insertions(+), 59 deletions(-) rename src/content/{page.rs => post.rs} (70%) rename src/database/{page.rs => post.rs} (84%) diff --git a/src/content/mod.rs b/src/content/mod.rs index 54dc371..169413d 100644 --- a/src/content/mod.rs +++ b/src/content/mod.rs @@ -1,4 +1,4 @@ -pub mod page; +pub mod post; pub mod site; #[derive(Debug, thiserror::Error)] diff --git a/src/content/page.rs b/src/content/post.rs similarity index 70% rename from src/content/page.rs rename to src/content/post.rs index 3a20b62..24bfb8e 100644 --- a/src/content/page.rs +++ b/src/content/post.rs @@ -7,8 +7,8 @@ use uuid::Uuid; use super::Error; #[derive(Deserialize, Serialize, FromRow)] -pub struct Page { - /// Page ID +pub struct Post { + /// Post ID pub id: Uuid, /// Site ID @@ -17,20 +17,20 @@ pub struct Page { /// Author ID pub author: Uuid, - /// URL-friendly short code for the page + /// URL-friendly short code for the post pub slug: String, - /// Page title + /// Post title pub title: String, - /// Page description (for SEO/content) + /// Post description (for SEO/content) pub description: Option, - /// Page tags (for internal search) + /// Post tags (for internal search) pub tags: Vec, - /// Page blocks (content) - pub blocks: Json>, + /// Post blocks (content) + pub blocks: Json>, /// Times pub created_at: NaiveDateTime, @@ -40,7 +40,7 @@ pub struct Page { #[derive(Deserialize, Serialize)] #[serde(tag = "kind")] -pub enum PageBlock { +pub enum PostBlock { MarkupV1 { /// Markup format (markdown, html, plain) format: String, @@ -73,50 +73,50 @@ pub struct ImageElement { pub caption: Option, } -/// Data to create a new page +/// Data to create a new post #[derive(Deserialize)] -pub struct CreatePageData { +pub struct CreatePostData { pub slug: String, pub title: String, pub description: Option, pub tags: Vec, - pub blocks: Vec, + pub blocks: Vec, } -/// Data to update a new page +/// Data to update a new post #[derive(Deserialize)] -pub struct UpdatePageData { +pub struct UpdatePostData { pub slug: Option, pub title: Option, pub description: Option, pub tags: Option>, - pub blocks: Option>, + pub blocks: Option>, } #[async_trait] -pub trait PageRepository { - /// Get a page from its slug - async fn get_page_from_url(&self, site: &str, slug: &str) -> Result; +pub trait PostRepository { + /// Get a post from its slug + async fn get_post_from_url(&self, site: &str, slug: &str) -> Result; - /// Create a new page - async fn create_page( + /// Create a new post + async fn create_post( &self, owner: &Uuid, site: &Uuid, - data: CreatePageData, + data: CreatePostData, ) -> Result<(), Error>; - /// Update a page - async fn update_page( + /// Update a post + async fn update_post( &self, owner: &Uuid, site: &Uuid, slug: &str, - data: UpdatePageData, + data: UpdatePostData, ) -> Result<(), Error>; - /// Delete a page - async fn delete_page( + /// Delete a post + async fn delete_post( &self, owner: &Uuid, site: &Uuid, diff --git a/src/database/mod.rs b/src/database/mod.rs index fc664cc..8032106 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use crate::state::AppState; -pub mod page; +pub mod post; pub mod site; pub struct Database { diff --git a/src/database/page.rs b/src/database/post.rs similarity index 84% rename from src/database/page.rs rename to src/database/post.rs index 0695da5..44bd1cf 100644 --- a/src/database/page.rs +++ b/src/database/post.rs @@ -4,34 +4,34 @@ use uuid::Uuid; use crate::content::{ self, - page::{CreatePageData, Page, PageRepository, UpdatePageData}, + post::{CreatePostData, Post, PostRepository, UpdatePostData}, Error, }; use super::Database; #[async_trait] -impl PageRepository for Database { - async fn get_page_from_url(&self, site: &str, slug: &str) -> Result { - let page_query = sqlx::query_as( +impl PostRepository for Database { + async fn get_post_from_url(&self, site: &str, slug: &str) -> Result { + let post_query = sqlx::query_as( "SELECT pages.* FROM pages JOIN sites ON site = sites.id WHERE slug = $1 AND name = $2 AND pages.deleted_at IS NULL AND sites.deleted_at IS NULL") .bind(slug) .bind(site); - let page: Page = page_query + let post: Post = post_query .fetch_one(&self.pool) .await .map_err(|e| match e { sqlx::Error::RowNotFound => Error::NotFound, _ => e.into(), })?; - Ok(page) + Ok(post) } - async fn create_page( + async fn create_post( &self, owner: &Uuid, site: &Uuid, - data: CreatePageData, + data: CreatePostData, ) -> Result<(), Error> { sqlx::query!( "INSERT INTO pages (author, site, slug, title, description, tags, blocks) VALUES ($1, $2, $3, $4, $5, $6, $7)", @@ -51,12 +51,12 @@ impl PageRepository for Database { Ok(()) } - async fn update_page( + async fn update_post( &self, owner: &Uuid, site: &Uuid, - page: &str, - data: UpdatePageData, + slug: &str, + data: UpdatePostData, ) -> Result<(), Error> { let result = sqlx::query!( "UPDATE pages SET title = COALESCE($1, title), description = COALESCE($2, description), tags = COALESCE($3, tags), blocks = COALESCE($4, blocks) WHERE author = $5 AND site = $6 AND slug = $7 AND deleted_at IS NULL", @@ -66,7 +66,7 @@ impl PageRepository for Database { data.blocks.map(|x| json!(x)), owner, site, - page + slug ).execute(&self.pool).await.map_err(|err| match err { sqlx::Error::Database(dberr) if dberr.constraint() == Some("pages_site_slug_unique") => { Error::IdentifierNotAvailable @@ -81,11 +81,11 @@ impl PageRepository for Database { Ok(()) } - async fn delete_page( + async fn delete_post( &self, owner: &Uuid, site: &Uuid, - page: &str, + slug: &str, soft_delete: bool, ) -> Result<(), Error> { let result = if soft_delete { @@ -93,14 +93,14 @@ impl PageRepository for Database { "UPDATE pages SET deleted_at = NOW() WHERE author = $1 AND site = $2 AND slug = $3 AND deleted_at IS NULL", owner, site, - page + slug ).execute(&self.pool).await? } else { sqlx::query!( "DELETE FROM pages WHERE author = $1 AND site = $2 AND slug = $3", owner, site, - page + slug ) .execute(&self.pool) .await? diff --git a/src/routes/posts.rs b/src/routes/posts.rs index ade6d2e..40a5a47 100644 --- a/src/routes/posts.rs +++ b/src/routes/posts.rs @@ -9,7 +9,7 @@ use std::sync::Arc; use crate::{ content::{ - page::{CreatePageData, PageRepository, UpdatePageData}, + post::{CreatePostData, PostRepository, UpdatePostData}, site::SiteRepository, }, database::Database, @@ -17,42 +17,42 @@ use crate::{ state::AppState, }; -async fn get_page( +async fn get_post( repository: Repo, Path((site, slug)): Path<(String, String)>, ) -> Result> { - Ok(Json(repository.get_page_from_url(&site, &slug).await?)) + Ok(Json(repository.get_post_from_url(&site, &slug).await?)) } -async fn create_page( +async fn create_post( repository: Repo, Path(site): Path, RequireUser(user): RequireUser, - JsonBody(page): JsonBody, + JsonBody(data): JsonBody, ) -> Result> { // Resolve site let site_id = repository.get_site_id(&site, &user.id).await?; - repository.create_page(&user.id, &site_id, page).await?; + repository.create_post(&user.id, &site_id, data).await?; Ok(Json(json!({ "ok": true }))) } -async fn update_page( +async fn update_post( repository: Repo, Path((site, slug)): Path<(String, String)>, RequireUser(user): RequireUser, - JsonBody(page): JsonBody, + JsonBody(data): JsonBody, ) -> Result> { // Resolve site let site_id = repository.get_site_id(&site, &user.id).await?; repository - .update_page(&user.id, &site_id, &slug, page) + .update_post(&user.id, &site_id, &slug, data) .await?; Ok(Json(json!({ "ok": true }))) } -async fn delete_page( +async fn delete_post( repository: Repo, Path((site, slug)): Path<(String, String)>, RequireUser(user): RequireUser, @@ -61,18 +61,18 @@ async fn delete_page( let site_id = repository.get_site_id(&site, &user.id).await?; repository - .delete_page(&user.id, &site_id, &slug, true) + .delete_post(&user.id, &site_id, &slug, true) .await?; Ok(Json(json!({ "ok": true }))) } pub fn router() -> Router> { Router::new() - .route("/:site", post(create_page::)) + .route("/:site", post(create_post::)) .route( "/:site/:slug", - get(get_page::) - .put(update_page::) - .delete(delete_page::), + get(get_post::) + .put(update_post::) + .delete(delete_post::), ) }