Some more db boilerplate
parent
f6e9039b59
commit
769d7a32de
|
@ -18,8 +18,9 @@ pub struct Post
|
||||||
pub content: String,
|
pub content: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Insertable)]
|
#[derive(Deserialize, Insertable)]
|
||||||
#[table_name = "posts"]
|
#[table_name = "posts"]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct NewPost
|
pub struct NewPost
|
||||||
{
|
{
|
||||||
pub section_id: Uuid,
|
pub section_id: Uuid,
|
||||||
|
@ -32,7 +33,6 @@ pub struct NewPost
|
||||||
#[table_name = "posts"]
|
#[table_name = "posts"]
|
||||||
pub struct PatchPost
|
pub struct PatchPost
|
||||||
{
|
{
|
||||||
pub id: Option<Uuid>,
|
|
||||||
pub section_id: Option<Uuid>,
|
pub section_id: Option<Uuid>,
|
||||||
pub title: Option<String>,
|
pub title: Option<String>,
|
||||||
pub publish_date: Option<NaiveDate>,
|
pub publish_date: Option<NaiveDate>,
|
||||||
|
@ -48,12 +48,6 @@ pub fn get(conn: &PgConnection, offset_: u32, limit_: u32) -> RbResult<Vec<Post>
|
||||||
.map_err(|_| RbError::DbError("Couldn't query posts."))?)
|
.map_err(|_| RbError::DbError("Couldn't query posts."))?)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Insert a new post into the database.
|
|
||||||
///
|
|
||||||
/// # Arguments
|
|
||||||
///
|
|
||||||
/// * `conn` - reference to a database connection
|
|
||||||
/// * `new_post` - the new post object to insert
|
|
||||||
pub fn create(conn: &PgConnection, new_post: &NewPost) -> RbResult<Post>
|
pub fn create(conn: &PgConnection, new_post: &NewPost) -> RbResult<Post>
|
||||||
{
|
{
|
||||||
Ok(insert_into(posts)
|
Ok(insert_into(posts)
|
||||||
|
@ -64,15 +58,15 @@ pub fn create(conn: &PgConnection, new_post: &NewPost) -> RbResult<Post>
|
||||||
// TODO check for conflict?
|
// TODO check for conflict?
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update(conn: &PgConnection, post: &PatchPost) -> RbResult<Post>
|
pub fn update(conn: &PgConnection, post_id: &Uuid, patch_post: &PatchPost) -> RbResult<Post>
|
||||||
{
|
{
|
||||||
Ok(diesel::update(posts)
|
Ok(diesel::update(posts.filter(id.eq(post_id)))
|
||||||
.set(post)
|
.set(patch_post)
|
||||||
.get_result::<Post>(conn)
|
.get_result::<Post>(conn)
|
||||||
.map_err(|_| RbError::DbError("Couldn't update post."))?)
|
.map_err(|_| RbError::DbError("Couldn't update post."))?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn delete(conn: &PgConnection, post_id: Uuid) -> RbResult<()>
|
pub fn delete(conn: &PgConnection, post_id: &Uuid) -> RbResult<()>
|
||||||
{
|
{
|
||||||
diesel::delete(posts.filter(id.eq(post_id)))
|
diesel::delete(posts.filter(id.eq(post_id)))
|
||||||
.execute(conn)
|
.execute(conn)
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
//! Handles all section-related database operations.
|
|
||||||
|
|
||||||
use diesel::{insert_into, prelude::*, Insertable, PgConnection, Queryable};
|
use diesel::{insert_into, prelude::*, Insertable, PgConnection, Queryable};
|
||||||
use serde::Deserialize;
|
use serde::{Deserialize, Serialize};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -9,8 +7,7 @@ use crate::{
|
||||||
schema::{sections, sections::dsl::*},
|
schema::{sections, sections::dsl::*},
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Represents a section contained in the database.
|
#[derive(Queryable, Serialize)]
|
||||||
#[derive(Queryable)]
|
|
||||||
pub struct Section
|
pub struct Section
|
||||||
{
|
{
|
||||||
pub id: Uuid,
|
pub id: Uuid,
|
||||||
|
@ -20,7 +17,6 @@ pub struct Section
|
||||||
pub has_titles: bool,
|
pub has_titles: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A new section to be added into the database.
|
|
||||||
#[derive(Deserialize, Insertable)]
|
#[derive(Deserialize, Insertable)]
|
||||||
#[table_name = "sections"]
|
#[table_name = "sections"]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
|
@ -32,32 +28,49 @@ pub struct NewSection
|
||||||
has_titles: Option<bool>,
|
has_titles: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns all sections in the database.
|
#[derive(Deserialize, AsChangeset)]
|
||||||
///
|
#[table_name = "sections"]
|
||||||
/// # Arguments
|
#[serde(rename_all = "camelCase")]
|
||||||
///
|
pub struct PatchSection
|
||||||
/// * `conn` - reference to a database connection
|
|
||||||
pub fn all(conn: &PgConnection) -> RbResult<Vec<Section>>
|
|
||||||
{
|
{
|
||||||
sections
|
title: Option<String>,
|
||||||
.load::<Section>(conn)
|
description: Option<String>,
|
||||||
.map_err(|_| RbError::DbError("Couldn't get all sections"))
|
is_default: Option<bool>,
|
||||||
|
has_titles: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Inserts a new section into the database.
|
pub fn get(conn: &PgConnection, offset_: u32, limit_: u32) -> RbResult<Vec<Section>>
|
||||||
///
|
|
||||||
/// # Arguments
|
|
||||||
///
|
|
||||||
/// * `conn` - reference to a database connection
|
|
||||||
/// * `new_section` - the new section to be added
|
|
||||||
pub fn create(conn: &PgConnection, new_section: &NewSection) -> RbResult<()>
|
|
||||||
{
|
{
|
||||||
insert_into(sections)
|
Ok(sections
|
||||||
.values(new_section)
|
.offset(offset_.into())
|
||||||
.execute(conn)
|
.limit(limit_.into())
|
||||||
.map_err(|_| RbError::DbError("Couldn't insert section."))?;
|
.load::<Section>(conn)
|
||||||
|
.map_err(|_| RbError::DbError("Couldn't query sections."))?)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn create(conn: &PgConnection, new_post: &NewSection) -> RbResult<Section>
|
||||||
|
{
|
||||||
|
Ok(insert_into(sections)
|
||||||
|
.values(new_post)
|
||||||
|
.get_result::<Section>(conn)
|
||||||
|
.map_err(|_| RbError::DbError("Couldn't insert section."))?)
|
||||||
|
|
||||||
// TODO check for conflict?
|
// TODO check for conflict?
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn update(conn: &PgConnection, post_id: &Uuid, patch_post: &PatchSection) -> RbResult<Section>
|
||||||
|
{
|
||||||
|
Ok(diesel::update(sections.filter(id.eq(post_id)))
|
||||||
|
.set(patch_post)
|
||||||
|
.get_result::<Section>(conn)
|
||||||
|
.map_err(|_| RbError::DbError("Couldn't update section."))?)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn delete(conn: &PgConnection, post_id: &Uuid) -> RbResult<()>
|
||||||
|
{
|
||||||
|
diesel::delete(sections.filter(id.eq(post_id)))
|
||||||
|
.execute(conn)
|
||||||
|
.map_err(|_| RbError::DbError("Couldn't delete section."))?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue