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
103 lines
2.6 KiB
Rust
103 lines
2.6 KiB
Rust
use crate::{
|
|
schema::{comment, comment_alias_1, comment_like, comment_saved},
|
|
source::post::Post,
|
|
DbUrl,
|
|
};
|
|
use serde::Serialize;
|
|
|
|
// WITH RECURSIVE MyTree AS (
|
|
// SELECT * FROM comment WHERE parent_id IS NULL
|
|
// UNION ALL
|
|
// SELECT m.* FROM comment AS m JOIN MyTree AS t ON m.parent_id = t.id
|
|
// )
|
|
// SELECT * FROM MyTree;
|
|
|
|
#[derive(Clone, Queryable, Associations, Identifiable, PartialEq, Debug, Serialize)]
|
|
#[belongs_to(Post)]
|
|
#[table_name = "comment"]
|
|
pub struct Comment {
|
|
pub id: i32,
|
|
pub creator_id: i32,
|
|
pub post_id: i32,
|
|
pub parent_id: Option<i32>,
|
|
pub content: String,
|
|
pub removed: bool,
|
|
pub read: bool, // Whether the recipient has read the comment or not
|
|
pub published: chrono::NaiveDateTime,
|
|
pub updated: Option<chrono::NaiveDateTime>,
|
|
pub deleted: bool,
|
|
pub ap_id: DbUrl,
|
|
pub local: bool,
|
|
}
|
|
|
|
#[derive(Clone, Queryable, Associations, Identifiable, PartialEq, Debug, Serialize)]
|
|
#[belongs_to(Post)]
|
|
#[table_name = "comment_alias_1"]
|
|
pub struct CommentAlias1 {
|
|
pub id: i32,
|
|
pub creator_id: i32,
|
|
pub post_id: i32,
|
|
pub parent_id: Option<i32>,
|
|
pub content: String,
|
|
pub removed: bool,
|
|
pub read: bool, // Whether the recipient has read the comment or not
|
|
pub published: chrono::NaiveDateTime,
|
|
pub updated: Option<chrono::NaiveDateTime>,
|
|
pub deleted: bool,
|
|
pub ap_id: DbUrl,
|
|
pub local: bool,
|
|
}
|
|
|
|
#[derive(Insertable, AsChangeset, Clone)]
|
|
#[table_name = "comment"]
|
|
pub struct CommentForm {
|
|
pub creator_id: i32,
|
|
pub post_id: i32,
|
|
pub parent_id: Option<i32>,
|
|
pub content: String,
|
|
pub removed: Option<bool>,
|
|
pub read: Option<bool>,
|
|
pub published: Option<chrono::NaiveDateTime>,
|
|
pub updated: Option<chrono::NaiveDateTime>,
|
|
pub deleted: Option<bool>,
|
|
pub ap_id: Option<DbUrl>,
|
|
pub local: bool,
|
|
}
|
|
|
|
#[derive(Identifiable, Queryable, Associations, PartialEq, Debug, Clone)]
|
|
#[belongs_to(Comment)]
|
|
#[table_name = "comment_like"]
|
|
pub struct CommentLike {
|
|
pub id: i32,
|
|
pub user_id: i32,
|
|
pub comment_id: i32,
|
|
pub post_id: i32, // TODO this is redundant
|
|
pub score: i16,
|
|
pub published: chrono::NaiveDateTime,
|
|
}
|
|
|
|
#[derive(Insertable, AsChangeset, Clone)]
|
|
#[table_name = "comment_like"]
|
|
pub struct CommentLikeForm {
|
|
pub user_id: i32,
|
|
pub comment_id: i32,
|
|
pub post_id: i32, // TODO this is redundant
|
|
pub score: i16,
|
|
}
|
|
|
|
#[derive(Identifiable, Queryable, Associations, PartialEq, Debug)]
|
|
#[belongs_to(Comment)]
|
|
#[table_name = "comment_saved"]
|
|
pub struct CommentSaved {
|
|
pub id: i32,
|
|
pub comment_id: i32,
|
|
pub user_id: i32,
|
|
pub published: chrono::NaiveDateTime,
|
|
}
|
|
|
|
#[derive(Insertable, AsChangeset)]
|
|
#[table_name = "comment_saved"]
|
|
pub struct CommentSavedForm {
|
|
pub comment_id: i32,
|
|
pub user_id: i32,
|
|
}
|