mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-06-09 00:49:21 +00:00
e78ba38e94
* Use URL type in most outstanding struct fields This fixes all known remaining cases where url fields are stored as plain strings, with the exception of form fields where empty strings are used as sentinels (see `diesel_option_overwrite_to_url`). Tested for regressions in the federated docker setup attempting to exercise all changed fields, including through apub federation. Fixes #1385 * Add migration to fix blank-string post.url values to be null This also then fixes #602 * Address review feedback - Fixed some unwraps and err message formatting - Bumped the `url` library to 2.2.1 to fix a bug with serde error messages - Add unit tests for the two diesel option override functions - Fix migration teardown by adding a no-op * Rename lemmy_db_queries::Url to lemmy_db_queries::DbUrl * fix compile error * box PostOrComment variants
110 lines
2.4 KiB
Rust
110 lines
2.4 KiB
Rust
use crate::{
|
|
schema::{post, post_like, post_read, post_saved},
|
|
DbUrl,
|
|
};
|
|
use serde::Serialize;
|
|
|
|
#[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize)]
|
|
#[table_name = "post"]
|
|
pub struct Post {
|
|
pub id: i32,
|
|
pub name: String,
|
|
pub url: Option<DbUrl>,
|
|
pub body: Option<String>,
|
|
pub creator_id: i32,
|
|
pub community_id: i32,
|
|
pub removed: bool,
|
|
pub locked: bool,
|
|
pub published: chrono::NaiveDateTime,
|
|
pub updated: Option<chrono::NaiveDateTime>,
|
|
pub deleted: bool,
|
|
pub nsfw: bool,
|
|
pub stickied: bool,
|
|
pub embed_title: Option<String>,
|
|
pub embed_description: Option<String>,
|
|
pub embed_html: Option<String>,
|
|
pub thumbnail_url: Option<DbUrl>,
|
|
pub ap_id: DbUrl,
|
|
pub local: bool,
|
|
}
|
|
|
|
#[derive(Insertable, AsChangeset)]
|
|
#[table_name = "post"]
|
|
pub struct PostForm {
|
|
pub name: String,
|
|
pub url: Option<DbUrl>,
|
|
pub body: Option<String>,
|
|
pub creator_id: i32,
|
|
pub community_id: i32,
|
|
pub removed: Option<bool>,
|
|
pub locked: Option<bool>,
|
|
pub published: Option<chrono::NaiveDateTime>,
|
|
pub updated: Option<chrono::NaiveDateTime>,
|
|
pub deleted: Option<bool>,
|
|
pub nsfw: bool,
|
|
pub stickied: Option<bool>,
|
|
pub embed_title: Option<String>,
|
|
pub embed_description: Option<String>,
|
|
pub embed_html: Option<String>,
|
|
pub thumbnail_url: Option<DbUrl>,
|
|
pub ap_id: Option<DbUrl>,
|
|
pub local: bool,
|
|
}
|
|
|
|
#[derive(Identifiable, Queryable, Associations, PartialEq, Debug)]
|
|
#[belongs_to(Post)]
|
|
#[table_name = "post_like"]
|
|
pub struct PostLike {
|
|
pub id: i32,
|
|
pub post_id: i32,
|
|
pub user_id: i32,
|
|
pub score: i16,
|
|
pub published: chrono::NaiveDateTime,
|
|
}
|
|
|
|
#[derive(Insertable, AsChangeset, Clone)]
|
|
#[table_name = "post_like"]
|
|
pub struct PostLikeForm {
|
|
pub post_id: i32,
|
|
pub user_id: i32,
|
|
pub score: i16,
|
|
}
|
|
|
|
#[derive(Identifiable, Queryable, Associations, PartialEq, Debug)]
|
|
#[belongs_to(Post)]
|
|
#[table_name = "post_saved"]
|
|
pub struct PostSaved {
|
|
pub id: i32,
|
|
pub post_id: i32,
|
|
pub user_id: i32,
|
|
pub published: chrono::NaiveDateTime,
|
|
}
|
|
|
|
#[derive(Insertable, AsChangeset)]
|
|
#[table_name = "post_saved"]
|
|
pub struct PostSavedForm {
|
|
pub post_id: i32,
|
|
pub user_id: i32,
|
|
}
|
|
|
|
#[derive(Identifiable, Queryable, Associations, PartialEq, Debug)]
|
|
#[belongs_to(Post)]
|
|
#[table_name = "post_read"]
|
|
pub struct PostRead {
|
|
pub id: i32,
|
|
|
|
pub post_id: i32,
|
|
|
|
pub user_id: i32,
|
|
|
|
pub published: chrono::NaiveDateTime,
|
|
}
|
|
|
|
#[derive(Insertable, AsChangeset)]
|
|
#[table_name = "post_read"]
|
|
pub struct PostReadForm {
|
|
pub post_id: i32,
|
|
|
|
pub user_id: i32,
|
|
}
|