diff --git a/Cargo.lock b/Cargo.lock index d8204367a..06361214f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1668,7 +1668,6 @@ dependencies = [ "lazy_static", "lemmy_api_common", "lemmy_apub", - "lemmy_db_queries", "lemmy_db_schema", "lemmy_db_views", "lemmy_db_views_actor", @@ -1697,7 +1696,6 @@ dependencies = [ "actix-web", "chrono", "diesel", - "lemmy_db_queries", "lemmy_db_schema", "lemmy_db_views", "lemmy_db_views_actor", @@ -1732,7 +1730,6 @@ dependencies = [ "lemmy_api_common", "lemmy_apub", "lemmy_apub_lib", - "lemmy_db_queries", "lemmy_db_schema", "lemmy_db_views", "lemmy_db_views_actor", @@ -1776,7 +1773,6 @@ dependencies = [ "itertools", "lemmy_api_common", "lemmy_apub_lib", - "lemmy_db_queries", "lemmy_db_schema", "lemmy_db_views", "lemmy_db_views_actor", @@ -1834,15 +1830,16 @@ dependencies = [ ] [[package]] -name = "lemmy_db_queries" +name = "lemmy_db_schema" version = "0.13.0" dependencies = [ "bcrypt", "chrono", "diesel", + "diesel-derive-newtype", "diesel_migrations", "lazy_static", - "lemmy_db_schema", + "lemmy_apub_lib", "lemmy_utils", "log", "regex", @@ -1855,27 +1852,11 @@ dependencies = [ "url", ] -[[package]] -name = "lemmy_db_schema" -version = "0.13.0" -dependencies = [ - "chrono", - "diesel", - "diesel-derive-newtype", - "lemmy_apub_lib", - "lemmy_utils", - "log", - "serde", - "serde_json", - "url", -] - [[package]] name = "lemmy_db_views" version = "0.13.0" dependencies = [ "diesel", - "lemmy_db_queries", "lemmy_db_schema", "log", "serde", @@ -1888,7 +1869,6 @@ name = "lemmy_db_views_actor" version = "0.13.0" dependencies = [ "diesel", - "lemmy_db_queries", "lemmy_db_schema", "serde", ] @@ -1898,7 +1878,6 @@ name = "lemmy_db_views_moderator" version = "0.13.0" dependencies = [ "diesel", - "lemmy_db_queries", "lemmy_db_schema", "serde", ] @@ -1918,7 +1897,6 @@ dependencies = [ "lazy_static", "lemmy_api_common", "lemmy_apub_lib", - "lemmy_db_queries", "lemmy_db_schema", "lemmy_db_views", "lemmy_db_views_actor", @@ -1954,7 +1932,6 @@ dependencies = [ "lemmy_api_crud", "lemmy_apub", "lemmy_apub_lib", - "lemmy_db_queries", "lemmy_db_schema", "lemmy_db_views", "lemmy_db_views_actor", @@ -2020,7 +1997,6 @@ dependencies = [ "chrono", "diesel", "lemmy_api_common", - "lemmy_db_queries", "lemmy_db_schema", "lemmy_db_views", "lemmy_db_views_actor", diff --git a/Cargo.toml b/Cargo.toml index 153d9072f..c306f762a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,6 @@ members = [ "crates/apub_lib_derive", "crates/apub", "crates/utils", - "crates/db_queries", "crates/db_schema", "crates/db_views", "crates/db_views_actor", @@ -38,7 +37,6 @@ lemmy_apub = { version = "=0.13.0", path = "./crates/apub" } lemmy_apub_lib = { version = "=0.13.0", path = "./crates/apub_lib" } lemmy_utils = { version = "=0.13.0", path = "./crates/utils" } lemmy_db_schema = { version = "=0.13.0", path = "./crates/db_schema" } -lemmy_db_queries = { version = "=0.13.0", path = "./crates/db_queries" } lemmy_db_views = { version = "=0.13.0", path = "./crates/db_views" } lemmy_db_views_moderator = { version = "=0.13.0", path = "./crates/db_views_moderator" } lemmy_db_views_actor = { version = "=0.13.0", path = "./crates/db_views_actor" } diff --git a/ansible/templates/docker-compose.yml b/ansible/templates/docker-compose.yml index 5b04c28d4..0cf89a2be 100644 --- a/ansible/templates/docker-compose.yml +++ b/ansible/templates/docker-compose.yml @@ -7,7 +7,7 @@ services: - "127.0.0.1:8536:8536" restart: always environment: - - RUST_LOG="warn,lemmy_server=info,lemmy_api=info,lemmy_api_common=info,lemmy_api_crud=info,lemmy_apub=info,lemmy_db_queries=info,lemmy_db_schema=info,lemmy_db_views=info,lemmy_db_views_actor=info,lemmy_db_views_moderator=info,lemmy_routes=info,lemmy_utils=info,lemmy_websocket=info" + - RUST_LOG="warn,lemmy_server=info,lemmy_api=info,lemmy_api_common=info,lemmy_api_crud=info,lemmy_apub=info,lemmy_db_schema=info,lemmy_db_views=info,lemmy_db_views_actor=info,lemmy_db_views_moderator=info,lemmy_routes=info,lemmy_utils=info,lemmy_websocket=info" volumes: - ./lemmy.hjson:/config/config.hjson:ro depends_on: diff --git a/api_tests/prepare-drone-federation-test.sh b/api_tests/prepare-drone-federation-test.sh index 6e08ad359..2dbfbe251 100755 --- a/api_tests/prepare-drone-federation-test.sh +++ b/api_tests/prepare-drone-federation-test.sh @@ -3,7 +3,7 @@ set -e export APUB_TESTING_SEND_SYNC=1 export RUST_BACKTRACE=1 -export RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_queries=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" +export RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" for INSTANCE in lemmy_alpha lemmy_beta lemmy_gamma lemmy_delta lemmy_epsilon; do psql "${LEMMY_DATABASE_URL}/lemmy" -c "DROP DATABASE IF EXISTS $INSTANCE" diff --git a/crates/api/Cargo.toml b/crates/api/Cargo.toml index 04dd87e05..8d389308c 100644 --- a/crates/api/Cargo.toml +++ b/crates/api/Cargo.toml @@ -15,7 +15,6 @@ doctest = false [dependencies] lemmy_apub = { version = "=0.13.0", path = "../apub" } lemmy_utils = { version = "=0.13.0", path = "../utils" } -lemmy_db_queries = { version = "=0.13.0", path = "../db_queries" } lemmy_db_schema = { version = "=0.13.0", path = "../db_schema" } lemmy_db_views = { version = "=0.13.0", path = "../db_views" } lemmy_db_views_moderator = { version = "=0.13.0", path = "../db_views_moderator" } diff --git a/crates/api/src/comment.rs b/crates/api/src/comment.rs index 9311d7dc2..d626c2eae 100644 --- a/crates/api/src/comment.rs +++ b/crates/api/src/comment.rs @@ -15,8 +15,11 @@ use lemmy_apub::{ }, fetcher::post_or_comment::PostOrComment, }; -use lemmy_db_queries::{source::comment::Comment_, Likeable, Saveable}; -use lemmy_db_schema::{source::comment::*, LocalUserId}; +use lemmy_db_schema::{ + newtypes::LocalUserId, + source::comment::*, + traits::{Likeable, Saveable}, +}; use lemmy_db_views::{comment_view::CommentView, local_user_view::LocalUserView}; use lemmy_utils::{ApiError, ConnectionId, LemmyError}; use lemmy_websocket::{send::send_comment_ws_message, LemmyContext, UserOperation}; diff --git a/crates/api/src/comment_report.rs b/crates/api/src/comment_report.rs index 5d2561dd9..86f636a6b 100644 --- a/crates/api/src/comment_report.rs +++ b/crates/api/src/comment_report.rs @@ -8,8 +8,7 @@ use lemmy_api_common::{ is_mod_or_admin, }; use lemmy_apub::{activities::report::Report, fetcher::object_id::ObjectId}; -use lemmy_db_queries::Reportable; -use lemmy_db_schema::source::comment_report::*; +use lemmy_db_schema::{source::comment_report::*, traits::Reportable}; use lemmy_db_views::{ comment_report_view::{CommentReportQueryBuilder, CommentReportView}, comment_view::CommentView, diff --git a/crates/api/src/community.rs b/crates/api/src/community.rs index ccf0edbfd..5d7317b2a 100644 --- a/crates/api/src/community.rs +++ b/crates/api/src/community.rs @@ -18,22 +18,32 @@ use lemmy_apub::activities::{ }, following::{follow::FollowCommunity as FollowCommunityApub, undo::UndoFollowCommunity}, }; -use lemmy_db_queries::{ - source::{comment::Comment_, community::CommunityModerator_, post::Post_}, - Bannable, - Blockable, - Crud, - Followable, - Joinable, -}; -use lemmy_db_schema::source::{ - comment::Comment, - community::*, - community_block::{CommunityBlock, CommunityBlockForm}, - moderator::*, - person::Person, - post::Post, - site::*, +use lemmy_db_schema::{ + source::{ + comment::Comment, + community::{ + Community, + CommunityFollower, + CommunityFollowerForm, + CommunityModerator, + CommunityModeratorForm, + CommunityPersonBan, + CommunityPersonBanForm, + }, + community_block::{CommunityBlock, CommunityBlockForm}, + moderator::{ + ModAddCommunity, + ModAddCommunityForm, + ModBanFromCommunity, + ModBanFromCommunityForm, + ModTransferCommunity, + ModTransferCommunityForm, + }, + person::Person, + post::Post, + site::Site, + }, + traits::{Bannable, Blockable, Crud, Followable, Joinable}, }; use lemmy_db_views::comment_view::CommentQueryBuilder; use lemmy_db_views_actor::{ diff --git a/crates/api/src/lib.rs b/crates/api/src/lib.rs index ccc817616..74a3d3037 100644 --- a/crates/api/src/lib.rs +++ b/crates/api/src/lib.rs @@ -191,15 +191,14 @@ pub(crate) fn captcha_as_wav_base64(captcha: &Captcha) -> String { #[cfg(test)] mod tests { use lemmy_api_common::check_validator_time; - use lemmy_db_queries::{ + use lemmy_db_schema::{ establish_unpooled_connection, - source::{local_user::LocalUser_, secret::Secret_}, - Crud, - }; - use lemmy_db_schema::source::{ - local_user::{LocalUser, LocalUserForm}, - person::{Person, PersonForm}, - secret::Secret, + source::{ + local_user::{LocalUser, LocalUserForm}, + person::{Person, PersonForm}, + secret::Secret, + }, + traits::Crud, }; use lemmy_utils::{claims::Claims, settings::structs::Settings}; diff --git a/crates/api/src/local_user.rs b/crates/api/src/local_user.rs index d5a1533f9..727dd1a5c 100644 --- a/crates/api/src/local_user.rs +++ b/crates/api/src/local_user.rs @@ -11,25 +11,10 @@ use lemmy_api_common::{ password_length_check, person::*, }; -use lemmy_db_queries::{ +use lemmy_db_schema::{ diesel_option_overwrite, diesel_option_overwrite_to_url, from_opt_str_to_opt_enum, - source::{ - comment::Comment_, - community::Community_, - local_user::LocalUser_, - password_reset_request::PasswordResetRequest_, - person::Person_, - person_mention::PersonMention_, - post::Post_, - private_message::PrivateMessage_, - }, - Blockable, - Crud, - SortType, -}; -use lemmy_db_schema::{ naive_now, source::{ comment::Comment, @@ -44,6 +29,8 @@ use lemmy_db_schema::{ private_message::PrivateMessage, site::*, }, + traits::{Blockable, Crud}, + SortType, }; use lemmy_db_views::{ comment_report_view::CommentReportView, diff --git a/crates/api/src/post.rs b/crates/api/src/post.rs index a79a4bb5e..60cdafb9a 100644 --- a/crates/api/src/post.rs +++ b/crates/api/src/post.rs @@ -22,8 +22,10 @@ use lemmy_apub::{ }, fetcher::post_or_comment::PostOrComment, }; -use lemmy_db_queries::{source::post::Post_, Crud, Likeable, Saveable}; -use lemmy_db_schema::source::{moderator::*, post::*}; +use lemmy_db_schema::{ + source::{moderator::*, post::*}, + traits::{Crud, Likeable, Saveable}, +}; use lemmy_db_views::post_view::PostView; use lemmy_utils::{request::fetch_site_metadata, ApiError, ConnectionId, LemmyError}; use lemmy_websocket::{send::send_post_ws_message, LemmyContext, UserOperation}; diff --git a/crates/api/src/post_report.rs b/crates/api/src/post_report.rs index 5b8b0b656..35a734d44 100644 --- a/crates/api/src/post_report.rs +++ b/crates/api/src/post_report.rs @@ -14,8 +14,10 @@ use lemmy_api_common::{ }, }; use lemmy_apub::{activities::report::Report, fetcher::object_id::ObjectId}; -use lemmy_db_queries::Reportable; -use lemmy_db_schema::source::post_report::{PostReport, PostReportForm}; +use lemmy_db_schema::{ + source::post_report::{PostReport, PostReportForm}, + traits::Reportable, +}; use lemmy_db_views::{ post_report_view::{PostReportQueryBuilder, PostReportView}, post_view::PostView, diff --git a/crates/api/src/private_message.rs b/crates/api/src/private_message.rs index 6be6ba05b..1c80f44f4 100644 --- a/crates/api/src/private_message.rs +++ b/crates/api/src/private_message.rs @@ -5,8 +5,7 @@ use lemmy_api_common::{ get_local_user_view_from_jwt, person::{MarkPrivateMessageAsRead, PrivateMessageResponse}, }; -use lemmy_db_queries::{source::private_message::PrivateMessage_, Crud}; -use lemmy_db_schema::source::private_message::PrivateMessage; +use lemmy_db_schema::{source::private_message::PrivateMessage, traits::Crud}; use lemmy_utils::{ApiError, ConnectionId, LemmyError}; use lemmy_websocket::{send::send_pm_ws_message, LemmyContext, UserOperation}; diff --git a/crates/api/src/site.rs b/crates/api/src/site.rs index a80dfe66c..105412b0e 100644 --- a/crates/api/src/site.rs +++ b/crates/api/src/site.rs @@ -15,20 +15,16 @@ use lemmy_apub::{ fetcher::search::{search_by_apub_id, SearchableObjects}, EndpointType, }; -use lemmy_db_queries::{ +use lemmy_db_schema::{ from_opt_str_to_opt_enum, - source::site::Site_, - Crud, + newtypes::PersonId, + source::{moderator::*, site::Site}, + traits::{Crud, DeleteableOrRemoveable}, DbPool, - DeleteableOrRemoveable, ListingType, SearchType, SortType, }; -use lemmy_db_schema::{ - source::{moderator::*, site::Site}, - PersonId, -}; use lemmy_db_views::{ comment_view::{CommentQueryBuilder, CommentView}, post_view::{PostQueryBuilder, PostView}, @@ -450,7 +446,7 @@ impl Perform for TransferSite { is_admin(&local_user_view)?; - let read_site = blocking(context.pool(), move |conn| Site::read_simple(conn)).await??; + let read_site = blocking(context.pool(), Site::read_simple).await??; // Make sure user is the creator if read_site.creator_id != local_user_view.person.id { diff --git a/crates/api_common/Cargo.toml b/crates/api_common/Cargo.toml index 261c061c5..5672b583e 100644 --- a/crates/api_common/Cargo.toml +++ b/crates/api_common/Cargo.toml @@ -13,7 +13,6 @@ path = "src/lib.rs" doctest = false [dependencies] -lemmy_db_queries = { version = "=0.13.0", path = "../db_queries" } lemmy_db_views = { version = "=0.13.0", path = "../db_views" } lemmy_db_views_moderator = { version = "=0.13.0", path = "../db_views_moderator" } lemmy_db_views_actor = { version = "=0.13.0", path = "../db_views_actor" } diff --git a/crates/api_common/src/comment.rs b/crates/api_common/src/comment.rs index 2739b9555..eadbceb2b 100644 --- a/crates/api_common/src/comment.rs +++ b/crates/api_common/src/comment.rs @@ -1,4 +1,4 @@ -use lemmy_db_schema::{CommentId, CommentReportId, CommunityId, LocalUserId, PostId}; +use lemmy_db_schema::newtypes::{CommentId, CommentReportId, CommunityId, LocalUserId, PostId}; use lemmy_db_views::{comment_report_view::CommentReportView, comment_view::CommentView}; use serde::{Deserialize, Serialize}; diff --git a/crates/api_common/src/community.rs b/crates/api_common/src/community.rs index eea4bc7b3..1f32267f3 100644 --- a/crates/api_common/src/community.rs +++ b/crates/api_common/src/community.rs @@ -1,4 +1,4 @@ -use lemmy_db_schema::{CommunityId, PersonId}; +use lemmy_db_schema::newtypes::{CommunityId, PersonId}; use lemmy_db_views_actor::{ community_moderator_view::CommunityModeratorView, community_view::CommunityView, diff --git a/crates/api_common/src/lib.rs b/crates/api_common/src/lib.rs index c4b1dd6f5..f28c34b01 100644 --- a/crates/api_common/src/lib.rs +++ b/crates/api_common/src/lib.rs @@ -7,13 +7,8 @@ pub mod websocket; use crate::site::FederatedInstances; use diesel::PgConnection; -use lemmy_db_queries::{ - source::{community::Community_, person_block::PersonBlock_, site::Site_}, - Crud, - DbPool, - Readable, -}; use lemmy_db_schema::{ + newtypes::{CommunityId, LocalUserId, PersonId, PostId}, source::{ comment::Comment, community::Community, @@ -24,10 +19,8 @@ use lemmy_db_schema::{ secret::Secret, site::Site, }, - CommunityId, - LocalUserId, - PersonId, - PostId, + traits::{Crud, Readable}, + DbPool, }; use lemmy_db_views::local_user_view::{LocalUserSettingsView, LocalUserView}; use lemmy_db_views_actor::{ @@ -394,7 +387,7 @@ pub async fn check_person_block( pub async fn check_downvotes_enabled(score: i16, pool: &DbPool) -> Result<(), LemmyError> { if score == -1 { - let site = blocking(pool, move |conn| Site::read_simple(conn)).await??; + let site = blocking(pool, Site::read_simple).await??; if !site.enable_downvotes { return Err(ApiError::err_plain("downvotes_disabled").into()); } diff --git a/crates/api_common/src/person.rs b/crates/api_common/src/person.rs index ce0c1bf80..b93d47eae 100644 --- a/crates/api_common/src/person.rs +++ b/crates/api_common/src/person.rs @@ -15,7 +15,7 @@ pub struct Login { pub username_or_email: String, pub password: String, } -use lemmy_db_schema::{CommunityId, PersonId, PersonMentionId, PrivateMessageId}; +use lemmy_db_schema::newtypes::{CommunityId, PersonId, PersonMentionId, PrivateMessageId}; #[derive(Serialize, Deserialize)] pub struct Register { diff --git a/crates/api_common/src/post.rs b/crates/api_common/src/post.rs index 1a53ef587..d4a8c3f52 100644 --- a/crates/api_common/src/post.rs +++ b/crates/api_common/src/post.rs @@ -1,4 +1,4 @@ -use lemmy_db_schema::{CommunityId, PostId, PostReportId}; +use lemmy_db_schema::newtypes::{CommunityId, PostId, PostReportId}; use lemmy_db_views::{ comment_view::CommentView, post_report_view::PostReportView, diff --git a/crates/api_common/src/site.rs b/crates/api_common/src/site.rs index e1e75f9ea..db81fce46 100644 --- a/crates/api_common/src/site.rs +++ b/crates/api_common/src/site.rs @@ -1,4 +1,4 @@ -use lemmy_db_schema::{CommunityId, PersonId}; +use lemmy_db_schema::newtypes::{CommunityId, PersonId}; use lemmy_db_views::{ comment_view::CommentView, local_user_view::LocalUserSettingsView, diff --git a/crates/api_common/src/websocket.rs b/crates/api_common/src/websocket.rs index f88819cdc..5ab94d92d 100644 --- a/crates/api_common/src/websocket.rs +++ b/crates/api_common/src/websocket.rs @@ -1,4 +1,4 @@ -use lemmy_db_schema::{CommunityId, PostId}; +use lemmy_db_schema::newtypes::{CommunityId, PostId}; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug)] diff --git a/crates/api_crud/Cargo.toml b/crates/api_crud/Cargo.toml index 15438aa2e..c73591e3e 100644 --- a/crates/api_crud/Cargo.toml +++ b/crates/api_crud/Cargo.toml @@ -11,7 +11,6 @@ documentation = "https://join-lemmy.org/docs/en/index.html" lemmy_apub = { version = "=0.13.0", path = "../apub" } lemmy_apub_lib = { version = "=0.13.0", path = "../apub_lib" } lemmy_utils = { version = "=0.13.0", path = "../utils" } -lemmy_db_queries = { version = "=0.13.0", path = "../db_queries" } lemmy_db_schema = { version = "=0.13.0", path = "../db_schema" } lemmy_db_views = { version = "=0.13.0", path = "../db_views" } lemmy_db_views_moderator = { version = "=0.13.0", path = "../db_views_moderator" } diff --git a/crates/api_crud/src/comment/create.rs b/crates/api_crud/src/comment/create.rs index 37ecb2f05..ff2442b15 100644 --- a/crates/api_crud/src/comment/create.rs +++ b/crates/api_crud/src/comment/create.rs @@ -21,12 +21,13 @@ use lemmy_apub::{ generate_apub_endpoint, EndpointType, }; -use lemmy_db_queries::{ - source::{comment::Comment_, person_mention::PersonMention_}, - Crud, - Likeable, +use lemmy_db_schema::{ + source::{ + comment::{Comment, CommentForm, CommentLike, CommentLikeForm}, + person_mention::PersonMention, + }, + traits::{Crud, Likeable}, }; -use lemmy_db_schema::source::{comment::*, person_mention::PersonMention}; use lemmy_db_views::comment_view::CommentView; use lemmy_utils::{ utils::{remove_slurs, scrape_text_for_mentions}, diff --git a/crates/api_crud/src/comment/delete.rs b/crates/api_crud/src/comment/delete.rs index 96e8063d8..07c920f7c 100644 --- a/crates/api_crud/src/comment/delete.rs +++ b/crates/api_crud/src/comment/delete.rs @@ -9,8 +9,15 @@ use lemmy_api_common::{ send_local_notifs, }; use lemmy_apub::activities::deletion::{send_apub_delete, send_apub_remove}; -use lemmy_db_queries::{source::comment::Comment_, Crud}; -use lemmy_db_schema::source::{comment::*, community::Community, moderator::*, post::Post}; +use lemmy_db_schema::{ + source::{ + comment::Comment, + community::Community, + moderator::{ModRemoveComment, ModRemoveCommentForm}, + post::Post, + }, + traits::Crud, +}; use lemmy_db_views::comment_view::CommentView; use lemmy_utils::{ApiError, ConnectionId, LemmyError}; use lemmy_websocket::{send::send_comment_ws_message, LemmyContext, UserOperationCrud}; diff --git a/crates/api_crud/src/comment/read.rs b/crates/api_crud/src/comment/read.rs index c4d0c394b..490c9670f 100644 --- a/crates/api_crud/src/comment/read.rs +++ b/crates/api_crud/src/comment/read.rs @@ -2,7 +2,12 @@ use crate::PerformCrud; use actix_web::web::Data; use lemmy_api_common::{blocking, comment::*, get_local_user_view_from_jwt_opt}; use lemmy_apub::{build_actor_id_from_shortname, EndpointType}; -use lemmy_db_queries::{from_opt_str_to_opt_enum, DeleteableOrRemoveable, ListingType, SortType}; +use lemmy_db_schema::{ + from_opt_str_to_opt_enum, + traits::DeleteableOrRemoveable, + ListingType, + SortType, +}; use lemmy_db_views::comment_view::CommentQueryBuilder; use lemmy_utils::{ApiError, ConnectionId, LemmyError}; use lemmy_websocket::LemmyContext; diff --git a/crates/api_crud/src/comment/update.rs b/crates/api_crud/src/comment/update.rs index b0892c58c..7d45b9403 100644 --- a/crates/api_crud/src/comment/update.rs +++ b/crates/api_crud/src/comment/update.rs @@ -13,8 +13,7 @@ use lemmy_apub::activities::{ comment::create_or_update::CreateOrUpdateComment, CreateOrUpdateType, }; -use lemmy_db_queries::source::comment::Comment_; -use lemmy_db_schema::source::comment::*; +use lemmy_db_schema::source::comment::Comment; use lemmy_db_views::comment_view::CommentView; use lemmy_utils::{ utils::{remove_slurs, scrape_text_for_mentions}, diff --git a/crates/api_crud/src/community/create.rs b/crates/api_crud/src/community/create.rs index 56d04ce54..cc0e62db4 100644 --- a/crates/api_crud/src/community/create.rs +++ b/crates/api_crud/src/community/create.rs @@ -14,17 +14,20 @@ use lemmy_apub::{ generate_shared_inbox_url, EndpointType, }; -use lemmy_db_queries::{diesel_option_overwrite_to_url, Crud, Followable, Joinable}; -use lemmy_db_schema::source::{ - community::{ - Community, - CommunityFollower, - CommunityFollowerForm, - CommunityForm, - CommunityModerator, - CommunityModeratorForm, +use lemmy_db_schema::{ + diesel_option_overwrite_to_url, + source::{ + community::{ + Community, + CommunityFollower, + CommunityFollowerForm, + CommunityForm, + CommunityModerator, + CommunityModeratorForm, + }, + site::Site, }, - site::Site, + traits::{Crud, Followable, Joinable}, }; use lemmy_db_views_actor::community_view::CommunityView; use lemmy_utils::{ diff --git a/crates/api_crud/src/community/delete.rs b/crates/api_crud/src/community/delete.rs index ea1890402..5f9fbb44e 100644 --- a/crates/api_crud/src/community/delete.rs +++ b/crates/api_crud/src/community/delete.rs @@ -2,10 +2,12 @@ use crate::PerformCrud; use actix_web::web::Data; use lemmy_api_common::{blocking, community::*, get_local_user_view_from_jwt, is_admin}; use lemmy_apub::activities::deletion::{send_apub_delete, send_apub_remove}; -use lemmy_db_queries::{source::community::Community_, Crud}; -use lemmy_db_schema::source::{ - community::*, - moderator::{ModRemoveCommunity, ModRemoveCommunityForm}, +use lemmy_db_schema::{ + source::{ + community::Community, + moderator::{ModRemoveCommunity, ModRemoveCommunityForm}, + }, + traits::Crud, }; use lemmy_db_views_actor::community_moderator_view::CommunityModeratorView; use lemmy_utils::{utils::naive_from_unix, ApiError, ConnectionId, LemmyError}; diff --git a/crates/api_crud/src/community/read.rs b/crates/api_crud/src/community/read.rs index 9d9bdce00..3b9405aff 100644 --- a/crates/api_crud/src/community/read.rs +++ b/crates/api_crud/src/community/read.rs @@ -2,8 +2,13 @@ use crate::PerformCrud; use actix_web::web::Data; use lemmy_api_common::{blocking, community::*, get_local_user_view_from_jwt_opt}; use lemmy_apub::{build_actor_id_from_shortname, fetcher::object_id::ObjectId, EndpointType}; -use lemmy_db_queries::{from_opt_str_to_opt_enum, DeleteableOrRemoveable, ListingType, SortType}; -use lemmy_db_schema::source::community::*; +use lemmy_db_schema::{ + from_opt_str_to_opt_enum, + source::community::Community, + traits::DeleteableOrRemoveable, + ListingType, + SortType, +}; use lemmy_db_views_actor::{ community_moderator_view::CommunityModeratorView, community_view::{CommunityQueryBuilder, CommunityView}, diff --git a/crates/api_crud/src/community/update.rs b/crates/api_crud/src/community/update.rs index 56fe72838..f269807b5 100644 --- a/crates/api_crud/src/community/update.rs +++ b/crates/api_crud/src/community/update.rs @@ -6,11 +6,12 @@ use lemmy_api_common::{ get_local_user_view_from_jwt, }; use lemmy_apub::activities::community::update::UpdateCommunity; -use lemmy_db_queries::{diesel_option_overwrite_to_url, Crud}; use lemmy_db_schema::{ + diesel_option_overwrite_to_url, naive_now, + newtypes::PersonId, source::community::{Community, CommunityForm}, - PersonId, + traits::Crud, }; use lemmy_db_views_actor::community_moderator_view::CommunityModeratorView; use lemmy_utils::{utils::check_slurs_opt, ApiError, ConnectionId, LemmyError}; diff --git a/crates/api_crud/src/post/create.rs b/crates/api_crud/src/post/create.rs index 108205b7c..e75999e59 100644 --- a/crates/api_crud/src/post/create.rs +++ b/crates/api_crud/src/post/create.rs @@ -19,8 +19,10 @@ use lemmy_apub::{ generate_apub_endpoint, EndpointType, }; -use lemmy_db_queries::{source::post::Post_, Crud, Likeable}; -use lemmy_db_schema::source::post::*; +use lemmy_db_schema::{ + source::post::{Post, PostForm, PostLike, PostLikeForm}, + traits::{Crud, Likeable}, +}; use lemmy_utils::{ request::fetch_site_data, utils::{check_slurs, check_slurs_opt, clean_url_params, is_valid_post_title}, diff --git a/crates/api_crud/src/post/delete.rs b/crates/api_crud/src/post/delete.rs index 01fa0575b..1a9044c37 100644 --- a/crates/api_crud/src/post/delete.rs +++ b/crates/api_crud/src/post/delete.rs @@ -9,8 +9,14 @@ use lemmy_api_common::{ post::*, }; use lemmy_apub::activities::deletion::{send_apub_delete, send_apub_remove}; -use lemmy_db_queries::{source::post::Post_, Crud}; -use lemmy_db_schema::source::{community::Community, moderator::*, post::*}; +use lemmy_db_schema::{ + source::{ + community::Community, + moderator::{ModRemovePost, ModRemovePostForm}, + post::Post, + }, + traits::Crud, +}; use lemmy_utils::{ApiError, ConnectionId, LemmyError}; use lemmy_websocket::{send::send_post_ws_message, LemmyContext, UserOperationCrud}; diff --git a/crates/api_crud/src/post/read.rs b/crates/api_crud/src/post/read.rs index 76e9548ed..ee05b7231 100644 --- a/crates/api_crud/src/post/read.rs +++ b/crates/api_crud/src/post/read.rs @@ -2,7 +2,12 @@ use crate::PerformCrud; use actix_web::web::Data; use lemmy_api_common::{blocking, get_local_user_view_from_jwt_opt, mark_post_as_read, post::*}; use lemmy_apub::{build_actor_id_from_shortname, EndpointType}; -use lemmy_db_queries::{from_opt_str_to_opt_enum, DeleteableOrRemoveable, ListingType, SortType}; +use lemmy_db_schema::{ + from_opt_str_to_opt_enum, + traits::DeleteableOrRemoveable, + ListingType, + SortType, +}; use lemmy_db_views::{ comment_view::CommentQueryBuilder, post_view::{PostQueryBuilder, PostView}, diff --git a/crates/api_crud/src/post/update.rs b/crates/api_crud/src/post/update.rs index c84901cc8..8c346b882 100644 --- a/crates/api_crud/src/post/update.rs +++ b/crates/api_crud/src/post/update.rs @@ -8,8 +8,11 @@ use lemmy_api_common::{ post::*, }; use lemmy_apub::activities::{post::create_or_update::CreateOrUpdatePost, CreateOrUpdateType}; -use lemmy_db_queries::{source::post::Post_, Crud}; -use lemmy_db_schema::{naive_now, source::post::*}; +use lemmy_db_schema::{ + naive_now, + source::post::{Post, PostForm}, + traits::Crud, +}; use lemmy_utils::{ request::fetch_site_data, utils::{check_slurs_opt, clean_url_params, is_valid_post_title}, diff --git a/crates/api_crud/src/private_message/create.rs b/crates/api_crud/src/private_message/create.rs index d04412f60..9e3351252 100644 --- a/crates/api_crud/src/private_message/create.rs +++ b/crates/api_crud/src/private_message/create.rs @@ -15,8 +15,10 @@ use lemmy_apub::{ generate_apub_endpoint, EndpointType, }; -use lemmy_db_queries::{source::private_message::PrivateMessage_, Crud}; -use lemmy_db_schema::source::private_message::{PrivateMessage, PrivateMessageForm}; +use lemmy_db_schema::{ + source::private_message::{PrivateMessage, PrivateMessageForm}, + traits::Crud, +}; use lemmy_db_views::local_user_view::LocalUserView; use lemmy_utils::{utils::remove_slurs, ApiError, ConnectionId, LemmyError}; use lemmy_websocket::{send::send_pm_ws_message, LemmyContext, UserOperationCrud}; diff --git a/crates/api_crud/src/private_message/delete.rs b/crates/api_crud/src/private_message/delete.rs index 70efc903a..0c61a09b0 100644 --- a/crates/api_crud/src/private_message/delete.rs +++ b/crates/api_crud/src/private_message/delete.rs @@ -9,8 +9,10 @@ use lemmy_apub::activities::private_message::{ delete::DeletePrivateMessage as DeletePrivateMessageApub, undo_delete::UndoDeletePrivateMessage, }; -use lemmy_db_queries::{source::private_message::PrivateMessage_, Crud, DeleteableOrRemoveable}; -use lemmy_db_schema::source::private_message::PrivateMessage; +use lemmy_db_schema::{ + source::private_message::PrivateMessage, + traits::{Crud, DeleteableOrRemoveable}, +}; use lemmy_utils::{ApiError, ConnectionId, LemmyError}; use lemmy_websocket::{send::send_pm_ws_message, LemmyContext, UserOperationCrud}; diff --git a/crates/api_crud/src/private_message/read.rs b/crates/api_crud/src/private_message/read.rs index bf119d75c..ae2dc203f 100644 --- a/crates/api_crud/src/private_message/read.rs +++ b/crates/api_crud/src/private_message/read.rs @@ -5,7 +5,7 @@ use lemmy_api_common::{ get_local_user_view_from_jwt, person::{GetPrivateMessages, PrivateMessagesResponse}, }; -use lemmy_db_queries::DeleteableOrRemoveable; +use lemmy_db_schema::traits::DeleteableOrRemoveable; use lemmy_db_views::private_message_view::PrivateMessageQueryBuilder; use lemmy_utils::{ConnectionId, LemmyError}; use lemmy_websocket::LemmyContext; diff --git a/crates/api_crud/src/private_message/update.rs b/crates/api_crud/src/private_message/update.rs index 7ef2d71da..026a047e2 100644 --- a/crates/api_crud/src/private_message/update.rs +++ b/crates/api_crud/src/private_message/update.rs @@ -9,8 +9,7 @@ use lemmy_apub::activities::{ private_message::create_or_update::CreateOrUpdatePrivateMessage, CreateOrUpdateType, }; -use lemmy_db_queries::{source::private_message::PrivateMessage_, Crud}; -use lemmy_db_schema::source::private_message::PrivateMessage; +use lemmy_db_schema::{source::private_message::PrivateMessage, traits::Crud}; use lemmy_utils::{utils::remove_slurs, ApiError, ConnectionId, LemmyError}; use lemmy_websocket::{send::send_pm_ws_message, LemmyContext, UserOperationCrud}; diff --git a/crates/api_crud/src/site/create.rs b/crates/api_crud/src/site/create.rs index 7fdf4d3c8..865ade77f 100644 --- a/crates/api_crud/src/site/create.rs +++ b/crates/api_crud/src/site/create.rs @@ -7,13 +7,12 @@ use lemmy_api_common::{ site::*, site_description_length_check, }; -use lemmy_db_queries::{ +use lemmy_db_schema::{ diesel_option_overwrite, diesel_option_overwrite_to_url, - source::site::Site_, - Crud, + source::site::{Site, SiteForm}, + traits::Crud, }; -use lemmy_db_schema::source::site::{Site, *}; use lemmy_db_views::site_view::SiteView; use lemmy_utils::{ utils::{check_slurs, check_slurs_opt}, @@ -34,7 +33,7 @@ impl PerformCrud for CreateSite { ) -> Result { let data: &CreateSite = self; - let read_site = move |conn: &'_ _| Site::read_simple(conn); + let read_site = Site::read_simple; if blocking(context.pool(), read_site).await?.is_ok() { return Err(ApiError::err_plain("site_already_exists").into()); }; diff --git a/crates/api_crud/src/site/update.rs b/crates/api_crud/src/site/update.rs index 192fa669f..b6f06e3ad 100644 --- a/crates/api_crud/src/site/update.rs +++ b/crates/api_crud/src/site/update.rs @@ -7,15 +7,12 @@ use lemmy_api_common::{ site::{EditSite, SiteResponse}, site_description_length_check, }; -use lemmy_db_queries::{ +use lemmy_db_schema::{ diesel_option_overwrite, diesel_option_overwrite_to_url, - source::site::Site_, - Crud, -}; -use lemmy_db_schema::{ naive_now, source::site::{Site, SiteForm}, + traits::Crud, }; use lemmy_db_views::site_view::SiteView; use lemmy_utils::{utils::check_slurs_opt, ApiError, ConnectionId, LemmyError}; @@ -39,7 +36,7 @@ impl PerformCrud for EditSite { // Make sure user is an admin is_admin(&local_user_view)?; - let found_site = blocking(context.pool(), move |conn| Site::read_simple(conn)).await??; + let found_site = blocking(context.pool(), Site::read_simple).await??; let sidebar = diesel_option_overwrite(&data.sidebar); let description = diesel_option_overwrite(&data.description); diff --git a/crates/api_crud/src/user/create.rs b/crates/api_crud/src/user/create.rs index b2beeb8ed..ce37cd6a0 100644 --- a/crates/api_crud/src/user/create.rs +++ b/crates/api_crud/src/user/create.rs @@ -8,23 +8,25 @@ use lemmy_apub::{ generate_shared_inbox_url, EndpointType, }; -use lemmy_db_queries::{ - source::{local_user::LocalUser_, site::Site_}, - Crud, - Followable, - Joinable, +use lemmy_db_schema::{ + newtypes::CommunityId, + source::{ + community::{ + Community, + CommunityFollower, + CommunityFollowerForm, + CommunityForm, + CommunityModerator, + CommunityModeratorForm, + }, + local_user::{LocalUser, LocalUserForm}, + person::{Person, PersonForm}, + site::Site, + }, + traits::{Crud, Followable, Joinable}, ListingType, SortType, }; -use lemmy_db_schema::{ - source::{ - community::*, - local_user::{LocalUser, LocalUserForm}, - person::*, - site::*, - }, - CommunityId, -}; use lemmy_db_views_actor::person_view::PersonViewSafe; use lemmy_utils::{ apub::generate_actor_keypair, @@ -48,7 +50,7 @@ impl PerformCrud for Register { let data: &Register = self; // Make sure site has open registration - if let Ok(site) = blocking(context.pool(), move |conn| Site::read_simple(conn)).await? { + if let Ok(site) = blocking(context.pool(), Site::read_simple).await? { if !site.open_registration { return Err(ApiError::err_plain("registration_closed").into()); } diff --git a/crates/api_crud/src/user/delete.rs b/crates/api_crud/src/user/delete.rs index 050f54116..28f42831e 100644 --- a/crates/api_crud/src/user/delete.rs +++ b/crates/api_crud/src/user/delete.rs @@ -2,8 +2,7 @@ use crate::PerformCrud; use actix_web::web::Data; use bcrypt::verify; use lemmy_api_common::{blocking, get_local_user_view_from_jwt, person::*}; -use lemmy_db_queries::source::{comment::Comment_, person::Person_, post::Post_}; -use lemmy_db_schema::source::{comment::Comment, person::*, post::Post}; +use lemmy_db_schema::source::{comment::Comment, person::Person, post::Post}; use lemmy_utils::{ApiError, ConnectionId, LemmyError}; use lemmy_websocket::LemmyContext; diff --git a/crates/api_crud/src/user/read.rs b/crates/api_crud/src/user/read.rs index 7082d5231..4eb6771ee 100644 --- a/crates/api_crud/src/user/read.rs +++ b/crates/api_crud/src/user/read.rs @@ -2,8 +2,7 @@ use crate::PerformCrud; use actix_web::web::Data; use lemmy_api_common::{blocking, get_local_user_view_from_jwt_opt, person::*}; use lemmy_apub::{build_actor_id_from_shortname, fetcher::object_id::ObjectId, EndpointType}; -use lemmy_db_queries::{from_opt_str_to_opt_enum, SortType}; -use lemmy_db_schema::source::person::*; +use lemmy_db_schema::{from_opt_str_to_opt_enum, source::person::Person, SortType}; use lemmy_db_views::{comment_view::CommentQueryBuilder, post_view::PostQueryBuilder}; use lemmy_db_views_actor::{ community_moderator_view::CommunityModeratorView, diff --git a/crates/apub/Cargo.toml b/crates/apub/Cargo.toml index 002f842d1..2bc69c4a6 100644 --- a/crates/apub/Cargo.toml +++ b/crates/apub/Cargo.toml @@ -15,7 +15,6 @@ doctest = false [dependencies] lemmy_utils = { version = "=0.13.0", path = "../utils" } lemmy_apub_lib = { version = "=0.13.0", path = "../apub_lib" } -lemmy_db_queries = { version = "=0.13.0", path = "../db_queries" } lemmy_db_schema = { version = "=0.13.0", path = "../db_schema" } lemmy_db_views = { version = "=0.13.0", path = "../db_views" } lemmy_db_views_actor = { version = "=0.13.0", path = "../db_views_actor" } diff --git a/crates/apub/src/activities/comment/create_or_update.rs b/crates/apub/src/activities/comment/create_or_update.rs index b22c240e6..c9b111837 100644 --- a/crates/apub/src/activities/comment/create_or_update.rs +++ b/crates/apub/src/activities/comment/create_or_update.rs @@ -21,8 +21,10 @@ use lemmy_apub_lib::{ values::PublicUrl, verify::verify_domains_match, }; -use lemmy_db_queries::Crud; -use lemmy_db_schema::source::{comment::Comment, community::Community, person::Person, post::Post}; +use lemmy_db_schema::{ + source::{comment::Comment, community::Community, person::Person, post::Post}, + traits::Crud, +}; use lemmy_utils::LemmyError; use lemmy_websocket::{send::send_comment_ws_message, LemmyContext, UserOperationCrud}; use serde::{Deserialize, Serialize}; diff --git a/crates/apub/src/activities/comment/mod.rs b/crates/apub/src/activities/comment/mod.rs index d24ff35de..1ac320cb9 100644 --- a/crates/apub/src/activities/comment/mod.rs +++ b/crates/apub/src/activities/comment/mod.rs @@ -7,10 +7,11 @@ use anyhow::anyhow; use itertools::Itertools; use lemmy_api_common::{blocking, send_local_notifs}; use lemmy_apub_lib::{traits::ActorType, webfinger::WebfingerResponse}; -use lemmy_db_queries::{Crud, DbPool}; use lemmy_db_schema::{ + newtypes::LocalUserId, source::{comment::Comment, community::Community, person::Person, post::Post}, - LocalUserId, + traits::Crud, + DbPool, }; use lemmy_utils::{ request::{retry, RecvError}, diff --git a/crates/apub/src/activities/community/add_mod.rs b/crates/apub/src/activities/community/add_mod.rs index 6544976b5..149b92cd2 100644 --- a/crates/apub/src/activities/community/add_mod.rs +++ b/crates/apub/src/activities/community/add_mod.rs @@ -23,10 +23,12 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, values::PublicUrl, }; -use lemmy_db_queries::{source::community::CommunityModerator_, Joinable}; -use lemmy_db_schema::source::{ - community::{Community, CommunityModerator, CommunityModeratorForm}, - person::Person, +use lemmy_db_schema::{ + source::{ + community::{Community, CommunityModerator, CommunityModeratorForm}, + person::Person, + }, + traits::Joinable, }; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; diff --git a/crates/apub/src/activities/community/block_user.rs b/crates/apub/src/activities/community/block_user.rs index f01c4133b..9b4c3e813 100644 --- a/crates/apub/src/activities/community/block_user.rs +++ b/crates/apub/src/activities/community/block_user.rs @@ -21,16 +21,18 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, values::PublicUrl, }; -use lemmy_db_queries::{Bannable, Followable}; -use lemmy_db_schema::source::{ - community::{ - Community, - CommunityFollower, - CommunityFollowerForm, - CommunityPersonBan, - CommunityPersonBanForm, +use lemmy_db_schema::{ + source::{ + community::{ + Community, + CommunityFollower, + CommunityFollowerForm, + CommunityPersonBan, + CommunityPersonBanForm, + }, + person::Person, }, - person::Person, + traits::{Bannable, Followable}, }; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; diff --git a/crates/apub/src/activities/community/remove_mod.rs b/crates/apub/src/activities/community/remove_mod.rs index 34db3c443..4f980d01a 100644 --- a/crates/apub/src/activities/community/remove_mod.rs +++ b/crates/apub/src/activities/community/remove_mod.rs @@ -24,10 +24,12 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, values::PublicUrl, }; -use lemmy_db_queries::Joinable; -use lemmy_db_schema::source::{ - community::{Community, CommunityModerator, CommunityModeratorForm}, - person::Person, +use lemmy_db_schema::{ + source::{ + community::{Community, CommunityModerator, CommunityModeratorForm}, + person::Person, + }, + traits::Joinable, }; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; diff --git a/crates/apub/src/activities/community/undo_block_user.rs b/crates/apub/src/activities/community/undo_block_user.rs index 1aadc9634..47cace42c 100644 --- a/crates/apub/src/activities/community/undo_block_user.rs +++ b/crates/apub/src/activities/community/undo_block_user.rs @@ -25,10 +25,12 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, values::PublicUrl, }; -use lemmy_db_queries::Bannable; -use lemmy_db_schema::source::{ - community::{Community, CommunityPersonBan, CommunityPersonBanForm}, - person::Person, +use lemmy_db_schema::{ + source::{ + community::{Community, CommunityPersonBan, CommunityPersonBanForm}, + person::Person, + }, + traits::Bannable, }; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; diff --git a/crates/apub/src/activities/community/update.rs b/crates/apub/src/activities/community/update.rs index b71dcc71b..02b7126ad 100644 --- a/crates/apub/src/activities/community/update.rs +++ b/crates/apub/src/activities/community/update.rs @@ -22,10 +22,12 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, values::PublicUrl, }; -use lemmy_db_queries::Crud; -use lemmy_db_schema::source::{ - community::{Community, CommunityForm}, - person::Person, +use lemmy_db_schema::{ + source::{ + community::{Community, CommunityForm}, + person::Person, + }, + traits::Crud, }; use lemmy_utils::LemmyError; use lemmy_websocket::{send::send_community_ws_message, LemmyContext, UserOperationCrud}; diff --git a/crates/apub/src/activities/deletion/delete.rs b/crates/apub/src/activities/deletion/delete.rs index 5c0051d79..251a3ffa4 100644 --- a/crates/apub/src/activities/deletion/delete.rs +++ b/crates/apub/src/activities/deletion/delete.rs @@ -26,23 +26,22 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, values::PublicUrl, }; -use lemmy_db_queries::{ - source::{comment::Comment_, community::Community_, post::Post_}, - Crud, -}; -use lemmy_db_schema::source::{ - comment::Comment, - community::Community, - moderator::{ - ModRemoveComment, - ModRemoveCommentForm, - ModRemoveCommunity, - ModRemoveCommunityForm, - ModRemovePost, - ModRemovePostForm, +use lemmy_db_schema::{ + source::{ + comment::Comment, + community::Community, + moderator::{ + ModRemoveComment, + ModRemoveCommentForm, + ModRemoveCommunity, + ModRemoveCommunityForm, + ModRemovePost, + ModRemovePostForm, + }, + person::Person, + post::Post, }, - person::Person, - post::Post, + traits::Crud, }; use lemmy_utils::LemmyError; use lemmy_websocket::{ diff --git a/crates/apub/src/activities/deletion/mod.rs b/crates/apub/src/activities/deletion/mod.rs index 7f5dfe386..3a38f2a22 100644 --- a/crates/apub/src/activities/deletion/mod.rs +++ b/crates/apub/src/activities/deletion/mod.rs @@ -12,7 +12,6 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActorType, ApubObject}, verify::verify_domains_match, }; -use lemmy_db_queries::source::{comment::Comment_, community::Community_, post::Post_}; use lemmy_db_schema::source::{comment::Comment, community::Community, person::Person, post::Post}; use lemmy_utils::LemmyError; use lemmy_websocket::{ diff --git a/crates/apub/src/activities/deletion/undo_delete.rs b/crates/apub/src/activities/deletion/undo_delete.rs index 37c2afdcb..7a96d4301 100644 --- a/crates/apub/src/activities/deletion/undo_delete.rs +++ b/crates/apub/src/activities/deletion/undo_delete.rs @@ -27,7 +27,6 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, values::PublicUrl, }; -use lemmy_db_queries::source::{comment::Comment_, community::Community_, post::Post_}; use lemmy_db_schema::source::{comment::Comment, community::Community, person::Person, post::Post}; use lemmy_utils::LemmyError; use lemmy_websocket::{ diff --git a/crates/apub/src/activities/following/accept.rs b/crates/apub/src/activities/following/accept.rs index b70b4b219..bfc9ba315 100644 --- a/crates/apub/src/activities/following/accept.rs +++ b/crates/apub/src/activities/following/accept.rs @@ -21,10 +21,12 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, verify::verify_urls_match, }; -use lemmy_db_queries::Followable; -use lemmy_db_schema::source::{ - community::{Community, CommunityFollower}, - person::Person, +use lemmy_db_schema::{ + source::{ + community::{Community, CommunityFollower}, + person::Person, + }, + traits::Followable, }; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; diff --git a/crates/apub/src/activities/following/follow.rs b/crates/apub/src/activities/following/follow.rs index 7e0640a1b..c75a08cd1 100644 --- a/crates/apub/src/activities/following/follow.rs +++ b/crates/apub/src/activities/following/follow.rs @@ -21,10 +21,12 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, verify::verify_urls_match, }; -use lemmy_db_queries::Followable; -use lemmy_db_schema::source::{ - community::{Community, CommunityFollower, CommunityFollowerForm}, - person::Person, +use lemmy_db_schema::{ + source::{ + community::{Community, CommunityFollower, CommunityFollowerForm}, + person::Person, + }, + traits::Followable, }; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; diff --git a/crates/apub/src/activities/following/undo.rs b/crates/apub/src/activities/following/undo.rs index 0c4e4a8bc..2699a98c1 100644 --- a/crates/apub/src/activities/following/undo.rs +++ b/crates/apub/src/activities/following/undo.rs @@ -21,10 +21,12 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, verify::verify_urls_match, }; -use lemmy_db_queries::Followable; -use lemmy_db_schema::source::{ - community::{Community, CommunityFollower, CommunityFollowerForm}, - person::Person, +use lemmy_db_schema::{ + source::{ + community::{Community, CommunityFollower, CommunityFollowerForm}, + person::Person, + }, + traits::Followable, }; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; diff --git a/crates/apub/src/activities/post/create_or_update.rs b/crates/apub/src/activities/post/create_or_update.rs index f1a336680..7a1ddc406 100644 --- a/crates/apub/src/activities/post/create_or_update.rs +++ b/crates/apub/src/activities/post/create_or_update.rs @@ -21,8 +21,10 @@ use lemmy_apub_lib::{ values::PublicUrl, verify::{verify_domains_match, verify_urls_match}, }; -use lemmy_db_queries::Crud; -use lemmy_db_schema::source::{community::Community, person::Person, post::Post}; +use lemmy_db_schema::{ + source::{community::Community, person::Person, post::Post}, + traits::Crud, +}; use lemmy_utils::LemmyError; use lemmy_websocket::{send::send_post_ws_message, LemmyContext, UserOperationCrud}; use serde::{Deserialize, Serialize}; diff --git a/crates/apub/src/activities/private_message/create_or_update.rs b/crates/apub/src/activities/private_message/create_or_update.rs index a5f14d52f..6b3bc2b62 100644 --- a/crates/apub/src/activities/private_message/create_or_update.rs +++ b/crates/apub/src/activities/private_message/create_or_update.rs @@ -12,8 +12,10 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, verify::verify_domains_match, }; -use lemmy_db_queries::Crud; -use lemmy_db_schema::source::{person::Person, private_message::PrivateMessage}; +use lemmy_db_schema::{ + source::{person::Person, private_message::PrivateMessage}, + traits::Crud, +}; use lemmy_utils::LemmyError; use lemmy_websocket::{send::send_pm_ws_message, LemmyContext, UserOperationCrud}; use serde::{Deserialize, Serialize}; diff --git a/crates/apub/src/activities/private_message/delete.rs b/crates/apub/src/activities/private_message/delete.rs index 865cc785b..ded3b3ad4 100644 --- a/crates/apub/src/activities/private_message/delete.rs +++ b/crates/apub/src/activities/private_message/delete.rs @@ -16,8 +16,10 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, verify::verify_domains_match, }; -use lemmy_db_queries::{source::private_message::PrivateMessage_, Crud}; -use lemmy_db_schema::source::{person::Person, private_message::PrivateMessage}; +use lemmy_db_schema::{ + source::{person::Person, private_message::PrivateMessage}, + traits::Crud, +}; use lemmy_utils::LemmyError; use lemmy_websocket::{send::send_pm_ws_message, LemmyContext, UserOperationCrud}; use serde::{Deserialize, Serialize}; diff --git a/crates/apub/src/activities/private_message/undo_delete.rs b/crates/apub/src/activities/private_message/undo_delete.rs index e609b1e44..2c5fd0e72 100644 --- a/crates/apub/src/activities/private_message/undo_delete.rs +++ b/crates/apub/src/activities/private_message/undo_delete.rs @@ -21,8 +21,10 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, verify::{verify_domains_match, verify_urls_match}, }; -use lemmy_db_queries::{source::private_message::PrivateMessage_, Crud}; -use lemmy_db_schema::source::{person::Person, private_message::PrivateMessage}; +use lemmy_db_schema::{ + source::{person::Person, private_message::PrivateMessage}, + traits::Crud, +}; use lemmy_utils::LemmyError; use lemmy_websocket::{send::send_pm_ws_message, LemmyContext, UserOperationCrud}; use serde::{Deserialize, Serialize}; diff --git a/crates/apub/src/activities/report.rs b/crates/apub/src/activities/report.rs index c08210b3d..aee673cfa 100644 --- a/crates/apub/src/activities/report.rs +++ b/crates/apub/src/activities/report.rs @@ -16,15 +16,15 @@ use lemmy_apub_lib::{ data::Data, traits::{ActivityFields, ActivityHandler, ActorType}, }; -use lemmy_db_queries::{Crud, Reportable}; use lemmy_db_schema::{ + newtypes::CommunityId, source::{ comment_report::{CommentReport, CommentReportForm}, community::Community, person::Person, post_report::{PostReport, PostReportForm}, }, - CommunityId, + traits::{Crud, Reportable}, }; use lemmy_db_views::{comment_report_view::CommentReportView, post_report_view::PostReportView}; use lemmy_utils::LemmyError; diff --git a/crates/apub/src/activities/voting/mod.rs b/crates/apub/src/activities/voting/mod.rs index 48d44c0ee..90757eebf 100644 --- a/crates/apub/src/activities/voting/mod.rs +++ b/crates/apub/src/activities/voting/mod.rs @@ -1,10 +1,12 @@ use crate::activities::voting::vote::VoteType; use lemmy_api_common::blocking; -use lemmy_db_queries::Likeable; -use lemmy_db_schema::source::{ - comment::{Comment, CommentLike, CommentLikeForm}, - person::Person, - post::{Post, PostLike, PostLikeForm}, +use lemmy_db_schema::{ + source::{ + comment::{Comment, CommentLike, CommentLikeForm}, + person::Person, + post::{Post, PostLike, PostLikeForm}, + }, + traits::Likeable, }; use lemmy_utils::LemmyError; use lemmy_websocket::{ diff --git a/crates/apub/src/activities/voting/undo_vote.rs b/crates/apub/src/activities/voting/undo_vote.rs index bfb74371d..2c87aa899 100644 --- a/crates/apub/src/activities/voting/undo_vote.rs +++ b/crates/apub/src/activities/voting/undo_vote.rs @@ -27,10 +27,10 @@ use lemmy_apub_lib::{ values::PublicUrl, verify::verify_urls_match, }; -use lemmy_db_queries::Crud; use lemmy_db_schema::{ + newtypes::CommunityId, source::{community::Community, person::Person}, - CommunityId, + traits::Crud, }; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; diff --git a/crates/apub/src/activities/voting/vote.rs b/crates/apub/src/activities/voting/vote.rs index 4d8537546..2463cbc02 100644 --- a/crates/apub/src/activities/voting/vote.rs +++ b/crates/apub/src/activities/voting/vote.rs @@ -18,10 +18,10 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler, ActorType}, values::PublicUrl, }; -use lemmy_db_queries::Crud; use lemmy_db_schema::{ + newtypes::CommunityId, source::{community::Community, person::Person}, - CommunityId, + traits::Crud, }; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; diff --git a/crates/apub/src/fetcher/community.rs b/crates/apub/src/fetcher/community.rs index 62749f6e3..646f8fcad 100644 --- a/crates/apub/src/fetcher/community.rs +++ b/crates/apub/src/fetcher/community.rs @@ -7,10 +7,12 @@ use activitystreams::collection::{CollectionExt, OrderedCollection}; use anyhow::Context; use lemmy_api_common::blocking; use lemmy_apub_lib::{data::Data, traits::ActivityHandler}; -use lemmy_db_queries::Joinable; -use lemmy_db_schema::source::{ - community::{Community, CommunityModerator, CommunityModeratorForm}, - person::Person, +use lemmy_db_schema::{ + source::{ + community::{Community, CommunityModerator, CommunityModeratorForm}, + person::Person, + }, + traits::Joinable, }; use lemmy_db_views_actor::community_moderator_view::CommunityModeratorView; use lemmy_utils::{location_info, LemmyError}; diff --git a/crates/apub/src/fetcher/object_id.rs b/crates/apub/src/fetcher/object_id.rs index 14e983bb3..771c276a5 100644 --- a/crates/apub/src/fetcher/object_id.rs +++ b/crates/apub/src/fetcher/object_id.rs @@ -3,8 +3,7 @@ use anyhow::anyhow; use diesel::{NotFound, PgConnection}; use lemmy_api_common::blocking; use lemmy_apub_lib::{traits::ApubObject, APUB_JSON_CONTENT_TYPE}; -use lemmy_db_queries::DbPool; -use lemmy_db_schema::DbUrl; +use lemmy_db_schema::{newtypes::DbUrl, DbPool}; use lemmy_utils::{request::retry, settings::structs::Settings, LemmyError}; use lemmy_websocket::LemmyContext; use reqwest::StatusCode; diff --git a/crates/apub/src/fetcher/search.rs b/crates/apub/src/fetcher/search.rs index 9fcf5a79c..d7b9a0bfd 100644 --- a/crates/apub/src/fetcher/search.rs +++ b/crates/apub/src/fetcher/search.rs @@ -11,11 +11,10 @@ use lemmy_apub_lib::{ traits::ApubObject, webfinger::{webfinger_resolve_actor, WebfingerType}, }; -use lemmy_db_queries::{ - source::{community::Community_, person::Person_}, +use lemmy_db_schema::{ + source::{comment::Comment, community::Community, person::Person, post::Post}, DbPool, }; -use lemmy_db_schema::source::{comment::Comment, community::Community, person::Person, post::Post}; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; use serde::Deserialize; diff --git a/crates/apub/src/http/comment.rs b/crates/apub/src/http/comment.rs index 4f63d89d3..769a9dd85 100644 --- a/crates/apub/src/http/comment.rs +++ b/crates/apub/src/http/comment.rs @@ -5,8 +5,7 @@ use crate::{ use actix_web::{body::Body, web, web::Path, HttpResponse}; use diesel::result::Error::NotFound; use lemmy_api_common::blocking; -use lemmy_db_queries::Crud; -use lemmy_db_schema::{source::comment::Comment, CommentId}; +use lemmy_db_schema::{newtypes::CommentId, source::comment::Comment, traits::Crud}; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; use serde::Deserialize; diff --git a/crates/apub/src/http/community.rs b/crates/apub/src/http/community.rs index 3f74b622a..2094d15d3 100644 --- a/crates/apub/src/http/community.rs +++ b/crates/apub/src/http/community.rs @@ -24,7 +24,6 @@ use activitystreams::{ use actix_web::{body::Body, web, web::Payload, HttpRequest, HttpResponse}; use lemmy_api_common::blocking; use lemmy_apub_lib::traits::{ActivityFields, ActivityHandler}; -use lemmy_db_queries::source::{activity::Activity_, community::Community_}; use lemmy_db_schema::source::{activity::Activity, community::Community}; use lemmy_db_views_actor::{ community_follower_view::CommunityFollowerView, diff --git a/crates/apub/src/http/mod.rs b/crates/apub/src/http/mod.rs index f9c0d2740..b82a6d890 100644 --- a/crates/apub/src/http/mod.rs +++ b/crates/apub/src/http/mod.rs @@ -24,8 +24,7 @@ use lemmy_apub_lib::{ traits::{ActivityFields, ActivityHandler}, APUB_JSON_CONTENT_TYPE, }; -use lemmy_db_queries::{source::activity::Activity_, DbPool}; -use lemmy_db_schema::source::activity::Activity; +use lemmy_db_schema::{source::activity::Activity, DbPool}; use lemmy_utils::{location_info, LemmyError}; use lemmy_websocket::LemmyContext; use log::{info, trace}; diff --git a/crates/apub/src/http/person.rs b/crates/apub/src/http/person.rs index e84ab2de0..36b6b7d9d 100644 --- a/crates/apub/src/http/person.rs +++ b/crates/apub/src/http/person.rs @@ -25,7 +25,6 @@ use activitystreams::{ use actix_web::{body::Body, web, web::Payload, HttpRequest, HttpResponse}; use lemmy_api_common::blocking; use lemmy_apub_lib::traits::{ActivityFields, ActivityHandler}; -use lemmy_db_queries::source::person::Person_; use lemmy_db_schema::source::person::Person; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; diff --git a/crates/apub/src/http/post.rs b/crates/apub/src/http/post.rs index 324bb7da9..c5f22d01c 100644 --- a/crates/apub/src/http/post.rs +++ b/crates/apub/src/http/post.rs @@ -5,8 +5,7 @@ use crate::{ use actix_web::{body::Body, web, HttpResponse}; use diesel::result::Error::NotFound; use lemmy_api_common::blocking; -use lemmy_db_queries::Crud; -use lemmy_db_schema::{source::post::Post, PostId}; +use lemmy_db_schema::{newtypes::PostId, source::post::Post, traits::Crud}; use lemmy_utils::LemmyError; use lemmy_websocket::LemmyContext; use serde::Deserialize; diff --git a/crates/apub/src/lib.rs b/crates/apub/src/lib.rs index 2162b644c..cc9d5f487 100644 --- a/crates/apub/src/lib.rs +++ b/crates/apub/src/lib.rs @@ -9,11 +9,10 @@ use crate::fetcher::post_or_comment::PostOrComment; use anyhow::{anyhow, Context}; use lemmy_api_common::blocking; use lemmy_apub_lib::{activity_queue::send_activity, traits::ActorType}; -use lemmy_db_queries::{source::activity::Activity_, DbPool}; use lemmy_db_schema::{ + newtypes::{CommunityId, DbUrl}, source::{activity::Activity, person::Person}, - CommunityId, - DbUrl, + DbPool, }; use lemmy_db_views_actor::community_person_ban_view::CommunityPersonBanView; use lemmy_utils::{location_info, settings::structs::Settings, LemmyError}; diff --git a/crates/apub/src/objects/comment.rs b/crates/apub/src/objects/comment.rs index f47c11bfb..1748af791 100644 --- a/crates/apub/src/objects/comment.rs +++ b/crates/apub/src/objects/comment.rs @@ -20,15 +20,16 @@ use lemmy_apub_lib::{ values::{MediaTypeHtml, MediaTypeMarkdown, PublicUrl}, verify::verify_domains_match, }; -use lemmy_db_queries::{source::comment::Comment_, Crud, DbPool}; use lemmy_db_schema::{ + newtypes::CommentId, source::{ comment::{Comment, CommentForm}, community::Community, person::Person, post::Post, }, - CommentId, + traits::Crud, + DbPool, }; use lemmy_utils::{ location_info, diff --git a/crates/apub/src/objects/community.rs b/crates/apub/src/objects/community.rs index 4087383ab..324ae259c 100644 --- a/crates/apub/src/objects/community.rs +++ b/crates/apub/src/objects/community.rs @@ -23,10 +23,10 @@ use lemmy_apub_lib::{ values::{MediaTypeHtml, MediaTypeMarkdown}, verify::verify_domains_match, }; -use lemmy_db_queries::{source::community::Community_, DbPool}; use lemmy_db_schema::{ naive_now, source::community::{Community, CommunityForm}, + DbPool, }; use lemmy_db_views_actor::community_follower_view::CommunityFollowerView; use lemmy_utils::{ diff --git a/crates/apub/src/objects/mod.rs b/crates/apub/src/objects/mod.rs index b05a944cd..b558902fa 100644 --- a/crates/apub/src/objects/mod.rs +++ b/crates/apub/src/objects/mod.rs @@ -5,7 +5,7 @@ use activitystreams::{ use anyhow::anyhow; use chrono::NaiveDateTime; use lemmy_apub_lib::values::MediaTypeMarkdown; -use lemmy_db_queries::DbPool; +use lemmy_db_schema::DbPool; use lemmy_utils::{utils::convert_datetime, LemmyError}; use lemmy_websocket::LemmyContext; use url::Url; diff --git a/crates/apub/src/objects/person.rs b/crates/apub/src/objects/person.rs index 73e34794f..45c67f443 100644 --- a/crates/apub/src/objects/person.rs +++ b/crates/apub/src/objects/person.rs @@ -19,10 +19,10 @@ use lemmy_apub_lib::{ values::{MediaTypeHtml, MediaTypeMarkdown}, verify::verify_domains_match, }; -use lemmy_db_queries::{source::person::Person_, DbPool}; use lemmy_db_schema::{ naive_now, source::person::{Person as DbPerson, PersonForm}, + DbPool, }; use lemmy_utils::{ utils::{check_slurs, check_slurs_opt, convert_datetime, markdown_to_html}, diff --git a/crates/apub/src/objects/post.rs b/crates/apub/src/objects/post.rs index c18647dd1..bb3010380 100644 --- a/crates/apub/src/objects/post.rs +++ b/crates/apub/src/objects/post.rs @@ -21,7 +21,6 @@ use lemmy_apub_lib::{ values::{MediaTypeHtml, MediaTypeMarkdown}, verify::verify_domains_match, }; -use lemmy_db_queries::{source::post::Post_, Crud, DbPool}; use lemmy_db_schema::{ self, source::{ @@ -29,6 +28,8 @@ use lemmy_db_schema::{ person::Person, post::{Post, PostForm}, }, + traits::Crud, + DbPool, }; use lemmy_utils::{ request::fetch_site_data, diff --git a/crates/apub/src/objects/private_message.rs b/crates/apub/src/objects/private_message.rs index 0a3822772..8cf40c9e4 100644 --- a/crates/apub/src/objects/private_message.rs +++ b/crates/apub/src/objects/private_message.rs @@ -16,10 +16,13 @@ use lemmy_apub_lib::{ values::{MediaTypeHtml, MediaTypeMarkdown}, verify::verify_domains_match, }; -use lemmy_db_queries::{source::private_message::PrivateMessage_, Crud, DbPool}; -use lemmy_db_schema::source::{ - person::Person, - private_message::{PrivateMessage, PrivateMessageForm}, +use lemmy_db_schema::{ + source::{ + person::Person, + private_message::{PrivateMessage, PrivateMessageForm}, + }, + traits::Crud, + DbPool, }; use lemmy_utils::{utils::convert_datetime, LemmyError}; use lemmy_websocket::LemmyContext; diff --git a/crates/db_queries/Cargo.toml b/crates/db_queries/Cargo.toml deleted file mode 100644 index 6fcd1f8d0..000000000 --- a/crates/db_queries/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "lemmy_db_queries" -version = "0.13.0" -edition = "2018" -description = "A link aggregator for the fediverse" -license = "AGPL-3.0" -homepage = "https://join-lemmy.org/" -documentation = "https://join-lemmy.org/docs/en/index.html" - -[lib] -name = "lemmy_db_queries" -path = "src/lib.rs" -doctest = false - -[dependencies] -lemmy_utils = { version = "=0.13.0", path = "../utils" } -lemmy_db_schema = { version = "=0.13.0", path = "../db_schema" } -diesel = { version = "1.4.8", features = ["postgres","chrono","r2d2","serde_json"] } -diesel_migrations = "1.4.0" -chrono = { version = "0.4.19", features = ["serde"] } -serde = { version = "1.0.130", features = ["derive"] } -serde_json = { version = "1.0.68", features = ["preserve_order"] } -strum = "0.21.0" -strum_macros = "0.21.1" -log = "0.4.14" -sha2 = "0.9.8" -url = { version = "2.2.2", features = ["serde"] } -lazy_static = "1.4.0" -regex = "1.5.4" -bcrypt = "0.10.1" - -[dev-dependencies] -serial_test = "0.5.1" diff --git a/crates/db_queries/src/lib.rs b/crates/db_queries/src/lib.rs deleted file mode 100644 index aa3c06da1..000000000 --- a/crates/db_queries/src/lib.rs +++ /dev/null @@ -1,348 +0,0 @@ -#[macro_use] -extern crate diesel; -#[macro_use] -extern crate strum_macros; -#[macro_use] -extern crate lazy_static; -// this is used in tests -#[allow(unused_imports)] -#[macro_use] -extern crate diesel_migrations; - -#[cfg(test)] -extern crate serial_test; - -use diesel::{result::Error, *}; -use lemmy_db_schema::{CommunityId, DbUrl, PersonId}; -use lemmy_utils::ApiError; -use regex::Regex; -use serde::{Deserialize, Serialize}; -use std::{env, env::VarError}; -use url::Url; - -pub mod aggregates; -pub mod source; - -pub type DbPool = diesel::r2d2::Pool>; - -pub trait Crud { - type Form; - type IdType; - fn create(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; - fn read(conn: &PgConnection, id: Self::IdType) -> Result - where - Self: Sized; - fn update(conn: &PgConnection, id: Self::IdType, form: &Self::Form) -> Result - where - Self: Sized; - fn delete(_conn: &PgConnection, _id: Self::IdType) -> Result - where - Self: Sized, - { - unimplemented!() - } -} - -pub trait Followable { - type Form; - fn follow(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; - fn follow_accepted( - conn: &PgConnection, - community_id: CommunityId, - person_id: PersonId, - ) -> Result - where - Self: Sized; - fn unfollow(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; - fn has_local_followers(conn: &PgConnection, community_id: CommunityId) -> Result; -} - -pub trait Joinable { - type Form; - fn join(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; - fn leave(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; -} - -pub trait Likeable { - type Form; - type IdType; - fn like(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; - fn remove( - conn: &PgConnection, - person_id: PersonId, - item_id: Self::IdType, - ) -> Result - where - Self: Sized; -} - -pub trait Bannable { - type Form; - fn ban(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; - fn unban(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; -} - -pub trait Saveable { - type Form; - fn save(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; - fn unsave(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; -} - -pub trait Blockable { - type Form; - fn block(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; - fn unblock(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; -} - -pub trait Readable { - type Form; - fn mark_as_read(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; - fn mark_as_unread(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; -} - -pub trait Reportable { - type Form; - type IdType; - fn report(conn: &PgConnection, form: &Self::Form) -> Result - where - Self: Sized; - fn resolve( - conn: &PgConnection, - report_id: Self::IdType, - resolver_id: PersonId, - ) -> Result - where - Self: Sized; - fn unresolve( - conn: &PgConnection, - report_id: Self::IdType, - resolver_id: PersonId, - ) -> Result - where - Self: Sized; -} - -pub trait DeleteableOrRemoveable { - fn blank_out_deleted_or_removed_info(self) -> Self; -} - -pub trait MaybeOptional { - fn get_optional(self) -> Option; -} - -impl MaybeOptional for T { - fn get_optional(self) -> Option { - Some(self) - } -} - -impl MaybeOptional for Option { - fn get_optional(self) -> Option { - self - } -} - -pub trait ToSafe { - type SafeColumns; - fn safe_columns_tuple() -> Self::SafeColumns; -} - -pub trait ToSafeSettings { - type SafeSettingsColumns; - fn safe_settings_columns_tuple() -> Self::SafeSettingsColumns; -} - -pub trait ViewToVec { - type DbTuple; - fn from_tuple_to_vec(tuple: Vec) -> Vec - where - Self: Sized; -} - -pub fn get_database_url_from_env() -> Result { - env::var("LEMMY_DATABASE_URL") -} - -#[derive(EnumString, ToString, Debug, Serialize, Deserialize, Clone, Copy)] -pub enum SortType { - Active, - Hot, - New, - TopDay, - TopWeek, - TopMonth, - TopYear, - TopAll, - MostComments, - NewComments, -} - -#[derive(EnumString, ToString, Debug, Serialize, Deserialize, Clone, Copy)] -pub enum ListingType { - All, - Local, - Subscribed, - Community, -} - -#[derive(EnumString, ToString, Debug, Serialize, Deserialize, Clone, Copy)] -pub enum SearchType { - All, - Comments, - Posts, - Communities, - Users, - Url, -} - -pub fn from_opt_str_to_opt_enum(opt: &Option) -> Option { - opt.as_ref().map(|t| T::from_str(t).ok()).flatten() -} - -pub fn fuzzy_search(q: &str) -> String { - let replaced = q.replace(" ", "%"); - format!("%{}%", replaced) -} - -pub fn limit_and_offset(page: Option, limit: Option) -> (i64, i64) { - let page = page.unwrap_or(1); - let limit = limit.unwrap_or(10); - let offset = limit * (page - 1); - (limit, offset) -} - -pub fn is_email_regex(test: &str) -> bool { - EMAIL_REGEX.is_match(test) -} - -pub fn diesel_option_overwrite(opt: &Option) -> Option> { - match opt { - // An empty string is an erase - Some(unwrapped) => { - if !unwrapped.eq("") { - Some(Some(unwrapped.to_owned())) - } else { - Some(None) - } - } - None => None, - } -} - -pub fn diesel_option_overwrite_to_url( - opt: &Option, -) -> Result>, ApiError> { - match opt.as_ref().map(|s| s.as_str()) { - // An empty string is an erase - Some("") => Ok(Some(None)), - Some(str_url) => match Url::parse(str_url) { - Ok(url) => Ok(Some(Some(url.into()))), - Err(e) => Err(ApiError::err("invalid_url", e)), - }, - None => Ok(None), - } -} - -embed_migrations!(); - -pub fn establish_unpooled_connection() -> PgConnection { - let db_url = match get_database_url_from_env() { - Ok(url) => url, - Err(e) => panic!( - "Failed to read database URL from env var LEMMY_DATABASE_URL: {}", - e - ), - }; - let conn = - PgConnection::establish(&db_url).unwrap_or_else(|_| panic!("Error connecting to {}", db_url)); - embedded_migrations::run(&conn).expect("load migrations"); - conn -} - -lazy_static! { - static ref EMAIL_REGEX: Regex = - Regex::new(r"^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$") - .expect("compile email regex"); -} - -pub mod functions { - use diesel::sql_types::*; - - sql_function! { - fn hot_rank(score: BigInt, time: Timestamp) -> Integer; - } -} - -#[cfg(test)] -mod tests { - use super::{fuzzy_search, *}; - use crate::is_email_regex; - - #[test] - fn test_fuzzy_search() { - let test = "This is a fuzzy search"; - assert_eq!(fuzzy_search(test), "%This%is%a%fuzzy%search%".to_string()); - } - - #[test] - fn test_email() { - assert!(is_email_regex("gush@gmail.com")); - assert!(!is_email_regex("nada_neutho")); - } - - #[test] - fn test_diesel_option_overwrite() { - assert_eq!(diesel_option_overwrite(&None), None); - assert_eq!(diesel_option_overwrite(&Some("".to_string())), Some(None)); - assert_eq!( - diesel_option_overwrite(&Some("test".to_string())), - Some(Some("test".to_string())) - ); - } - - #[test] - fn test_diesel_option_overwrite_to_url() { - assert!(matches!(diesel_option_overwrite_to_url(&None), Ok(None))); - assert!(matches!( - diesel_option_overwrite_to_url(&Some("".to_string())), - Ok(Some(None)) - )); - assert!(matches!( - diesel_option_overwrite_to_url(&Some("invalid_url".to_string())), - Err(_) - )); - let example_url = "https://example.com"; - assert!(matches!( - diesel_option_overwrite_to_url(&Some(example_url.to_string())), - Ok(Some(Some(url))) if url == Url::parse(example_url).unwrap().into() - )); - } -} diff --git a/crates/db_queries/src/source/secret.rs b/crates/db_queries/src/source/secret.rs deleted file mode 100644 index 6181549fe..000000000 --- a/crates/db_queries/src/source/secret.rs +++ /dev/null @@ -1,19 +0,0 @@ -use diesel::{result::Error, *}; -use lemmy_db_schema::source::secret::Secret; - -pub trait Secret_ { - fn init(conn: &PgConnection) -> Result; -} - -impl Secret_ for Secret { - /// Initialize the Secrets from the DB. - /// Warning: You should only call this once. - fn init(conn: &PgConnection) -> Result { - read_secrets(conn) - } -} - -fn read_secrets(conn: &PgConnection) -> Result { - use lemmy_db_schema::schema::secret::dsl::*; - secret.first::(conn) -} diff --git a/crates/db_schema/Cargo.toml b/crates/db_schema/Cargo.toml index 66b0a293d..a05aed47d 100644 --- a/crates/db_schema/Cargo.toml +++ b/crates/db_schema/Cargo.toml @@ -14,9 +14,19 @@ doctest = false lemmy_utils = { version = "=0.13.0", path = "../utils" } lemmy_apub_lib = { version = "=0.13.0", path = "../apub_lib" } diesel = { version = "1.4.8", features = ["postgres","chrono","r2d2","serde_json"] } +diesel_migrations = "1.4.0" chrono = { version = "0.4.19", features = ["serde"] } serde = { version = "1.0.130", features = ["derive"] } serde_json = { version = "1.0.68", features = ["preserve_order"] } log = "0.4.14" url = { version = "2.2.2", features = ["serde"] } diesel-derive-newtype = "0.1.2" +regex = "1.5.4" +lazy_static = "1.4.0" +strum = "0.21.0" +strum_macros = "0.21.1" +sha2 = "0.9.8" +bcrypt = "0.10.1" + +[dev-dependencies] +serial_test = "0.5.1" \ No newline at end of file diff --git a/crates/db_queries/src/aggregates/comment_aggregates.rs b/crates/db_schema/src/aggregates/comment_aggregates.rs similarity index 93% rename from crates/db_queries/src/aggregates/comment_aggregates.rs rename to crates/db_schema/src/aggregates/comment_aggregates.rs index 4fbc646b1..d47899bbf 100644 --- a/crates/db_queries/src/aggregates/comment_aggregates.rs +++ b/crates/db_schema/src/aggregates/comment_aggregates.rs @@ -1,5 +1,5 @@ +use crate::{newtypes::CommentId, schema::comment_aggregates}; use diesel::{result::Error, *}; -use lemmy_db_schema::{schema::comment_aggregates, CommentId}; use serde::{Deserialize, Serialize}; #[derive( @@ -28,14 +28,13 @@ mod tests { use crate::{ aggregates::comment_aggregates::CommentAggregates, establish_unpooled_connection, - Crud, - Likeable, - }; - use lemmy_db_schema::source::{ - comment::{Comment, CommentForm, CommentLike, CommentLikeForm}, - community::{Community, CommunityForm}, - person::{Person, PersonForm}, - post::{Post, PostForm}, + source::{ + comment::{Comment, CommentForm, CommentLike, CommentLikeForm}, + community::{Community, CommunityForm}, + person::{Person, PersonForm}, + post::{Post, PostForm}, + }, + traits::{Crud, Likeable}, }; use serial_test::serial; diff --git a/crates/db_queries/src/aggregates/community_aggregates.rs b/crates/db_schema/src/aggregates/community_aggregates.rs similarity index 94% rename from crates/db_queries/src/aggregates/community_aggregates.rs rename to crates/db_schema/src/aggregates/community_aggregates.rs index d8865d409..d80425e17 100644 --- a/crates/db_queries/src/aggregates/community_aggregates.rs +++ b/crates/db_schema/src/aggregates/community_aggregates.rs @@ -1,5 +1,5 @@ +use crate::{newtypes::CommunityId, schema::community_aggregates}; use diesel::{result::Error, *}; -use lemmy_db_schema::{schema::community_aggregates, CommunityId}; use serde::{Deserialize, Serialize}; #[derive( @@ -32,14 +32,13 @@ mod tests { use crate::{ aggregates::community_aggregates::CommunityAggregates, establish_unpooled_connection, - Crud, - Followable, - }; - use lemmy_db_schema::source::{ - comment::{Comment, CommentForm}, - community::{Community, CommunityFollower, CommunityFollowerForm, CommunityForm}, - person::{Person, PersonForm}, - post::{Post, PostForm}, + source::{ + comment::{Comment, CommentForm}, + community::{Community, CommunityFollower, CommunityFollowerForm, CommunityForm}, + person::{Person, PersonForm}, + post::{Post, PostForm}, + }, + traits::{Crud, Followable}, }; use serial_test::serial; diff --git a/crates/db_queries/src/aggregates/mod.rs b/crates/db_schema/src/aggregates/mod.rs similarity index 100% rename from crates/db_queries/src/aggregates/mod.rs rename to crates/db_schema/src/aggregates/mod.rs diff --git a/crates/db_queries/src/aggregates/person_aggregates.rs b/crates/db_schema/src/aggregates/person_aggregates.rs similarity index 94% rename from crates/db_queries/src/aggregates/person_aggregates.rs rename to crates/db_schema/src/aggregates/person_aggregates.rs index 16d480dec..344ec27d9 100644 --- a/crates/db_queries/src/aggregates/person_aggregates.rs +++ b/crates/db_schema/src/aggregates/person_aggregates.rs @@ -1,5 +1,5 @@ +use crate::{newtypes::PersonId, schema::person_aggregates}; use diesel::{result::Error, *}; -use lemmy_db_schema::{schema::person_aggregates, PersonId}; use serde::{Deserialize, Serialize}; #[derive( @@ -28,14 +28,13 @@ mod tests { use crate::{ aggregates::person_aggregates::PersonAggregates, establish_unpooled_connection, - Crud, - Likeable, - }; - use lemmy_db_schema::source::{ - comment::{Comment, CommentForm, CommentLike, CommentLikeForm}, - community::{Community, CommunityForm}, - person::{Person, PersonForm}, - post::{Post, PostForm, PostLike, PostLikeForm}, + source::{ + comment::{Comment, CommentForm, CommentLike, CommentLikeForm}, + community::{Community, CommunityForm}, + person::{Person, PersonForm}, + post::{Post, PostForm, PostLike, PostLikeForm}, + }, + traits::{Crud, Likeable}, }; use serial_test::serial; diff --git a/crates/db_queries/src/aggregates/post_aggregates.rs b/crates/db_schema/src/aggregates/post_aggregates.rs similarity index 94% rename from crates/db_queries/src/aggregates/post_aggregates.rs rename to crates/db_schema/src/aggregates/post_aggregates.rs index 323b55ab6..cb8aba26e 100644 --- a/crates/db_queries/src/aggregates/post_aggregates.rs +++ b/crates/db_schema/src/aggregates/post_aggregates.rs @@ -1,5 +1,5 @@ +use crate::{newtypes::PostId, schema::post_aggregates}; use diesel::{result::Error, *}; -use lemmy_db_schema::{schema::post_aggregates, PostId}; use serde::{Deserialize, Serialize}; #[derive( @@ -32,14 +32,13 @@ mod tests { use crate::{ aggregates::post_aggregates::PostAggregates, establish_unpooled_connection, - Crud, - Likeable, - }; - use lemmy_db_schema::source::{ - comment::{Comment, CommentForm}, - community::{Community, CommunityForm}, - person::{Person, PersonForm}, - post::{Post, PostForm, PostLike, PostLikeForm}, + source::{ + comment::{Comment, CommentForm}, + community::{Community, CommunityForm}, + person::{Person, PersonForm}, + post::{Post, PostForm, PostLike, PostLikeForm}, + }, + traits::{Crud, Likeable}, }; use serial_test::serial; diff --git a/crates/db_queries/src/aggregates/site_aggregates.rs b/crates/db_schema/src/aggregates/site_aggregates.rs similarity index 91% rename from crates/db_queries/src/aggregates/site_aggregates.rs rename to crates/db_schema/src/aggregates/site_aggregates.rs index af0f7cb4d..4b4b6c432 100644 --- a/crates/db_queries/src/aggregates/site_aggregates.rs +++ b/crates/db_schema/src/aggregates/site_aggregates.rs @@ -1,5 +1,5 @@ +use crate::schema::site_aggregates; use diesel::{result::Error, *}; -use lemmy_db_schema::schema::site_aggregates; use serde::{Deserialize, Serialize}; #[derive( @@ -27,13 +27,17 @@ impl SiteAggregates { #[cfg(test)] mod tests { - use crate::{aggregates::site_aggregates::SiteAggregates, establish_unpooled_connection, Crud}; - use lemmy_db_schema::source::{ - comment::{Comment, CommentForm}, - community::{Community, CommunityForm}, - person::{Person, PersonForm}, - post::{Post, PostForm}, - site::{Site, SiteForm}, + use crate::{ + aggregates::site_aggregates::SiteAggregates, + establish_unpooled_connection, + source::{ + comment::{Comment, CommentForm}, + community::{Community, CommunityForm}, + person::{Person, PersonForm}, + post::{Post, PostForm}, + site::{Site, SiteForm}, + }, + traits::Crud, }; use serial_test::serial; diff --git a/crates/db_queries/src/source/activity.rs b/crates/db_schema/src/impls/activity.rs similarity index 75% rename from crates/db_queries/src/source/activity.rs rename to crates/db_schema/src/impls/activity.rs index 3008c38f8..4f1cfd2dd 100644 --- a/crates/db_queries/src/source/activity.rs +++ b/crates/db_schema/src/impls/activity.rs @@ -1,6 +1,5 @@ -use crate::Crud; +use crate::{newtypes::DbUrl, source::activity::*, traits::Crud}; use diesel::{dsl::*, result::Error, sql_types::Text, *}; -use lemmy_db_schema::{source::activity::*, DbUrl}; use serde::Serialize; use serde_json::Value; use std::{ @@ -12,12 +11,12 @@ impl Crud for Activity { type Form = ActivityForm; type IdType = i32; fn read(conn: &PgConnection, activity_id: i32) -> Result { - use lemmy_db_schema::schema::activity::dsl::*; + use crate::schema::activity::dsl::*; activity.find(activity_id).first::(conn) } fn create(conn: &PgConnection, new_activity: &ActivityForm) -> Result { - use lemmy_db_schema::schema::activity::dsl::*; + use crate::schema::activity::dsl::*; insert_into(activity) .values(new_activity) .get_result::(conn) @@ -28,40 +27,19 @@ impl Crud for Activity { activity_id: i32, new_activity: &ActivityForm, ) -> Result { - use lemmy_db_schema::schema::activity::dsl::*; + use crate::schema::activity::dsl::*; diesel::update(activity.find(activity_id)) .set(new_activity) .get_result::(conn) } fn delete(conn: &PgConnection, activity_id: i32) -> Result { - use lemmy_db_schema::schema::activity::dsl::*; + use crate::schema::activity::dsl::*; diesel::delete(activity.find(activity_id)).execute(conn) } } -pub trait Activity_ { - fn insert( - conn: &PgConnection, - ap_id: DbUrl, - data: &T, - local: bool, - sensitive: bool, - ) -> Result - where - T: Serialize + Debug; - - fn read_from_apub_id(conn: &PgConnection, object_id: &DbUrl) -> Result; - fn delete_olds(conn: &PgConnection) -> Result; - - /// Returns up to 20 activities of type `Announce/Create/Page` from the community - fn read_community_outbox( - conn: &PgConnection, - community_actor_id: &DbUrl, - ) -> Result, Error>; -} - -impl Activity_ for Activity { - fn insert( +impl Activity { + pub fn insert( conn: &PgConnection, ap_id: DbUrl, data: &T, @@ -88,21 +66,21 @@ impl Activity_ for Activity { } } - fn read_from_apub_id(conn: &PgConnection, object_id: &DbUrl) -> Result { - use lemmy_db_schema::schema::activity::dsl::*; + pub fn read_from_apub_id(conn: &PgConnection, object_id: &DbUrl) -> Result { + use crate::schema::activity::dsl::*; activity.filter(ap_id.eq(object_id)).first::(conn) } - fn delete_olds(conn: &PgConnection) -> Result { - use lemmy_db_schema::schema::activity::dsl::*; + pub fn delete_olds(conn: &PgConnection) -> Result { + use crate::schema::activity::dsl::*; diesel::delete(activity.filter(published.lt(now - 6.months()))).execute(conn) } - fn read_community_outbox( + pub fn read_community_outbox( conn: &PgConnection, community_actor_id: &DbUrl, ) -> Result, Error> { - use lemmy_db_schema::schema::activity::dsl::*; + use crate::schema::activity::dsl::*; let res: Vec = activity .select(data) .filter( @@ -122,10 +100,13 @@ impl Activity_ for Activity { #[cfg(test)] mod tests { use super::*; - use crate::{establish_unpooled_connection, source::activity::Activity_}; - use lemmy_db_schema::source::{ - activity::{Activity, ActivityForm}, - person::{Person, PersonForm}, + use crate::{ + establish_unpooled_connection, + newtypes::DbUrl, + source::{ + activity::{Activity, ActivityForm}, + person::{Person, PersonForm}, + }, }; use serde_json::Value; use serial_test::serial; diff --git a/crates/db_queries/src/source/comment.rs b/crates/db_schema/src/impls/comment.rs similarity index 77% rename from crates/db_queries/src/source/comment.rs rename to crates/db_schema/src/impls/comment.rs index 8031131c5..aa7e25b28 100644 --- a/crates/db_queries/src/source/comment.rs +++ b/crates/db_schema/src/impls/comment.rs @@ -1,7 +1,6 @@ -use crate::{Crud, DeleteableOrRemoveable, Likeable, Saveable}; -use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{ +use crate::{ naive_now, + newtypes::{CommentId, DbUrl, PersonId}, source::comment::{ Comment, CommentForm, @@ -10,67 +9,32 @@ use lemmy_db_schema::{ CommentSaved, CommentSavedForm, }, - CommentId, - DbUrl, - PersonId, + traits::{Crud, DeleteableOrRemoveable, Likeable, Saveable}, }; +use chrono::NaiveDateTime; +use diesel::{dsl::*, result::Error, *}; +use lemmy_apub_lib::traits::ApubObject; +use lemmy_utils::LemmyError; +use url::Url; -pub trait Comment_ { - fn update_ap_id( - conn: &PgConnection, - comment_id: CommentId, - apub_id: DbUrl, - ) -> Result; - fn permadelete_for_creator( - conn: &PgConnection, - for_creator_id: PersonId, - ) -> Result, Error>; - fn update_deleted( - conn: &PgConnection, - comment_id: CommentId, - new_deleted: bool, - ) -> Result; - fn update_removed( - conn: &PgConnection, - comment_id: CommentId, - new_removed: bool, - ) -> Result; - fn update_removed_for_creator( - conn: &PgConnection, - for_creator_id: PersonId, - new_removed: bool, - ) -> Result, Error>; - fn update_read( - conn: &PgConnection, - comment_id: CommentId, - new_read: bool, - ) -> Result; - fn update_content( - conn: &PgConnection, - comment_id: CommentId, - new_content: &str, - ) -> Result; - fn upsert(conn: &PgConnection, comment_form: &CommentForm) -> Result; -} - -impl Comment_ for Comment { - fn update_ap_id( +impl Comment { + pub fn update_ap_id( conn: &PgConnection, comment_id: CommentId, apub_id: DbUrl, ) -> Result { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; diesel::update(comment.find(comment_id)) .set(ap_id.eq(apub_id)) .get_result::(conn) } - fn permadelete_for_creator( + pub fn permadelete_for_creator( conn: &PgConnection, for_creator_id: PersonId, ) -> Result, Error> { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; diesel::update(comment.filter(creator_id.eq(for_creator_id))) .set(( content.eq("*Permananently Deleted*"), @@ -80,63 +44,63 @@ impl Comment_ for Comment { .get_results::(conn) } - fn update_deleted( + pub fn update_deleted( conn: &PgConnection, comment_id: CommentId, new_deleted: bool, ) -> Result { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; diesel::update(comment.find(comment_id)) .set((deleted.eq(new_deleted), updated.eq(naive_now()))) .get_result::(conn) } - fn update_removed( + pub fn update_removed( conn: &PgConnection, comment_id: CommentId, new_removed: bool, ) -> Result { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; diesel::update(comment.find(comment_id)) .set((removed.eq(new_removed), updated.eq(naive_now()))) .get_result::(conn) } - fn update_removed_for_creator( + pub fn update_removed_for_creator( conn: &PgConnection, for_creator_id: PersonId, new_removed: bool, ) -> Result, Error> { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; diesel::update(comment.filter(creator_id.eq(for_creator_id))) .set((removed.eq(new_removed), updated.eq(naive_now()))) .get_results::(conn) } - fn update_read( + pub fn update_read( conn: &PgConnection, comment_id: CommentId, new_read: bool, ) -> Result { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; diesel::update(comment.find(comment_id)) .set(read.eq(new_read)) .get_result::(conn) } - fn update_content( + pub fn update_content( conn: &PgConnection, comment_id: CommentId, new_content: &str, ) -> Result { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; diesel::update(comment.find(comment_id)) .set((content.eq(new_content), updated.eq(naive_now()))) .get_result::(conn) } - fn upsert(conn: &PgConnection, comment_form: &CommentForm) -> Result { - use lemmy_db_schema::schema::comment::dsl::*; + pub fn upsert(conn: &PgConnection, comment_form: &CommentForm) -> Result { + use crate::schema::comment::dsl::*; insert_into(comment) .values(comment_form) .on_conflict(ap_id) @@ -150,17 +114,17 @@ impl Crud for Comment { type Form = CommentForm; type IdType = CommentId; fn read(conn: &PgConnection, comment_id: CommentId) -> Result { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; comment.find(comment_id).first::(conn) } fn delete(conn: &PgConnection, comment_id: CommentId) -> Result { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; diesel::delete(comment.find(comment_id)).execute(conn) } fn create(conn: &PgConnection, comment_form: &CommentForm) -> Result { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; insert_into(comment) .values(comment_form) .get_result::(conn) @@ -171,7 +135,7 @@ impl Crud for Comment { comment_id: CommentId, comment_form: &CommentForm, ) -> Result { - use lemmy_db_schema::schema::comment::dsl::*; + use crate::schema::comment::dsl::*; diesel::update(comment.find(comment_id)) .set(comment_form) .get_result::(conn) @@ -182,7 +146,7 @@ impl Likeable for CommentLike { type Form = CommentLikeForm; type IdType = CommentId; fn like(conn: &PgConnection, comment_like_form: &CommentLikeForm) -> Result { - use lemmy_db_schema::schema::comment_like::dsl::*; + use crate::schema::comment_like::dsl::*; insert_into(comment_like) .values(comment_like_form) .on_conflict((comment_id, person_id)) @@ -195,7 +159,7 @@ impl Likeable for CommentLike { person_id: PersonId, comment_id: CommentId, ) -> Result { - use lemmy_db_schema::schema::comment_like::dsl; + use crate::schema::comment_like::dsl; diesel::delete( dsl::comment_like .filter(dsl::comment_id.eq(comment_id)) @@ -208,7 +172,7 @@ impl Likeable for CommentLike { impl Saveable for CommentSaved { type Form = CommentSavedForm; fn save(conn: &PgConnection, comment_saved_form: &CommentSavedForm) -> Result { - use lemmy_db_schema::schema::comment_saved::dsl::*; + use crate::schema::comment_saved::dsl::*; insert_into(comment_saved) .values(comment_saved_form) .on_conflict((comment_id, person_id)) @@ -217,7 +181,7 @@ impl Saveable for CommentSaved { .get_result::(conn) } fn unsave(conn: &PgConnection, comment_saved_form: &CommentSavedForm) -> Result { - use lemmy_db_schema::schema::comment_saved::dsl::*; + use crate::schema::comment_saved::dsl::*; diesel::delete( comment_saved .filter(comment_id.eq(comment_saved_form.comment_id)) @@ -234,14 +198,36 @@ impl DeleteableOrRemoveable for Comment { } } +impl ApubObject for Comment { + type DataType = PgConnection; + + fn last_refreshed_at(&self) -> Option { + None + } + + fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, LemmyError> { + use crate::schema::comment::dsl::*; + let object_id: DbUrl = object_id.into(); + Ok(comment.filter(ap_id.eq(object_id)).first::(conn).ok()) + } + + fn delete(self, conn: &PgConnection) -> Result<(), LemmyError> { + Comment::update_deleted(conn, self.id, true)?; + Ok(()) + } +} + #[cfg(test)] mod tests { - use crate::{establish_unpooled_connection, Crud, Likeable, Saveable}; - use lemmy_db_schema::source::{ - comment::*, - community::{Community, CommunityForm}, - person::{Person, PersonForm}, - post::*, + use crate::{ + establish_unpooled_connection, + source::{ + comment::*, + community::{Community, CommunityForm}, + person::{Person, PersonForm}, + post::*, + }, + traits::{Crud, Likeable, Saveable}, }; use serial_test::serial; diff --git a/crates/db_queries/src/source/comment_report.rs b/crates/db_schema/src/impls/comment_report.rs similarity index 86% rename from crates/db_queries/src/source/comment_report.rs rename to crates/db_schema/src/impls/comment_report.rs index 10b9d43e8..d32f3ef40 100644 --- a/crates/db_queries/src/source/comment_report.rs +++ b/crates/db_schema/src/impls/comment_report.rs @@ -1,11 +1,10 @@ -use crate::Reportable; -use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{ +use crate::{ naive_now, + newtypes::{CommentReportId, PersonId}, source::comment_report::{CommentReport, CommentReportForm}, - CommentReportId, - PersonId, + traits::Reportable, }; +use diesel::{dsl::*, result::Error, *}; impl Reportable for CommentReport { type Form = CommentReportForm; @@ -15,7 +14,7 @@ impl Reportable for CommentReport { /// * `conn` - the postgres connection /// * `comment_report_form` - the filled CommentReportForm to insert fn report(conn: &PgConnection, comment_report_form: &CommentReportForm) -> Result { - use lemmy_db_schema::schema::comment_report::dsl::*; + use crate::schema::comment_report::dsl::*; insert_into(comment_report) .values(comment_report_form) .get_result::(conn) @@ -31,7 +30,7 @@ impl Reportable for CommentReport { report_id: Self::IdType, by_resolver_id: PersonId, ) -> Result { - use lemmy_db_schema::schema::comment_report::dsl::*; + use crate::schema::comment_report::dsl::*; update(comment_report.find(report_id)) .set(( resolved.eq(true), @@ -51,7 +50,7 @@ impl Reportable for CommentReport { report_id: Self::IdType, by_resolver_id: PersonId, ) -> Result { - use lemmy_db_schema::schema::comment_report::dsl::*; + use crate::schema::comment_report::dsl::*; update(comment_report.find(report_id)) .set(( resolved.eq(false), diff --git a/crates/db_queries/src/source/community.rs b/crates/db_schema/src/impls/community.rs similarity index 75% rename from crates/db_queries/src/source/community.rs rename to crates/db_schema/src/impls/community.rs index 26e33380a..8acce790c 100644 --- a/crates/db_queries/src/source/community.rs +++ b/crates/db_schema/src/impls/community.rs @@ -1,7 +1,6 @@ -use crate::{Bannable, Crud, DeleteableOrRemoveable, Followable, Joinable}; -use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{ +use crate::{ naive_now, + newtypes::{CommunityId, DbUrl, PersonId}, source::community::{ Community, CommunityFollower, @@ -13,14 +12,16 @@ use lemmy_db_schema::{ CommunityPersonBanForm, CommunitySafe, }, - CommunityId, - DbUrl, - PersonId, + traits::{Bannable, Crud, DeleteableOrRemoveable, Followable, Joinable}, }; +use chrono::NaiveDateTime; +use diesel::{dsl::*, result::Error, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl}; +use lemmy_apub_lib::traits::{ActorType, ApubObject}; +use lemmy_utils::LemmyError; +use url::Url; mod safe_type { - use crate::{source::community::Community, ToSafe}; - use lemmy_db_schema::schema::community::*; + use crate::{schema::community::*, source::community::Community, traits::ToSafe}; type Columns = ( id, @@ -64,17 +65,17 @@ impl Crud for Community { type Form = CommunityForm; type IdType = CommunityId; fn read(conn: &PgConnection, community_id: CommunityId) -> Result { - use lemmy_db_schema::schema::community::dsl::*; + use crate::schema::community::dsl::*; community.find(community_id).first::(conn) } fn delete(conn: &PgConnection, community_id: CommunityId) -> Result { - use lemmy_db_schema::schema::community::dsl::*; + use crate::schema::community::dsl::*; diesel::delete(community.find(community_id)).execute(conn) } fn create(conn: &PgConnection, new_community: &CommunityForm) -> Result { - use lemmy_db_schema::schema::community::dsl::*; + use crate::schema::community::dsl::*; insert_into(community) .values(new_community) .get_result::(conn) @@ -85,81 +86,61 @@ impl Crud for Community { community_id: CommunityId, new_community: &CommunityForm, ) -> Result { - use lemmy_db_schema::schema::community::dsl::*; + use crate::schema::community::dsl::*; diesel::update(community.find(community_id)) .set(new_community) .get_result::(conn) } } -pub trait Community_ { - fn read_from_name(conn: &PgConnection, community_name: &str) -> Result; - fn update_deleted( - conn: &PgConnection, - community_id: CommunityId, - new_deleted: bool, - ) -> Result; - fn update_removed( - conn: &PgConnection, - community_id: CommunityId, - new_removed: bool, - ) -> Result; - fn distinct_federated_communities(conn: &PgConnection) -> Result, Error>; - fn read_from_followers_url( - conn: &PgConnection, - followers_url: &DbUrl, - ) -> Result; - fn upsert(conn: &PgConnection, community_form: &CommunityForm) -> Result; -} - -impl Community_ for Community { - fn read_from_name(conn: &PgConnection, community_name: &str) -> Result { - use lemmy_db_schema::schema::community::dsl::*; +impl Community { + pub fn read_from_name(conn: &PgConnection, community_name: &str) -> Result { + use crate::schema::community::dsl::*; community .filter(local.eq(true)) .filter(name.eq(community_name)) .first::(conn) } - fn update_deleted( + pub fn update_deleted( conn: &PgConnection, community_id: CommunityId, new_deleted: bool, ) -> Result { - use lemmy_db_schema::schema::community::dsl::*; + use crate::schema::community::dsl::*; diesel::update(community.find(community_id)) .set((deleted.eq(new_deleted), updated.eq(naive_now()))) .get_result::(conn) } - fn update_removed( + pub fn update_removed( conn: &PgConnection, community_id: CommunityId, new_removed: bool, ) -> Result { - use lemmy_db_schema::schema::community::dsl::*; + use crate::schema::community::dsl::*; diesel::update(community.find(community_id)) .set((removed.eq(new_removed), updated.eq(naive_now()))) .get_result::(conn) } - fn distinct_federated_communities(conn: &PgConnection) -> Result, Error> { - use lemmy_db_schema::schema::community::dsl::*; + pub fn distinct_federated_communities(conn: &PgConnection) -> Result, Error> { + use crate::schema::community::dsl::*; community.select(actor_id).distinct().load::(conn) } - fn read_from_followers_url( + pub fn read_from_followers_url( conn: &PgConnection, followers_url_: &DbUrl, ) -> Result { - use lemmy_db_schema::schema::community::dsl::*; + use crate::schema::community::dsl::*; community .filter(followers_url.eq(followers_url_)) .first::(conn) } - fn upsert(conn: &PgConnection, community_form: &CommunityForm) -> Result { - use lemmy_db_schema::schema::community::dsl::*; + pub fn upsert(conn: &PgConnection, community_form: &CommunityForm) -> Result { + use crate::schema::community::dsl::*; insert_into(community) .values(community_form) .on_conflict(actor_id) @@ -175,7 +156,7 @@ impl Joinable for CommunityModerator { conn: &PgConnection, community_moderator_form: &CommunityModeratorForm, ) -> Result { - use lemmy_db_schema::schema::community_moderator::dsl::*; + use crate::schema::community_moderator::dsl::*; insert_into(community_moderator) .values(community_moderator_form) .get_result::(conn) @@ -185,7 +166,7 @@ impl Joinable for CommunityModerator { conn: &PgConnection, community_moderator_form: &CommunityModeratorForm, ) -> Result { - use lemmy_db_schema::schema::community_moderator::dsl::*; + use crate::schema::community_moderator::dsl::*; diesel::delete( community_moderator .filter(community_id.eq(community_moderator_form.community_id)) @@ -215,31 +196,20 @@ impl DeleteableOrRemoveable for Community { } } -pub trait CommunityModerator_ { - fn delete_for_community( - conn: &PgConnection, - for_community_id: CommunityId, - ) -> Result; - fn get_person_moderated_communities( - conn: &PgConnection, - for_person_id: PersonId, - ) -> Result, Error>; -} - -impl CommunityModerator_ for CommunityModerator { - fn delete_for_community( +impl CommunityModerator { + pub fn delete_for_community( conn: &PgConnection, for_community_id: CommunityId, ) -> Result { - use lemmy_db_schema::schema::community_moderator::dsl::*; + use crate::schema::community_moderator::dsl::*; diesel::delete(community_moderator.filter(community_id.eq(for_community_id))).execute(conn) } - fn get_person_moderated_communities( + pub fn get_person_moderated_communities( conn: &PgConnection, for_person_id: PersonId, ) -> Result, Error> { - use lemmy_db_schema::schema::community_moderator::dsl::*; + use crate::schema::community_moderator::dsl::*; community_moderator .filter(person_id.eq(for_person_id)) .select(community_id) @@ -253,7 +223,7 @@ impl Bannable for CommunityPersonBan { conn: &PgConnection, community_person_ban_form: &CommunityPersonBanForm, ) -> Result { - use lemmy_db_schema::schema::community_person_ban::dsl::*; + use crate::schema::community_person_ban::dsl::*; insert_into(community_person_ban) .values(community_person_ban_form) .get_result::(conn) @@ -263,7 +233,7 @@ impl Bannable for CommunityPersonBan { conn: &PgConnection, community_person_ban_form: &CommunityPersonBanForm, ) -> Result { - use lemmy_db_schema::schema::community_person_ban::dsl::*; + use crate::schema::community_person_ban::dsl::*; diesel::delete( community_person_ban .filter(community_id.eq(community_person_ban_form.community_id)) @@ -279,7 +249,7 @@ impl Followable for CommunityFollower { conn: &PgConnection, community_follower_form: &CommunityFollowerForm, ) -> Result { - use lemmy_db_schema::schema::community_follower::dsl::*; + use crate::schema::community_follower::dsl::*; insert_into(community_follower) .values(community_follower_form) .on_conflict((community_id, person_id)) @@ -295,7 +265,7 @@ impl Followable for CommunityFollower { where Self: Sized, { - use lemmy_db_schema::schema::community_follower::dsl::*; + use crate::schema::community_follower::dsl::*; diesel::update( community_follower .filter(community_id.eq(community_id_)) @@ -308,7 +278,7 @@ impl Followable for CommunityFollower { conn: &PgConnection, community_follower_form: &CommunityFollowerForm, ) -> Result { - use lemmy_db_schema::schema::community_follower::dsl::*; + use crate::schema::community_follower::dsl::*; diesel::delete( community_follower .filter(community_id.eq(&community_follower_form.community_id)) @@ -319,7 +289,7 @@ impl Followable for CommunityFollower { // TODO: this function name only makes sense if you call it with a remote community. for a local // community, it will also return true if only remote followers exist fn has_local_followers(conn: &PgConnection, community_id_: CommunityId) -> Result { - use lemmy_db_schema::schema::community_follower::dsl::*; + use crate::schema::community_follower::dsl::*; diesel::select(exists( community_follower.filter(community_id.eq(community_id_)), )) @@ -327,10 +297,66 @@ impl Followable for CommunityFollower { } } +impl ApubObject for Community { + type DataType = PgConnection; + + fn last_refreshed_at(&self) -> Option { + Some(self.last_refreshed_at) + } + + fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, LemmyError> { + use crate::schema::community::dsl::*; + let object_id: DbUrl = object_id.into(); + Ok( + community + .filter(actor_id.eq(object_id)) + .first::(conn) + .ok(), + ) + } + + fn delete(self, conn: &PgConnection) -> Result<(), LemmyError> { + use crate::schema::community::dsl::*; + diesel::update(community.find(self.id)) + .set((deleted.eq(true), updated.eq(naive_now()))) + .get_result::(conn)?; + Ok(()) + } +} + +impl ActorType for Community { + fn is_local(&self) -> bool { + self.local + } + fn actor_id(&self) -> Url { + self.actor_id.to_owned().into() + } + fn name(&self) -> String { + self.name.clone() + } + fn public_key(&self) -> Option { + self.public_key.to_owned() + } + fn private_key(&self) -> Option { + self.private_key.to_owned() + } + + fn inbox_url(&self) -> Url { + self.inbox_url.clone().into() + } + + fn shared_inbox_url(&self) -> Option { + self.shared_inbox_url.clone().map(|s| s.into_inner()) + } +} + #[cfg(test)] mod tests { - use crate::{establish_unpooled_connection, Bannable, Crud, Followable, Joinable}; - use lemmy_db_schema::source::{community::*, person::*}; + use crate::{ + establish_unpooled_connection, + source::{community::*, person::*}, + traits::{Bannable, Crud, Followable, Joinable}, + }; use serial_test::serial; #[test] diff --git a/crates/db_queries/src/source/community_block.rs b/crates/db_schema/src/impls/community_block.rs similarity index 76% rename from crates/db_queries/src/source/community_block.rs rename to crates/db_schema/src/impls/community_block.rs index 346e7f3ac..bbad2f122 100644 --- a/crates/db_queries/src/source/community_block.rs +++ b/crates/db_schema/src/impls/community_block.rs @@ -1,11 +1,13 @@ -use crate::Blockable; +use crate::{ + source::community_block::{CommunityBlock, CommunityBlockForm}, + traits::Blockable, +}; use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::source::community_block::{CommunityBlock, CommunityBlockForm}; impl Blockable for CommunityBlock { type Form = CommunityBlockForm; fn block(conn: &PgConnection, community_block_form: &Self::Form) -> Result { - use lemmy_db_schema::schema::community_block::dsl::*; + use crate::schema::community_block::dsl::*; insert_into(community_block) .values(community_block_form) .on_conflict((person_id, community_id)) @@ -14,7 +16,7 @@ impl Blockable for CommunityBlock { .get_result::(conn) } fn unblock(conn: &PgConnection, community_block_form: &Self::Form) -> Result { - use lemmy_db_schema::schema::community_block::dsl::*; + use crate::schema::community_block::dsl::*; diesel::delete( community_block .filter(person_id.eq(community_block_form.person_id)) diff --git a/crates/db_queries/src/source/local_user.rs b/crates/db_schema/src/impls/local_user.rs similarity index 81% rename from crates/db_queries/src/source/local_user.rs rename to crates/db_schema/src/impls/local_user.rs index 91eac3308..3a2d57695 100644 --- a/crates/db_queries/src/source/local_user.rs +++ b/crates/db_schema/src/impls/local_user.rs @@ -1,16 +1,19 @@ -use crate::Crud; -use bcrypt::{hash, DEFAULT_COST}; -use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{ +use crate::{ naive_now, + newtypes::LocalUserId, schema::local_user::dsl::*, source::local_user::{LocalUser, LocalUserForm}, - LocalUserId, + traits::Crud, }; +use bcrypt::{hash, DEFAULT_COST}; +use diesel::{dsl::*, result::Error, *}; mod safe_settings_type { - use crate::ToSafeSettings; - use lemmy_db_schema::{schema::local_user::columns::*, source::local_user::LocalUser}; + use crate::{ + schema::local_user::columns::*, + source::local_user::LocalUser, + traits::ToSafeSettings, + }; type Columns = ( id, @@ -56,17 +59,8 @@ mod safe_settings_type { } } -pub trait LocalUser_ { - fn register(conn: &PgConnection, form: &LocalUserForm) -> Result; - fn update_password( - conn: &PgConnection, - local_user_id: LocalUserId, - new_password: &str, - ) -> Result; -} - -impl LocalUser_ for LocalUser { - fn register(conn: &PgConnection, form: &LocalUserForm) -> Result { +impl LocalUser { + pub fn register(conn: &PgConnection, form: &LocalUserForm) -> Result { let mut edited_user = form.clone(); let password_hash = hash(&form.password_encrypted, DEFAULT_COST).expect("Couldn't hash password"); @@ -75,7 +69,7 @@ impl LocalUser_ for LocalUser { Self::create(conn, &edited_user) } - fn update_password( + pub fn update_password( conn: &PgConnection, local_user_id: LocalUserId, new_password: &str, diff --git a/crates/db_queries/src/source/mod.rs b/crates/db_schema/src/impls/mod.rs similarity index 100% rename from crates/db_queries/src/source/mod.rs rename to crates/db_schema/src/impls/mod.rs diff --git a/crates/db_queries/src/source/moderator.rs b/crates/db_schema/src/impls/moderator.rs similarity index 87% rename from crates/db_queries/src/source/moderator.rs rename to crates/db_schema/src/impls/moderator.rs index eee5d5e9f..952bab40e 100644 --- a/crates/db_queries/src/source/moderator.rs +++ b/crates/db_schema/src/impls/moderator.rs @@ -1,24 +1,23 @@ -use crate::Crud; +use crate::{source::moderator::*, traits::Crud}; use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::source::moderator::*; impl Crud for ModRemovePost { type Form = ModRemovePostForm; type IdType = i32; fn read(conn: &PgConnection, from_id: i32) -> Result { - use lemmy_db_schema::schema::mod_remove_post::dsl::*; + use crate::schema::mod_remove_post::dsl::*; mod_remove_post.find(from_id).first::(conn) } fn create(conn: &PgConnection, form: &ModRemovePostForm) -> Result { - use lemmy_db_schema::schema::mod_remove_post::dsl::*; + use crate::schema::mod_remove_post::dsl::*; insert_into(mod_remove_post) .values(form) .get_result::(conn) } fn update(conn: &PgConnection, from_id: i32, form: &ModRemovePostForm) -> Result { - use lemmy_db_schema::schema::mod_remove_post::dsl::*; + use crate::schema::mod_remove_post::dsl::*; diesel::update(mod_remove_post.find(from_id)) .set(form) .get_result::(conn) @@ -29,19 +28,19 @@ impl Crud for ModLockPost { type Form = ModLockPostForm; type IdType = i32; fn read(conn: &PgConnection, from_id: i32) -> Result { - use lemmy_db_schema::schema::mod_lock_post::dsl::*; + use crate::schema::mod_lock_post::dsl::*; mod_lock_post.find(from_id).first::(conn) } fn create(conn: &PgConnection, form: &ModLockPostForm) -> Result { - use lemmy_db_schema::schema::mod_lock_post::dsl::*; + use crate::schema::mod_lock_post::dsl::*; insert_into(mod_lock_post) .values(form) .get_result::(conn) } fn update(conn: &PgConnection, from_id: i32, form: &ModLockPostForm) -> Result { - use lemmy_db_schema::schema::mod_lock_post::dsl::*; + use crate::schema::mod_lock_post::dsl::*; diesel::update(mod_lock_post.find(from_id)) .set(form) .get_result::(conn) @@ -52,19 +51,19 @@ impl Crud for ModStickyPost { type Form = ModStickyPostForm; type IdType = i32; fn read(conn: &PgConnection, from_id: i32) -> Result { - use lemmy_db_schema::schema::mod_sticky_post::dsl::*; + use crate::schema::mod_sticky_post::dsl::*; mod_sticky_post.find(from_id).first::(conn) } fn create(conn: &PgConnection, form: &ModStickyPostForm) -> Result { - use lemmy_db_schema::schema::mod_sticky_post::dsl::*; + use crate::schema::mod_sticky_post::dsl::*; insert_into(mod_sticky_post) .values(form) .get_result::(conn) } fn update(conn: &PgConnection, from_id: i32, form: &ModStickyPostForm) -> Result { - use lemmy_db_schema::schema::mod_sticky_post::dsl::*; + use crate::schema::mod_sticky_post::dsl::*; diesel::update(mod_sticky_post.find(from_id)) .set(form) .get_result::(conn) @@ -75,19 +74,19 @@ impl Crud for ModRemoveComment { type Form = ModRemoveCommentForm; type IdType = i32; fn read(conn: &PgConnection, from_id: i32) -> Result { - use lemmy_db_schema::schema::mod_remove_comment::dsl::*; + use crate::schema::mod_remove_comment::dsl::*; mod_remove_comment.find(from_id).first::(conn) } fn create(conn: &PgConnection, form: &ModRemoveCommentForm) -> Result { - use lemmy_db_schema::schema::mod_remove_comment::dsl::*; + use crate::schema::mod_remove_comment::dsl::*; insert_into(mod_remove_comment) .values(form) .get_result::(conn) } fn update(conn: &PgConnection, from_id: i32, form: &ModRemoveCommentForm) -> Result { - use lemmy_db_schema::schema::mod_remove_comment::dsl::*; + use crate::schema::mod_remove_comment::dsl::*; diesel::update(mod_remove_comment.find(from_id)) .set(form) .get_result::(conn) @@ -98,12 +97,12 @@ impl Crud for ModRemoveCommunity { type Form = ModRemoveCommunityForm; type IdType = i32; fn read(conn: &PgConnection, from_id: i32) -> Result { - use lemmy_db_schema::schema::mod_remove_community::dsl::*; + use crate::schema::mod_remove_community::dsl::*; mod_remove_community.find(from_id).first::(conn) } fn create(conn: &PgConnection, form: &ModRemoveCommunityForm) -> Result { - use lemmy_db_schema::schema::mod_remove_community::dsl::*; + use crate::schema::mod_remove_community::dsl::*; insert_into(mod_remove_community) .values(form) .get_result::(conn) @@ -114,7 +113,7 @@ impl Crud for ModRemoveCommunity { from_id: i32, form: &ModRemoveCommunityForm, ) -> Result { - use lemmy_db_schema::schema::mod_remove_community::dsl::*; + use crate::schema::mod_remove_community::dsl::*; diesel::update(mod_remove_community.find(from_id)) .set(form) .get_result::(conn) @@ -125,12 +124,12 @@ impl Crud for ModBanFromCommunity { type Form = ModBanFromCommunityForm; type IdType = i32; fn read(conn: &PgConnection, from_id: i32) -> Result { - use lemmy_db_schema::schema::mod_ban_from_community::dsl::*; + use crate::schema::mod_ban_from_community::dsl::*; mod_ban_from_community.find(from_id).first::(conn) } fn create(conn: &PgConnection, form: &ModBanFromCommunityForm) -> Result { - use lemmy_db_schema::schema::mod_ban_from_community::dsl::*; + use crate::schema::mod_ban_from_community::dsl::*; insert_into(mod_ban_from_community) .values(form) .get_result::(conn) @@ -141,7 +140,7 @@ impl Crud for ModBanFromCommunity { from_id: i32, form: &ModBanFromCommunityForm, ) -> Result { - use lemmy_db_schema::schema::mod_ban_from_community::dsl::*; + use crate::schema::mod_ban_from_community::dsl::*; diesel::update(mod_ban_from_community.find(from_id)) .set(form) .get_result::(conn) @@ -152,17 +151,17 @@ impl Crud for ModBan { type Form = ModBanForm; type IdType = i32; fn read(conn: &PgConnection, from_id: i32) -> Result { - use lemmy_db_schema::schema::mod_ban::dsl::*; + use crate::schema::mod_ban::dsl::*; mod_ban.find(from_id).first::(conn) } fn create(conn: &PgConnection, form: &ModBanForm) -> Result { - use lemmy_db_schema::schema::mod_ban::dsl::*; + use crate::schema::mod_ban::dsl::*; insert_into(mod_ban).values(form).get_result::(conn) } fn update(conn: &PgConnection, from_id: i32, form: &ModBanForm) -> Result { - use lemmy_db_schema::schema::mod_ban::dsl::*; + use crate::schema::mod_ban::dsl::*; diesel::update(mod_ban.find(from_id)) .set(form) .get_result::(conn) @@ -173,19 +172,19 @@ impl Crud for ModAddCommunity { type Form = ModAddCommunityForm; type IdType = i32; fn read(conn: &PgConnection, from_id: i32) -> Result { - use lemmy_db_schema::schema::mod_add_community::dsl::*; + use crate::schema::mod_add_community::dsl::*; mod_add_community.find(from_id).first::(conn) } fn create(conn: &PgConnection, form: &ModAddCommunityForm) -> Result { - use lemmy_db_schema::schema::mod_add_community::dsl::*; + use crate::schema::mod_add_community::dsl::*; insert_into(mod_add_community) .values(form) .get_result::(conn) } fn update(conn: &PgConnection, from_id: i32, form: &ModAddCommunityForm) -> Result { - use lemmy_db_schema::schema::mod_add_community::dsl::*; + use crate::schema::mod_add_community::dsl::*; diesel::update(mod_add_community.find(from_id)) .set(form) .get_result::(conn) @@ -196,12 +195,12 @@ impl Crud for ModTransferCommunity { type Form = ModTransferCommunityForm; type IdType = i32; fn read(conn: &PgConnection, from_id: i32) -> Result { - use lemmy_db_schema::schema::mod_transfer_community::dsl::*; + use crate::schema::mod_transfer_community::dsl::*; mod_transfer_community.find(from_id).first::(conn) } fn create(conn: &PgConnection, form: &ModTransferCommunityForm) -> Result { - use lemmy_db_schema::schema::mod_transfer_community::dsl::*; + use crate::schema::mod_transfer_community::dsl::*; insert_into(mod_transfer_community) .values(form) .get_result::(conn) @@ -212,7 +211,7 @@ impl Crud for ModTransferCommunity { from_id: i32, form: &ModTransferCommunityForm, ) -> Result { - use lemmy_db_schema::schema::mod_transfer_community::dsl::*; + use crate::schema::mod_transfer_community::dsl::*; diesel::update(mod_transfer_community.find(from_id)) .set(form) .get_result::(conn) @@ -223,17 +222,17 @@ impl Crud for ModAdd { type Form = ModAddForm; type IdType = i32; fn read(conn: &PgConnection, from_id: i32) -> Result { - use lemmy_db_schema::schema::mod_add::dsl::*; + use crate::schema::mod_add::dsl::*; mod_add.find(from_id).first::(conn) } fn create(conn: &PgConnection, form: &ModAddForm) -> Result { - use lemmy_db_schema::schema::mod_add::dsl::*; + use crate::schema::mod_add::dsl::*; insert_into(mod_add).values(form).get_result::(conn) } fn update(conn: &PgConnection, from_id: i32, form: &ModAddForm) -> Result { - use lemmy_db_schema::schema::mod_add::dsl::*; + use crate::schema::mod_add::dsl::*; diesel::update(mod_add.find(from_id)) .set(form) .get_result::(conn) @@ -242,8 +241,11 @@ impl Crud for ModAdd { #[cfg(test)] mod tests { - use crate::{establish_unpooled_connection, Crud}; - use lemmy_db_schema::source::{comment::*, community::*, moderator::*, person::*, post::*}; + use crate::{ + establish_unpooled_connection, + source::{comment::*, community::*, moderator::*, person::*, post::*}, + traits::Crud, + }; use serial_test::serial; // use Crud; diff --git a/crates/db_queries/src/source/password_reset_request.rs b/crates/db_schema/src/impls/password_reset_request.rs similarity index 82% rename from crates/db_queries/src/source/password_reset_request.rs rename to crates/db_schema/src/impls/password_reset_request.rs index a71cdae26..c5debd926 100644 --- a/crates/db_queries/src/source/password_reset_request.rs +++ b/crates/db_schema/src/impls/password_reset_request.rs @@ -1,10 +1,10 @@ -use crate::Crud; -use diesel::{dsl::*, result::Error, PgConnection, *}; -use lemmy_db_schema::{ +use crate::{ + newtypes::LocalUserId, schema::password_reset_request::dsl::*, source::password_reset_request::*, - LocalUserId, + traits::Crud, }; +use diesel::{dsl::*, result::Error, PgConnection, *}; use sha2::{Digest, Sha256}; impl Crud for PasswordResetRequest { @@ -31,17 +31,8 @@ impl Crud for PasswordResetRequest { } } -pub trait PasswordResetRequest_ { - fn create_token( - conn: &PgConnection, - from_local_user_id: LocalUserId, - token: &str, - ) -> Result; - fn read_from_token(conn: &PgConnection, token: &str) -> Result; -} - -impl PasswordResetRequest_ for PasswordResetRequest { - fn create_token( +impl PasswordResetRequest { + pub fn create_token( conn: &PgConnection, from_local_user_id: LocalUserId, token: &str, @@ -57,7 +48,7 @@ impl PasswordResetRequest_ for PasswordResetRequest { Self::create(conn, &form) } - fn read_from_token(conn: &PgConnection, token: &str) -> Result { + pub fn read_from_token(conn: &PgConnection, token: &str) -> Result { let mut hasher = Sha256::new(); hasher.update(token); let token_hash: String = bytes_to_hex(hasher.finalize().to_vec()); @@ -80,13 +71,12 @@ fn bytes_to_hex(bytes: Vec) -> String { mod tests { use crate::{ establish_unpooled_connection, - source::password_reset_request::PasswordResetRequest_, - Crud, - }; - use lemmy_db_schema::source::{ - local_user::{LocalUser, LocalUserForm}, - password_reset_request::PasswordResetRequest, - person::*, + source::{ + local_user::{LocalUser, LocalUserForm}, + password_reset_request::PasswordResetRequest, + person::*, + }, + traits::Crud, }; use serial_test::serial; diff --git a/crates/db_queries/src/source/person.rs b/crates/db_schema/src/impls/person.rs similarity index 68% rename from crates/db_queries/src/source/person.rs rename to crates/db_schema/src/impls/person.rs index 3f0c6f867..5b7cb9416 100644 --- a/crates/db_queries/src/source/person.rs +++ b/crates/db_schema/src/impls/person.rs @@ -1,15 +1,18 @@ -use crate::Crud; -use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{ +use crate::{ naive_now, + newtypes::{DbUrl, PersonId}, schema::person::dsl::*, source::person::{Person, PersonForm}, - PersonId, + traits::Crud, }; +use chrono::NaiveDateTime; +use diesel::{dsl::*, result::Error, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl, *}; +use lemmy_apub_lib::traits::{ActorType, ApubObject}; +use lemmy_utils::LemmyError; +use url::Url; mod safe_type { - use crate::ToSafe; - use lemmy_db_schema::{schema::person::columns::*, source::person::Person}; + use crate::{schema::person::columns::*, source::person::Person, traits::ToSafe}; type Columns = ( id, @@ -58,8 +61,7 @@ mod safe_type { } mod safe_type_alias_1 { - use crate::ToSafe; - use lemmy_db_schema::{schema::person_alias_1::columns::*, source::person::PersonAlias1}; + use crate::{schema::person_alias_1::columns::*, source::person::PersonAlias1, traits::ToSafe}; type Columns = ( id, @@ -108,8 +110,7 @@ mod safe_type_alias_1 { } mod safe_type_alias_2 { - use crate::ToSafe; - use lemmy_db_schema::{schema::person_alias_2::columns::*, source::person::PersonAlias2}; + use crate::{schema::person_alias_2::columns::*, source::person::PersonAlias2, traits::ToSafe}; type Columns = ( id, @@ -179,29 +180,20 @@ impl Crud for Person { } } -pub trait Person_ { - fn ban_person(conn: &PgConnection, person_id: PersonId, ban: bool) -> Result; - fn add_admin(conn: &PgConnection, person_id: PersonId, added: bool) -> Result; - fn find_by_name(conn: &PgConnection, name: &str) -> Result; - fn mark_as_updated(conn: &PgConnection, person_id: PersonId) -> Result; - fn delete_account(conn: &PgConnection, person_id: PersonId) -> Result; - fn upsert(conn: &PgConnection, person_form: &PersonForm) -> Result; -} - -impl Person_ for Person { - fn ban_person(conn: &PgConnection, person_id: PersonId, ban: bool) -> Result { +impl Person { + pub fn ban_person(conn: &PgConnection, person_id: PersonId, ban: bool) -> Result { diesel::update(person.find(person_id)) .set(banned.eq(ban)) .get_result::(conn) } - fn add_admin(conn: &PgConnection, person_id: PersonId, added: bool) -> Result { + pub fn add_admin(conn: &PgConnection, person_id: PersonId, added: bool) -> Result { diesel::update(person.find(person_id)) .set(admin.eq(added)) .get_result::(conn) } - fn find_by_name(conn: &PgConnection, from_name: &str) -> Result { + pub fn find_by_name(conn: &PgConnection, from_name: &str) -> Result { person .filter(deleted.eq(false)) .filter(local.eq(true)) @@ -209,14 +201,14 @@ impl Person_ for Person { .first::(conn) } - fn mark_as_updated(conn: &PgConnection, person_id: PersonId) -> Result { + pub fn mark_as_updated(conn: &PgConnection, person_id: PersonId) -> Result { diesel::update(person.find(person_id)) .set((last_refreshed_at.eq(naive_now()),)) .get_result::(conn) } - fn delete_account(conn: &PgConnection, person_id: PersonId) -> Result { - use lemmy_db_schema::schema::local_user; + pub fn delete_account(conn: &PgConnection, person_id: PersonId) -> Result { + use crate::schema::local_user; // Set the local user info to none diesel::update(local_user::table.filter(local_user::person_id.eq(person_id))) @@ -237,7 +229,7 @@ impl Person_ for Person { .get_result::(conn) } - fn upsert(conn: &PgConnection, person_form: &PersonForm) -> Result { + pub fn upsert(conn: &PgConnection, person_form: &PersonForm) -> Result { insert_into(person) .values(person_form) .on_conflict(actor_id) @@ -247,9 +239,65 @@ impl Person_ for Person { } } +impl ApubObject for Person { + type DataType = PgConnection; + + fn last_refreshed_at(&self) -> Option { + Some(self.last_refreshed_at) + } + + fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, LemmyError> { + use crate::schema::person::dsl::*; + let object_id: DbUrl = object_id.into(); + Ok( + person + .filter(deleted.eq(false)) + .filter(actor_id.eq(object_id)) + .first::(conn) + .ok(), + ) + } + + fn delete(self, conn: &PgConnection) -> Result<(), LemmyError> { + use crate::schema::person::dsl::*; + diesel::update(person.find(self.id)) + .set((deleted.eq(true), updated.eq(naive_now()))) + .get_result::(conn)?; + Ok(()) + } +} + +impl ActorType for Person { + fn is_local(&self) -> bool { + self.local + } + fn actor_id(&self) -> Url { + self.actor_id.to_owned().into_inner() + } + fn name(&self) -> String { + self.name.clone() + } + + fn public_key(&self) -> Option { + self.public_key.to_owned() + } + + fn private_key(&self) -> Option { + self.private_key.to_owned() + } + + fn inbox_url(&self) -> Url { + self.inbox_url.clone().into() + } + + fn shared_inbox_url(&self) -> Option { + self.shared_inbox_url.clone().map(|s| s.into_inner()) + } +} + #[cfg(test)] mod tests { - use crate::{establish_unpooled_connection, source::person::*}; + use crate::{establish_unpooled_connection, source::person::*, traits::Crud}; #[test] fn test_crud() { diff --git a/crates/db_queries/src/source/person_block.rs b/crates/db_schema/src/impls/person_block.rs similarity index 70% rename from crates/db_queries/src/source/person_block.rs rename to crates/db_schema/src/impls/person_block.rs index d4505519c..d1b776805 100644 --- a/crates/db_queries/src/source/person_block.rs +++ b/crates/db_schema/src/impls/person_block.rs @@ -1,25 +1,17 @@ -use crate::Blockable; -use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{ +use crate::{ + newtypes::PersonId, source::person_block::{PersonBlock, PersonBlockForm}, - PersonId, + traits::Blockable, }; +use diesel::{dsl::*, result::Error, *}; -pub trait PersonBlock_ { - fn read( - conn: &PgConnection, - person_id: PersonId, - target_id: PersonId, - ) -> Result; -} - -impl PersonBlock_ for PersonBlock { - fn read( +impl PersonBlock { + pub fn read( conn: &PgConnection, for_person_id: PersonId, for_recipient_id: PersonId, ) -> Result { - use lemmy_db_schema::schema::person_block::dsl::*; + use crate::schema::person_block::dsl::*; person_block .filter(person_id.eq(for_person_id)) .filter(target_id.eq(for_recipient_id)) @@ -30,7 +22,7 @@ impl PersonBlock_ for PersonBlock { impl Blockable for PersonBlock { type Form = PersonBlockForm; fn block(conn: &PgConnection, person_block_form: &PersonBlockForm) -> Result { - use lemmy_db_schema::schema::person_block::dsl::*; + use crate::schema::person_block::dsl::*; insert_into(person_block) .values(person_block_form) .on_conflict((person_id, target_id)) @@ -39,7 +31,7 @@ impl Blockable for PersonBlock { .get_result::(conn) } fn unblock(conn: &PgConnection, person_block_form: &Self::Form) -> Result { - use lemmy_db_schema::schema::person_block::dsl::*; + use crate::schema::person_block::dsl::*; diesel::delete( person_block .filter(person_id.eq(person_block_form.person_id)) diff --git a/crates/db_queries/src/source/person_mention.rs b/crates/db_schema/src/impls/person_mention.rs similarity index 77% rename from crates/db_queries/src/source/person_mention.rs rename to crates/db_schema/src/impls/person_mention.rs index 1adcc3c98..df0e55ede 100644 --- a/crates/db_queries/src/source/person_mention.rs +++ b/crates/db_schema/src/impls/person_mention.rs @@ -1,17 +1,20 @@ -use crate::Crud; +use crate::{ + newtypes::{CommentId, PersonId, PersonMentionId}, + source::person_mention::*, + traits::Crud, +}; use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{source::person_mention::*, CommentId, PersonId, PersonMentionId}; impl Crud for PersonMention { type Form = PersonMentionForm; type IdType = PersonMentionId; fn read(conn: &PgConnection, person_mention_id: PersonMentionId) -> Result { - use lemmy_db_schema::schema::person_mention::dsl::*; + use crate::schema::person_mention::dsl::*; person_mention.find(person_mention_id).first::(conn) } fn create(conn: &PgConnection, person_mention_form: &PersonMentionForm) -> Result { - use lemmy_db_schema::schema::person_mention::dsl::*; + use crate::schema::person_mention::dsl::*; // since the return here isnt utilized, we dont need to do an update // but get_result doesnt return the existing row here insert_into(person_mention) @@ -27,47 +30,30 @@ impl Crud for PersonMention { person_mention_id: PersonMentionId, person_mention_form: &PersonMentionForm, ) -> Result { - use lemmy_db_schema::schema::person_mention::dsl::*; + use crate::schema::person_mention::dsl::*; diesel::update(person_mention.find(person_mention_id)) .set(person_mention_form) .get_result::(conn) } } -pub trait PersonMention_ { - fn update_read( - conn: &PgConnection, - person_mention_id: PersonMentionId, - new_read: bool, - ) -> Result; - fn mark_all_as_read( - conn: &PgConnection, - for_recipient_id: PersonId, - ) -> Result, Error>; - fn read_by_comment_and_person( - conn: &PgConnection, - for_comment_id: CommentId, - for_recipient_id: PersonId, - ) -> Result; -} - -impl PersonMention_ for PersonMention { - fn update_read( +impl PersonMention { + pub fn update_read( conn: &PgConnection, person_mention_id: PersonMentionId, new_read: bool, ) -> Result { - use lemmy_db_schema::schema::person_mention::dsl::*; + use crate::schema::person_mention::dsl::*; diesel::update(person_mention.find(person_mention_id)) .set(read.eq(new_read)) .get_result::(conn) } - fn mark_all_as_read( + pub fn mark_all_as_read( conn: &PgConnection, for_recipient_id: PersonId, ) -> Result, Error> { - use lemmy_db_schema::schema::person_mention::dsl::*; + use crate::schema::person_mention::dsl::*; diesel::update( person_mention .filter(recipient_id.eq(for_recipient_id)) @@ -76,12 +62,12 @@ impl PersonMention_ for PersonMention { .set(read.eq(true)) .get_results::(conn) } - fn read_by_comment_and_person( + pub fn read_by_comment_and_person( conn: &PgConnection, for_comment_id: CommentId, for_recipient_id: PersonId, ) -> Result { - use lemmy_db_schema::schema::person_mention::dsl::*; + use crate::schema::person_mention::dsl::*; person_mention .filter(comment_id.eq(for_comment_id)) .filter(recipient_id.eq(for_recipient_id)) @@ -91,13 +77,16 @@ impl PersonMention_ for PersonMention { #[cfg(test)] mod tests { - use crate::{establish_unpooled_connection, Crud}; - use lemmy_db_schema::source::{ - comment::*, - community::{Community, CommunityForm}, - person::*, - person_mention::*, - post::*, + use crate::{ + establish_unpooled_connection, + source::{ + comment::*, + community::{Community, CommunityForm}, + person::*, + person_mention::*, + post::*, + }, + traits::Crud, }; use serial_test::serial; diff --git a/crates/db_queries/src/source/post.rs b/crates/db_schema/src/impls/post.rs similarity index 75% rename from crates/db_queries/src/source/post.rs rename to crates/db_schema/src/impls/post.rs index f9c34be83..2b71c663f 100644 --- a/crates/db_queries/src/source/post.rs +++ b/crates/db_schema/src/impls/post.rs @@ -1,7 +1,6 @@ -use crate::{Crud, DeleteableOrRemoveable, Likeable, Readable, Saveable}; -use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{ +use crate::{ naive_now, + newtypes::{CommunityId, DbUrl, PersonId, PostId}, source::post::{ Post, PostForm, @@ -12,75 +11,46 @@ use lemmy_db_schema::{ PostSaved, PostSavedForm, }, - CommunityId, - DbUrl, - PersonId, - PostId, + traits::{Crud, DeleteableOrRemoveable, Likeable, Readable, Saveable}, }; +use chrono::NaiveDateTime; +use diesel::{dsl::*, result::Error, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl}; +use lemmy_apub_lib::traits::ApubObject; +use lemmy_utils::LemmyError; +use url::Url; impl Crud for Post { type Form = PostForm; type IdType = PostId; fn read(conn: &PgConnection, post_id: PostId) -> Result { - use lemmy_db_schema::schema::post::dsl::*; + use crate::schema::post::dsl::*; post.find(post_id).first::(conn) } fn delete(conn: &PgConnection, post_id: PostId) -> Result { - use lemmy_db_schema::schema::post::dsl::*; + use crate::schema::post::dsl::*; diesel::delete(post.find(post_id)).execute(conn) } fn create(conn: &PgConnection, new_post: &PostForm) -> Result { - use lemmy_db_schema::schema::post::dsl::*; + use crate::schema::post::dsl::*; insert_into(post).values(new_post).get_result::(conn) } fn update(conn: &PgConnection, post_id: PostId, new_post: &PostForm) -> Result { - use lemmy_db_schema::schema::post::dsl::*; + use crate::schema::post::dsl::*; diesel::update(post.find(post_id)) .set(new_post) .get_result::(conn) } } -pub trait Post_ { - //fn read(conn: &PgConnection, post_id: i32) -> Result; - fn list_for_community( - conn: &PgConnection, - the_community_id: CommunityId, - ) -> Result, Error>; - fn update_ap_id(conn: &PgConnection, post_id: PostId, apub_id: DbUrl) -> Result; - fn permadelete_for_creator( - conn: &PgConnection, - for_creator_id: PersonId, - ) -> Result, Error>; - fn update_deleted(conn: &PgConnection, post_id: PostId, new_deleted: bool) - -> Result; - fn update_removed(conn: &PgConnection, post_id: PostId, new_removed: bool) - -> Result; - fn update_removed_for_creator( - conn: &PgConnection, - for_creator_id: PersonId, - for_community_id: Option, - new_removed: bool, - ) -> Result, Error>; - fn update_locked(conn: &PgConnection, post_id: PostId, new_locked: bool) -> Result; - fn update_stickied( - conn: &PgConnection, - post_id: PostId, - new_stickied: bool, - ) -> Result; - fn is_post_creator(person_id: PersonId, post_creator_id: PersonId) -> bool; - fn upsert(conn: &PgConnection, post_form: &PostForm) -> Result; -} - -impl Post_ for Post { - fn list_for_community( +impl Post { + pub fn list_for_community( conn: &PgConnection, the_community_id: CommunityId, ) -> Result, Error> { - use lemmy_db_schema::schema::post::dsl::*; + use crate::schema::post::dsl::*; post .filter(community_id.eq(the_community_id)) .then_order_by(published.desc()) @@ -89,19 +59,19 @@ impl Post_ for Post { .load::(conn) } - fn update_ap_id(conn: &PgConnection, post_id: PostId, apub_id: DbUrl) -> Result { - use lemmy_db_schema::schema::post::dsl::*; + pub fn update_ap_id(conn: &PgConnection, post_id: PostId, apub_id: DbUrl) -> Result { + use crate::schema::post::dsl::*; diesel::update(post.find(post_id)) .set(ap_id.eq(apub_id)) .get_result::(conn) } - fn permadelete_for_creator( + pub fn permadelete_for_creator( conn: &PgConnection, for_creator_id: PersonId, ) -> Result, Error> { - use lemmy_db_schema::schema::post::dsl::*; + use crate::schema::post::dsl::*; let perma_deleted = "*Permananently Deleted*"; let perma_deleted_url = "https://deleted.com"; @@ -117,35 +87,35 @@ impl Post_ for Post { .get_results::(conn) } - fn update_deleted( + pub fn update_deleted( conn: &PgConnection, post_id: PostId, new_deleted: bool, ) -> Result { - use lemmy_db_schema::schema::post::dsl::*; + use crate::schema::post::dsl::*; diesel::update(post.find(post_id)) .set((deleted.eq(new_deleted), updated.eq(naive_now()))) .get_result::(conn) } - fn update_removed( + pub fn update_removed( conn: &PgConnection, post_id: PostId, new_removed: bool, ) -> Result { - use lemmy_db_schema::schema::post::dsl::*; + use crate::schema::post::dsl::*; diesel::update(post.find(post_id)) .set((removed.eq(new_removed), updated.eq(naive_now()))) .get_result::(conn) } - fn update_removed_for_creator( + pub fn update_removed_for_creator( conn: &PgConnection, for_creator_id: PersonId, for_community_id: Option, new_removed: bool, ) -> Result, Error> { - use lemmy_db_schema::schema::post::dsl::*; + use crate::schema::post::dsl::*; let mut update = diesel::update(post).into_boxed(); update = update.filter(creator_id.eq(for_creator_id)); @@ -159,30 +129,34 @@ impl Post_ for Post { .get_results::(conn) } - fn update_locked(conn: &PgConnection, post_id: PostId, new_locked: bool) -> Result { - use lemmy_db_schema::schema::post::dsl::*; + pub fn update_locked( + conn: &PgConnection, + post_id: PostId, + new_locked: bool, + ) -> Result { + use crate::schema::post::dsl::*; diesel::update(post.find(post_id)) .set(locked.eq(new_locked)) .get_result::(conn) } - fn update_stickied( + pub fn update_stickied( conn: &PgConnection, post_id: PostId, new_stickied: bool, ) -> Result { - use lemmy_db_schema::schema::post::dsl::*; + use crate::schema::post::dsl::*; diesel::update(post.find(post_id)) .set(stickied.eq(new_stickied)) .get_result::(conn) } - fn is_post_creator(person_id: PersonId, post_creator_id: PersonId) -> bool { + pub fn is_post_creator(person_id: PersonId, post_creator_id: PersonId) -> bool { person_id == post_creator_id } - fn upsert(conn: &PgConnection, post_form: &PostForm) -> Result { - use lemmy_db_schema::schema::post::dsl::*; + pub fn upsert(conn: &PgConnection, post_form: &PostForm) -> Result { + use crate::schema::post::dsl::*; insert_into(post) .values(post_form) .on_conflict(ap_id) @@ -196,7 +170,7 @@ impl Likeable for PostLike { type Form = PostLikeForm; type IdType = PostId; fn like(conn: &PgConnection, post_like_form: &PostLikeForm) -> Result { - use lemmy_db_schema::schema::post_like::dsl::*; + use crate::schema::post_like::dsl::*; insert_into(post_like) .values(post_like_form) .on_conflict((post_id, person_id)) @@ -205,7 +179,7 @@ impl Likeable for PostLike { .get_result::(conn) } fn remove(conn: &PgConnection, person_id: PersonId, post_id: PostId) -> Result { - use lemmy_db_schema::schema::post_like::dsl; + use crate::schema::post_like::dsl; diesel::delete( dsl::post_like .filter(dsl::post_id.eq(post_id)) @@ -218,7 +192,7 @@ impl Likeable for PostLike { impl Saveable for PostSaved { type Form = PostSavedForm; fn save(conn: &PgConnection, post_saved_form: &PostSavedForm) -> Result { - use lemmy_db_schema::schema::post_saved::dsl::*; + use crate::schema::post_saved::dsl::*; insert_into(post_saved) .values(post_saved_form) .on_conflict((post_id, person_id)) @@ -227,7 +201,7 @@ impl Saveable for PostSaved { .get_result::(conn) } fn unsave(conn: &PgConnection, post_saved_form: &PostSavedForm) -> Result { - use lemmy_db_schema::schema::post_saved::dsl::*; + use crate::schema::post_saved::dsl::*; diesel::delete( post_saved .filter(post_id.eq(post_saved_form.post_id)) @@ -240,7 +214,7 @@ impl Saveable for PostSaved { impl Readable for PostRead { type Form = PostReadForm; fn mark_as_read(conn: &PgConnection, post_read_form: &PostReadForm) -> Result { - use lemmy_db_schema::schema::post_read::dsl::*; + use crate::schema::post_read::dsl::*; insert_into(post_read) .values(post_read_form) .on_conflict((post_id, person_id)) @@ -250,7 +224,7 @@ impl Readable for PostRead { } fn mark_as_unread(conn: &PgConnection, post_read_form: &PostReadForm) -> Result { - use lemmy_db_schema::schema::post_read::dsl::*; + use crate::schema::post_read::dsl::*; diesel::delete( post_read .filter(post_id.eq(post_read_form.post_id)) @@ -274,12 +248,38 @@ impl DeleteableOrRemoveable for Post { } } +impl ApubObject for Post { + type DataType = PgConnection; + + fn last_refreshed_at(&self) -> Option { + None + } + + fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, LemmyError> { + use crate::schema::post::dsl::*; + let object_id: DbUrl = object_id.into(); + Ok(post.filter(ap_id.eq(object_id)).first::(conn).ok()) + } + + fn delete(self, conn: &PgConnection) -> Result<(), LemmyError> { + use crate::schema::post::dsl::*; + diesel::update(post.find(self.id)) + .set((deleted.eq(true), updated.eq(naive_now()))) + .get_result::(conn)?; + Ok(()) + } +} + #[cfg(test)] mod tests { - use crate::{establish_unpooled_connection, source::post::*}; - use lemmy_db_schema::source::{ - community::{Community, CommunityForm}, - person::*, + use crate::{ + establish_unpooled_connection, + source::{ + community::{Community, CommunityForm}, + person::*, + post::*, + }, + traits::{Crud, Likeable, Readable, Saveable}, }; use serial_test::serial; diff --git a/crates/db_queries/src/source/post_report.rs b/crates/db_schema/src/impls/post_report.rs similarity index 85% rename from crates/db_queries/src/source/post_report.rs rename to crates/db_schema/src/impls/post_report.rs index e787fed4c..d049fbced 100644 --- a/crates/db_queries/src/source/post_report.rs +++ b/crates/db_schema/src/impls/post_report.rs @@ -1,6 +1,10 @@ -use crate::Reportable; +use crate::{ + naive_now, + newtypes::{PersonId, PostReportId}, + source::post_report::*, + traits::Reportable, +}; use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{naive_now, source::post_report::*, PersonId, PostReportId}; impl Reportable for PostReport { type Form = PostReportForm; @@ -11,7 +15,7 @@ impl Reportable for PostReport { /// * `conn` - the postgres connection /// * `post_report_form` - the filled CommentReportForm to insert fn report(conn: &PgConnection, post_report_form: &PostReportForm) -> Result { - use lemmy_db_schema::schema::post_report::dsl::*; + use crate::schema::post_report::dsl::*; insert_into(post_report) .values(post_report_form) .get_result::(conn) @@ -27,7 +31,7 @@ impl Reportable for PostReport { report_id: Self::IdType, by_resolver_id: PersonId, ) -> Result { - use lemmy_db_schema::schema::post_report::dsl::*; + use crate::schema::post_report::dsl::*; update(post_report.find(report_id)) .set(( resolved.eq(true), @@ -47,7 +51,7 @@ impl Reportable for PostReport { report_id: Self::IdType, by_resolver_id: PersonId, ) -> Result { - use lemmy_db_schema::schema::post_report::dsl::*; + use crate::schema::post_report::dsl::*; update(post_report.find(report_id)) .set(( resolved.eq(false), diff --git a/crates/db_queries/src/source/private_message.rs b/crates/db_schema/src/impls/private_message.rs similarity index 72% rename from crates/db_queries/src/source/private_message.rs rename to crates/db_schema/src/impls/private_message.rs index 3aa279b2c..f252a0c03 100644 --- a/crates/db_queries/src/source/private_message.rs +++ b/crates/db_schema/src/impls/private_message.rs @@ -1,17 +1,25 @@ -use crate::{Crud, DeleteableOrRemoveable}; +use crate::{ + naive_now, + newtypes::{DbUrl, PersonId, PrivateMessageId}, + source::private_message::*, + traits::{Crud, DeleteableOrRemoveable}, +}; +use chrono::NaiveDateTime; use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{naive_now, source::private_message::*, DbUrl, PersonId, PrivateMessageId}; +use lemmy_apub_lib::traits::ApubObject; +use lemmy_utils::LemmyError; +use url::Url; impl Crud for PrivateMessage { type Form = PrivateMessageForm; type IdType = PrivateMessageId; fn read(conn: &PgConnection, private_message_id: PrivateMessageId) -> Result { - use lemmy_db_schema::schema::private_message::dsl::*; + use crate::schema::private_message::dsl::*; private_message.find(private_message_id).first::(conn) } fn create(conn: &PgConnection, private_message_form: &PrivateMessageForm) -> Result { - use lemmy_db_schema::schema::private_message::dsl::*; + use crate::schema::private_message::dsl::*; insert_into(private_message) .values(private_message_form) .get_result::(conn) @@ -22,95 +30,64 @@ impl Crud for PrivateMessage { private_message_id: PrivateMessageId, private_message_form: &PrivateMessageForm, ) -> Result { - use lemmy_db_schema::schema::private_message::dsl::*; + use crate::schema::private_message::dsl::*; diesel::update(private_message.find(private_message_id)) .set(private_message_form) .get_result::(conn) } } -pub trait PrivateMessage_ { - fn update_ap_id( - conn: &PgConnection, - private_message_id: PrivateMessageId, - apub_id: DbUrl, - ) -> Result; - fn update_content( - conn: &PgConnection, - private_message_id: PrivateMessageId, - new_content: &str, - ) -> Result; - fn update_deleted( - conn: &PgConnection, - private_message_id: PrivateMessageId, - new_deleted: bool, - ) -> Result; - fn update_read( - conn: &PgConnection, - private_message_id: PrivateMessageId, - new_read: bool, - ) -> Result; - fn mark_all_as_read( - conn: &PgConnection, - for_recipient_id: PersonId, - ) -> Result, Error>; - fn upsert( - conn: &PgConnection, - private_message_form: &PrivateMessageForm, - ) -> Result; -} - -impl PrivateMessage_ for PrivateMessage { - fn update_ap_id( +impl PrivateMessage { + pub fn update_ap_id( conn: &PgConnection, private_message_id: PrivateMessageId, apub_id: DbUrl, ) -> Result { - use lemmy_db_schema::schema::private_message::dsl::*; + use crate::schema::private_message::dsl::*; diesel::update(private_message.find(private_message_id)) .set(ap_id.eq(apub_id)) .get_result::(conn) } - fn update_content( + pub fn update_content( conn: &PgConnection, private_message_id: PrivateMessageId, new_content: &str, ) -> Result { - use lemmy_db_schema::schema::private_message::dsl::*; + use crate::schema::private_message::dsl::*; diesel::update(private_message.find(private_message_id)) .set((content.eq(new_content), updated.eq(naive_now()))) .get_result::(conn) } - fn update_deleted( + pub fn update_deleted( conn: &PgConnection, private_message_id: PrivateMessageId, new_deleted: bool, ) -> Result { - use lemmy_db_schema::schema::private_message::dsl::*; + use crate::schema::private_message::dsl::*; diesel::update(private_message.find(private_message_id)) .set(deleted.eq(new_deleted)) .get_result::(conn) } - fn update_read( + pub fn update_read( conn: &PgConnection, private_message_id: PrivateMessageId, new_read: bool, ) -> Result { - use lemmy_db_schema::schema::private_message::dsl::*; + use crate::schema::private_message::dsl::*; diesel::update(private_message.find(private_message_id)) .set(read.eq(new_read)) .get_result::(conn) } - fn mark_all_as_read( + pub fn mark_all_as_read( conn: &PgConnection, for_recipient_id: PersonId, ) -> Result, Error> { - use lemmy_db_schema::schema::private_message::dsl::*; + use crate::schema::private_message::dsl::*; diesel::update( private_message .filter(recipient_id.eq(for_recipient_id)) @@ -120,11 +97,11 @@ impl PrivateMessage_ for PrivateMessage { .get_results::(conn) } - fn upsert( + pub fn upsert( conn: &PgConnection, private_message_form: &PrivateMessageForm, ) -> Result { - use lemmy_db_schema::schema::private_message::dsl::*; + use crate::schema::private_message::dsl::*; insert_into(private_message) .values(private_message_form) .on_conflict(ap_id) @@ -141,10 +118,37 @@ impl DeleteableOrRemoveable for PrivateMessage { } } +impl ApubObject for PrivateMessage { + type DataType = PgConnection; + + fn last_refreshed_at(&self) -> Option { + None + } + + fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, LemmyError> { + use crate::schema::private_message::dsl::*; + let object_id: DbUrl = object_id.into(); + Ok( + private_message + .filter(ap_id.eq(object_id)) + .first::(conn) + .ok(), + ) + } + + fn delete(self, _conn: &PgConnection) -> Result<(), LemmyError> { + // do nothing, because pm can't be fetched over http + unimplemented!() + } +} + #[cfg(test)] mod tests { - use crate::{establish_unpooled_connection, source::private_message::PrivateMessage_, Crud}; - use lemmy_db_schema::source::{person::*, private_message::*}; + use crate::{ + establish_unpooled_connection, + source::{person::*, private_message::*}, + traits::Crud, + }; use serial_test::serial; #[test] diff --git a/crates/db_schema/src/impls/secret.rs b/crates/db_schema/src/impls/secret.rs new file mode 100644 index 000000000..3fb9b32bd --- /dev/null +++ b/crates/db_schema/src/impls/secret.rs @@ -0,0 +1,15 @@ +use crate::source::secret::Secret; +use diesel::{result::Error, *}; + +impl Secret { + /// Initialize the Secrets from the DB. + /// Warning: You should only call this once. + pub fn init(conn: &PgConnection) -> Result { + read_secrets(conn) + } +} + +fn read_secrets(conn: &PgConnection) -> Result { + use crate::schema::secret::dsl::*; + secret.first::(conn) +} diff --git a/crates/db_queries/src/source/site.rs b/crates/db_schema/src/impls/site.rs similarity index 55% rename from crates/db_queries/src/source/site.rs rename to crates/db_schema/src/impls/site.rs index b2bad7138..af0e8153d 100644 --- a/crates/db_queries/src/source/site.rs +++ b/crates/db_schema/src/impls/site.rs @@ -1,47 +1,41 @@ -use crate::Crud; +use crate::{naive_now, newtypes::PersonId, source::site::*, traits::Crud}; use diesel::{dsl::*, result::Error, *}; -use lemmy_db_schema::{naive_now, source::site::*, PersonId}; impl Crud for Site { type Form = SiteForm; type IdType = i32; fn read(conn: &PgConnection, _site_id: i32) -> Result { - use lemmy_db_schema::schema::site::dsl::*; + use crate::schema::site::dsl::*; site.first::(conn) } fn create(conn: &PgConnection, new_site: &SiteForm) -> Result { - use lemmy_db_schema::schema::site::dsl::*; + use crate::schema::site::dsl::*; insert_into(site).values(new_site).get_result::(conn) } fn update(conn: &PgConnection, site_id: i32, new_site: &SiteForm) -> Result { - use lemmy_db_schema::schema::site::dsl::*; + use crate::schema::site::dsl::*; diesel::update(site.find(site_id)) .set(new_site) .get_result::(conn) } fn delete(conn: &PgConnection, site_id: i32) -> Result { - use lemmy_db_schema::schema::site::dsl::*; + use crate::schema::site::dsl::*; diesel::delete(site.find(site_id)).execute(conn) } } -pub trait Site_ { - fn transfer(conn: &PgConnection, new_creator_id: PersonId) -> Result; - fn read_simple(conn: &PgConnection) -> Result; -} - -impl Site_ for Site { - fn transfer(conn: &PgConnection, new_creator_id: PersonId) -> Result { - use lemmy_db_schema::schema::site::dsl::*; +impl Site { + pub fn transfer(conn: &PgConnection, new_creator_id: PersonId) -> Result { + use crate::schema::site::dsl::*; diesel::update(site.find(1)) .set((creator_id.eq(new_creator_id), updated.eq(naive_now()))) .get_result::(conn) } - fn read_simple(conn: &PgConnection) -> Result { - use lemmy_db_schema::schema::site::dsl::*; + pub fn read_simple(conn: &PgConnection) -> Result { + use crate::schema::site::dsl::*; site.first::(conn) } } diff --git a/crates/db_schema/src/lib.rs b/crates/db_schema/src/lib.rs index cc29848de..f30f0bd80 100644 --- a/crates/db_schema/src/lib.rs +++ b/crates/db_schema/src/lib.rs @@ -1,134 +1,194 @@ #[macro_use] extern crate diesel; - #[macro_use] extern crate diesel_derive_newtype; +#[macro_use] +extern crate lazy_static; +// this is used in tests +#[allow(unused_imports)] +#[macro_use] +extern crate diesel_migrations; +#[macro_use] +extern crate strum_macros; -use chrono::NaiveDateTime; -use diesel::{ - backend::Backend, - deserialize::FromSql, - serialize::{Output, ToSql}, - sql_types::Text, -}; -use serde::{Deserialize, Serialize}; -use std::{ - fmt, - fmt::{Display, Formatter}, - io::Write, -}; -use url::Url; - +pub mod aggregates; +pub mod impls; +pub mod newtypes; pub mod schema; pub mod source; +pub mod traits; -#[derive( - Debug, Copy, Clone, Hash, Eq, PartialEq, Default, Serialize, Deserialize, DieselNewType, -)] -pub struct PostId(pub i32); +pub type DbPool = diesel::r2d2::Pool>; -impl fmt::Display for PostId { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.0) +use crate::newtypes::DbUrl; +use chrono::NaiveDateTime; +use diesel::{Connection, PgConnection}; +use lemmy_utils::ApiError; +use regex::Regex; +use serde::{Deserialize, Serialize}; +use std::{env, env::VarError}; +use url::Url; + +pub fn get_database_url_from_env() -> Result { + env::var("LEMMY_DATABASE_URL") +} + +#[derive(EnumString, ToString, Debug, Serialize, Deserialize, Clone, Copy)] +pub enum SortType { + Active, + Hot, + New, + TopDay, + TopWeek, + TopMonth, + TopYear, + TopAll, + MostComments, + NewComments, +} + +#[derive(EnumString, ToString, Debug, Serialize, Deserialize, Clone, Copy)] +pub enum ListingType { + All, + Local, + Subscribed, + Community, +} + +#[derive(EnumString, ToString, Debug, Serialize, Deserialize, Clone, Copy)] +pub enum SearchType { + All, + Comments, + Posts, + Communities, + Users, + Url, +} + +pub fn from_opt_str_to_opt_enum(opt: &Option) -> Option { + opt.as_ref().map(|t| T::from_str(t).ok()).flatten() +} + +pub fn fuzzy_search(q: &str) -> String { + let replaced = q.replace(" ", "%"); + format!("%{}%", replaced) +} + +pub fn limit_and_offset(page: Option, limit: Option) -> (i64, i64) { + let page = page.unwrap_or(1); + let limit = limit.unwrap_or(10); + let offset = limit * (page - 1); + (limit, offset) +} + +pub fn is_email_regex(test: &str) -> bool { + EMAIL_REGEX.is_match(test) +} + +pub fn diesel_option_overwrite(opt: &Option) -> Option> { + match opt { + // An empty string is an erase + Some(unwrapped) => { + if !unwrapped.eq("") { + Some(Some(unwrapped.to_owned())) + } else { + Some(None) + } + } + None => None, } } -#[derive( - Debug, Copy, Clone, Hash, Eq, PartialEq, Default, Serialize, Deserialize, DieselNewType, -)] -pub struct PersonId(pub i32); - -#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] -pub struct CommentId(pub i32); - -impl fmt::Display for CommentId { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.0) +pub fn diesel_option_overwrite_to_url( + opt: &Option, +) -> Result>, ApiError> { + match opt.as_ref().map(|s| s.as_str()) { + // An empty string is an erase + Some("") => Ok(Some(None)), + Some(str_url) => match Url::parse(str_url) { + Ok(url) => Ok(Some(Some(url.into()))), + Err(e) => Err(ApiError::err("invalid_url", e)), + }, + None => Ok(None), } } -#[derive( - Debug, Copy, Clone, Hash, Eq, PartialEq, Default, Serialize, Deserialize, DieselNewType, -)] -pub struct CommunityId(pub i32); +embed_migrations!(); -#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] -pub struct LocalUserId(pub i32); - -#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] -pub struct PrivateMessageId(i32); - -impl fmt::Display for PrivateMessageId { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.0) - } +pub fn establish_unpooled_connection() -> PgConnection { + let db_url = match get_database_url_from_env() { + Ok(url) => url, + Err(e) => panic!( + "Failed to read database URL from env var LEMMY_DATABASE_URL: {}", + e + ), + }; + let conn = + PgConnection::establish(&db_url).unwrap_or_else(|_| panic!("Error connecting to {}", db_url)); + embedded_migrations::run(&conn).expect("load migrations"); + conn } -#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] -pub struct PersonMentionId(i32); - -#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] -pub struct PersonBlockId(i32); - -#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] -pub struct CommunityBlockId(i32); - -#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] -pub struct CommentReportId(i32); - -#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] -pub struct PostReportId(i32); - -#[repr(transparent)] -#[derive(Clone, PartialEq, Serialize, Deserialize, Debug, AsExpression, FromSqlRow)] -#[sql_type = "Text"] -pub struct DbUrl(Url); - -impl ToSql for DbUrl -where - String: ToSql, -{ - fn to_sql(&self, out: &mut Output) -> diesel::serialize::Result { - self.0.to_string().to_sql(out) - } -} - -impl FromSql for DbUrl -where - String: FromSql, -{ - fn from_sql(bytes: Option<&DB::RawValue>) -> diesel::deserialize::Result { - let str = String::from_sql(bytes)?; - Ok(DbUrl(Url::parse(&str)?)) - } -} - -impl DbUrl { - // TODO: remove this method and just use into() - pub fn into_inner(self) -> Url { - self.0 - } -} - -impl Display for DbUrl { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - self.to_owned().0.fmt(f) - } -} - -impl From for Url { - fn from(url: DbUrl) -> Self { - url.0 - } -} - -impl From for DbUrl { - fn from(url: Url) -> Self { - DbUrl(url) - } -} - -// TODO: can probably move this back to lemmy_db_queries pub fn naive_now() -> NaiveDateTime { chrono::prelude::Utc::now().naive_utc() } + +lazy_static! { + static ref EMAIL_REGEX: Regex = + Regex::new(r"^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$") + .expect("compile email regex"); +} + +pub mod functions { + use diesel::sql_types::*; + + sql_function! { + fn hot_rank(score: BigInt, time: Timestamp) -> Integer; + } +} + +#[cfg(test)] +mod tests { + use super::{fuzzy_search, *}; + use crate::is_email_regex; + + #[test] + fn test_fuzzy_search() { + let test = "This is a fuzzy search"; + assert_eq!(fuzzy_search(test), "%This%is%a%fuzzy%search%".to_string()); + } + + #[test] + fn test_email() { + assert!(is_email_regex("gush@gmail.com")); + assert!(!is_email_regex("nada_neutho")); + } + + #[test] + fn test_diesel_option_overwrite() { + assert_eq!(diesel_option_overwrite(&None), None); + assert_eq!(diesel_option_overwrite(&Some("".to_string())), Some(None)); + assert_eq!( + diesel_option_overwrite(&Some("test".to_string())), + Some(Some("test".to_string())) + ); + } + + #[test] + fn test_diesel_option_overwrite_to_url() { + assert!(matches!(diesel_option_overwrite_to_url(&None), Ok(None))); + assert!(matches!( + diesel_option_overwrite_to_url(&Some("".to_string())), + Ok(Some(None)) + )); + assert!(matches!( + diesel_option_overwrite_to_url(&Some("invalid_url".to_string())), + Err(_) + )); + let example_url = "https://example.com"; + assert!(matches!( + diesel_option_overwrite_to_url(&Some(example_url.to_string())), + Ok(Some(Some(url))) if url == Url::parse(example_url).unwrap().into() + )); + } +} diff --git a/crates/db_schema/src/newtypes.rs b/crates/db_schema/src/newtypes.rs new file mode 100644 index 000000000..3042d35e7 --- /dev/null +++ b/crates/db_schema/src/newtypes.rs @@ -0,0 +1,119 @@ +use diesel::{ + backend::Backend, + deserialize::FromSql, + serialize::{Output, ToSql}, + sql_types::Text, +}; +use serde::{Deserialize, Serialize}; +use std::{ + fmt, + fmt::{Display, Formatter}, + io::Write, +}; +use url::Url; + +#[derive( + Debug, Copy, Clone, Hash, Eq, PartialEq, Default, Serialize, Deserialize, DieselNewType, +)] +pub struct PostId(pub i32); + +impl fmt::Display for PostId { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.0) + } +} + +#[derive( + Debug, Copy, Clone, Hash, Eq, PartialEq, Default, Serialize, Deserialize, DieselNewType, +)] +pub struct PersonId(pub i32); + +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] +pub struct CommentId(pub i32); + +impl fmt::Display for CommentId { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.0) + } +} + +#[derive( + Debug, Copy, Clone, Hash, Eq, PartialEq, Default, Serialize, Deserialize, DieselNewType, +)] +pub struct CommunityId(pub i32); + +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] +pub struct LocalUserId(pub i32); + +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] +pub struct PrivateMessageId(i32); + +impl fmt::Display for PrivateMessageId { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.0) + } +} + +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] +pub struct PersonMentionId(i32); + +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] +pub struct PersonBlockId(i32); + +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] +pub struct CommunityBlockId(i32); + +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] +pub struct CommentReportId(i32); + +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, DieselNewType)] +pub struct PostReportId(i32); + +#[repr(transparent)] +#[derive(Clone, PartialEq, Serialize, Deserialize, Debug, AsExpression, FromSqlRow)] +#[sql_type = "Text"] +pub struct DbUrl(Url); + +impl ToSql for DbUrl +where + String: ToSql, +{ + fn to_sql(&self, out: &mut Output) -> diesel::serialize::Result { + self.0.to_string().to_sql(out) + } +} + +impl FromSql for DbUrl +where + String: FromSql, +{ + fn from_sql(bytes: Option<&DB::RawValue>) -> diesel::deserialize::Result { + let str = String::from_sql(bytes)?; + Ok(DbUrl(Url::parse(&str)?)) + } +} + +impl DbUrl { + // TODO: remove this method and just use into() + pub fn into_inner(self) -> Url { + self.0 + } +} + +impl Display for DbUrl { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + self.to_owned().0.fmt(f) + } +} + +impl From for Url { + fn from(url: DbUrl) -> Self { + url.0 + } +} + +impl From for DbUrl { + fn from(url: Url) -> Self { + DbUrl(url) + } +} diff --git a/crates/db_schema/src/source/activity.rs b/crates/db_schema/src/source/activity.rs index ced8f3be4..c5ac833ed 100644 --- a/crates/db_schema/src/source/activity.rs +++ b/crates/db_schema/src/source/activity.rs @@ -1,4 +1,4 @@ -use crate::{schema::activity, DbUrl}; +use crate::{newtypes::DbUrl, schema::activity}; use serde_json::Value; use std::fmt::Debug; diff --git a/crates/db_schema/src/source/comment.rs b/crates/db_schema/src/source/comment.rs index 54e8221f9..46242fc73 100644 --- a/crates/db_schema/src/source/comment.rs +++ b/crates/db_schema/src/source/comment.rs @@ -1,18 +1,9 @@ use crate::{ - naive_now, + newtypes::{CommentId, DbUrl, PersonId, PostId}, schema::{comment, comment_alias_1, comment_like, comment_saved}, source::post::Post, - CommentId, - DbUrl, - PersonId, - PostId, }; -use chrono::NaiveDateTime; -use diesel::{ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl}; -use lemmy_apub_lib::traits::ApubObject; -use lemmy_utils::LemmyError; use serde::{Deserialize, Serialize}; -use url::Url; // WITH RECURSIVE MyTree AS ( // SELECT * FROM comment WHERE parent_id IS NULL @@ -114,27 +105,3 @@ pub struct CommentSavedForm { pub comment_id: CommentId, pub person_id: PersonId, } - -impl ApubObject for Comment { - type DataType = PgConnection; - - fn last_refreshed_at(&self) -> Option { - None - } - - fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, LemmyError> { - use crate::schema::comment::dsl::*; - let object_id: DbUrl = object_id.into(); - Ok(comment.filter(ap_id.eq(object_id)).first::(conn).ok()) - } - - // TODO: duplicate code from Comment::update_deleted(), we should really move all impls to - // this crate so we can call that function from here - fn delete(self, conn: &PgConnection) -> Result<(), LemmyError> { - use crate::schema::comment::dsl::*; - diesel::update(comment.find(self.id)) - .set((deleted.eq(true), updated.eq(naive_now()))) - .get_result::(conn)?; - Ok(()) - } -} diff --git a/crates/db_schema/src/source/comment_report.rs b/crates/db_schema/src/source/comment_report.rs index 57ca961de..3c265ed09 100644 --- a/crates/db_schema/src/source/comment_report.rs +++ b/crates/db_schema/src/source/comment_report.rs @@ -1,9 +1,7 @@ use crate::{ + newtypes::{CommentId, CommentReportId, PersonId}, schema::comment_report, source::comment::Comment, - CommentId, - CommentReportId, - PersonId, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_schema/src/source/community.rs b/crates/db_schema/src/source/community.rs index 365ddba7f..4c351b886 100644 --- a/crates/db_schema/src/source/community.rs +++ b/crates/db_schema/src/source/community.rs @@ -1,16 +1,8 @@ use crate::{ - naive_now, + newtypes::{CommunityId, DbUrl, PersonId}, schema::{community, community_follower, community_moderator, community_person_ban}, - CommunityId, - DbUrl, - PersonId, }; -use chrono::NaiveDateTime; -use diesel::{ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl}; -use lemmy_apub_lib::traits::{ActorType, ApubObject}; -use lemmy_utils::LemmyError; use serde::{Deserialize, Serialize}; -use url::Url; #[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)] #[table_name = "community"] @@ -130,56 +122,3 @@ pub struct CommunityFollowerForm { pub person_id: PersonId, pub pending: bool, } - -impl ApubObject for Community { - type DataType = PgConnection; - - fn last_refreshed_at(&self) -> Option { - Some(self.last_refreshed_at) - } - - fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, LemmyError> { - use crate::schema::community::dsl::*; - let object_id: DbUrl = object_id.into(); - Ok( - community - .filter(actor_id.eq(object_id)) - .first::(conn) - .ok(), - ) - } - - fn delete(self, conn: &PgConnection) -> Result<(), LemmyError> { - use crate::schema::community::dsl::*; - diesel::update(community.find(self.id)) - .set((deleted.eq(true), updated.eq(naive_now()))) - .get_result::(conn)?; - Ok(()) - } -} - -impl ActorType for Community { - fn is_local(&self) -> bool { - self.local - } - fn actor_id(&self) -> Url { - self.actor_id.to_owned().into() - } - fn name(&self) -> String { - self.name.clone() - } - fn public_key(&self) -> Option { - self.public_key.to_owned() - } - fn private_key(&self) -> Option { - self.private_key.to_owned() - } - - fn inbox_url(&self) -> Url { - self.inbox_url.clone().into() - } - - fn shared_inbox_url(&self) -> Option { - self.shared_inbox_url.clone().map(|s| s.into_inner()) - } -} diff --git a/crates/db_schema/src/source/community_block.rs b/crates/db_schema/src/source/community_block.rs index 35dfbd8a9..f5cc545e8 100644 --- a/crates/db_schema/src/source/community_block.rs +++ b/crates/db_schema/src/source/community_block.rs @@ -1,9 +1,7 @@ use crate::{ + newtypes::{CommunityBlockId, CommunityId, PersonId}, schema::community_block, source::community::Community, - CommunityBlockId, - CommunityId, - PersonId, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_schema/src/source/local_user.rs b/crates/db_schema/src/source/local_user.rs index d9fce8da9..34dd26f76 100644 --- a/crates/db_schema/src/source/local_user.rs +++ b/crates/db_schema/src/source/local_user.rs @@ -1,4 +1,7 @@ -use crate::{schema::local_user, LocalUserId, PersonId}; +use crate::{ + newtypes::{LocalUserId, PersonId}, + schema::local_user, +}; use serde::{Deserialize, Serialize}; #[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)] diff --git a/crates/db_schema/src/source/moderator.rs b/crates/db_schema/src/source/moderator.rs index adde70351..ee8bc693f 100644 --- a/crates/db_schema/src/source/moderator.rs +++ b/crates/db_schema/src/source/moderator.rs @@ -1,4 +1,5 @@ use crate::{ + newtypes::{CommentId, CommunityId, PersonId, PostId}, schema::{ mod_add, mod_add_community, @@ -11,10 +12,6 @@ use crate::{ mod_sticky_post, mod_transfer_community, }, - CommentId, - CommunityId, - PersonId, - PostId, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_schema/src/source/password_reset_request.rs b/crates/db_schema/src/source/password_reset_request.rs index 0af2d024d..0d461049f 100644 --- a/crates/db_schema/src/source/password_reset_request.rs +++ b/crates/db_schema/src/source/password_reset_request.rs @@ -1,4 +1,4 @@ -use crate::{schema::password_reset_request, LocalUserId}; +use crate::{newtypes::LocalUserId, schema::password_reset_request}; #[derive(Queryable, Identifiable, PartialEq, Debug)] #[table_name = "password_reset_request"] diff --git a/crates/db_schema/src/source/person.rs b/crates/db_schema/src/source/person.rs index f71f39dc9..c9ffad7b3 100644 --- a/crates/db_schema/src/source/person.rs +++ b/crates/db_schema/src/source/person.rs @@ -1,15 +1,8 @@ use crate::{ - naive_now, + newtypes::{DbUrl, PersonId}, schema::{person, person_alias_1, person_alias_2}, - DbUrl, - PersonId, }; -use chrono::NaiveDateTime; -use diesel::{ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl}; -use lemmy_apub_lib::traits::{ActorType, ApubObject}; -use lemmy_utils::LemmyError; use serde::{Deserialize, Serialize}; -use url::Url; #[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)] #[table_name = "person"] @@ -176,59 +169,3 @@ pub struct PersonForm { pub admin: Option, pub bot_account: Option, } - -impl ApubObject for Person { - type DataType = PgConnection; - - fn last_refreshed_at(&self) -> Option { - Some(self.last_refreshed_at) - } - - fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, LemmyError> { - use crate::schema::person::dsl::*; - let object_id: DbUrl = object_id.into(); - Ok( - person - .filter(deleted.eq(false)) - .filter(actor_id.eq(object_id)) - .first::(conn) - .ok(), - ) - } - - fn delete(self, conn: &PgConnection) -> Result<(), LemmyError> { - use crate::schema::person::dsl::*; - diesel::update(person.find(self.id)) - .set((deleted.eq(true), updated.eq(naive_now()))) - .get_result::(conn)?; - Ok(()) - } -} - -impl ActorType for Person { - fn is_local(&self) -> bool { - self.local - } - fn actor_id(&self) -> Url { - self.actor_id.to_owned().into_inner() - } - fn name(&self) -> String { - self.name.clone() - } - - fn public_key(&self) -> Option { - self.public_key.to_owned() - } - - fn private_key(&self) -> Option { - self.private_key.to_owned() - } - - fn inbox_url(&self) -> Url { - self.inbox_url.clone().into() - } - - fn shared_inbox_url(&self) -> Option { - self.shared_inbox_url.clone().map(|s| s.into_inner()) - } -} diff --git a/crates/db_schema/src/source/person_block.rs b/crates/db_schema/src/source/person_block.rs index c0ad15ca9..ff55872f1 100644 --- a/crates/db_schema/src/source/person_block.rs +++ b/crates/db_schema/src/source/person_block.rs @@ -1,4 +1,7 @@ -use crate::{schema::person_block, PersonBlockId, PersonId}; +use crate::{ + newtypes::{PersonBlockId, PersonId}, + schema::person_block, +}; use serde::{Deserialize, Serialize}; #[derive( diff --git a/crates/db_schema/src/source/person_mention.rs b/crates/db_schema/src/source/person_mention.rs index d65a13b9d..795799c7e 100644 --- a/crates/db_schema/src/source/person_mention.rs +++ b/crates/db_schema/src/source/person_mention.rs @@ -1,9 +1,7 @@ use crate::{ + newtypes::{CommentId, PersonId, PersonMentionId}, schema::person_mention, source::comment::Comment, - CommentId, - PersonId, - PersonMentionId, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_schema/src/source/post.rs b/crates/db_schema/src/source/post.rs index d28599c59..cc9325361 100644 --- a/crates/db_schema/src/source/post.rs +++ b/crates/db_schema/src/source/post.rs @@ -1,18 +1,8 @@ use crate::{ - naive_now, + newtypes::{CommunityId, DbUrl, PersonId, PostId}, schema::{post, post_like, post_read, post_saved}, - CommunityId, - DbUrl, - PersonId, - PostId, }; -use chrono::NaiveDateTime; -use diesel::{ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl}; -use lemmy_apub_lib::traits::ApubObject; -use lemmy_utils::LemmyError; use serde::{Deserialize, Serialize}; -use url::Url; - #[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)] #[table_name = "post"] pub struct Post { @@ -112,25 +102,3 @@ pub struct PostReadForm { pub post_id: PostId, pub person_id: PersonId, } - -impl ApubObject for Post { - type DataType = PgConnection; - - fn last_refreshed_at(&self) -> Option { - None - } - - fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, LemmyError> { - use crate::schema::post::dsl::*; - let object_id: DbUrl = object_id.into(); - Ok(post.filter(ap_id.eq(object_id)).first::(conn).ok()) - } - - fn delete(self, conn: &PgConnection) -> Result<(), LemmyError> { - use crate::schema::post::dsl::*; - diesel::update(post.find(self.id)) - .set((deleted.eq(true), updated.eq(naive_now()))) - .get_result::(conn)?; - Ok(()) - } -} diff --git a/crates/db_schema/src/source/post_report.rs b/crates/db_schema/src/source/post_report.rs index a146a4bef..6e711782b 100644 --- a/crates/db_schema/src/source/post_report.rs +++ b/crates/db_schema/src/source/post_report.rs @@ -1,4 +1,8 @@ -use crate::{schema::post_report, source::post::Post, DbUrl, PersonId, PostId, PostReportId}; +use crate::{ + newtypes::{DbUrl, PersonId, PostId, PostReportId}, + schema::post_report, + source::post::Post, +}; use serde::{Deserialize, Serialize}; #[derive( diff --git a/crates/db_schema/src/source/private_message.rs b/crates/db_schema/src/source/private_message.rs index 6247cb955..7facccaac 100644 --- a/crates/db_schema/src/source/private_message.rs +++ b/crates/db_schema/src/source/private_message.rs @@ -1,10 +1,8 @@ -use crate::{schema::private_message, DbUrl, PersonId, PrivateMessageId}; -use chrono::NaiveDateTime; -use diesel::{ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl}; -use lemmy_apub_lib::traits::ApubObject; -use lemmy_utils::LemmyError; +use crate::{ + newtypes::{DbUrl, PersonId, PrivateMessageId}, + schema::private_message, +}; use serde::{Deserialize, Serialize}; -use url::Url; #[derive( Clone, Queryable, Associations, Identifiable, PartialEq, Debug, Serialize, Deserialize, @@ -36,27 +34,3 @@ pub struct PrivateMessageForm { pub ap_id: Option, pub local: Option, } - -impl ApubObject for PrivateMessage { - type DataType = PgConnection; - - fn last_refreshed_at(&self) -> Option { - None - } - - fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, LemmyError> { - use crate::schema::private_message::dsl::*; - let object_id: DbUrl = object_id.into(); - Ok( - private_message - .filter(ap_id.eq(object_id)) - .first::(conn) - .ok(), - ) - } - - fn delete(self, _conn: &PgConnection) -> Result<(), LemmyError> { - // do nothing, because pm can't be fetched over http - unimplemented!() - } -} diff --git a/crates/db_schema/src/source/site.rs b/crates/db_schema/src/source/site.rs index ec9dee84e..dd273f9da 100644 --- a/crates/db_schema/src/source/site.rs +++ b/crates/db_schema/src/source/site.rs @@ -1,4 +1,7 @@ -use crate::{schema::site, DbUrl, PersonId}; +use crate::{ + newtypes::{DbUrl, PersonId}, + schema::site, +}; use serde::{Deserialize, Serialize}; #[derive(Queryable, Identifiable, PartialEq, Debug, Clone, Serialize, Deserialize)] diff --git a/crates/db_schema/src/traits.rs b/crates/db_schema/src/traits.rs new file mode 100644 index 000000000..aea36ed87 --- /dev/null +++ b/crates/db_schema/src/traits.rs @@ -0,0 +1,164 @@ +use crate::newtypes::{CommunityId, PersonId}; +use diesel::{result::Error, PgConnection}; + +pub trait Crud { + type Form; + type IdType; + fn create(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; + fn read(conn: &PgConnection, id: Self::IdType) -> Result + where + Self: Sized; + fn update(conn: &PgConnection, id: Self::IdType, form: &Self::Form) -> Result + where + Self: Sized; + fn delete(_conn: &PgConnection, _id: Self::IdType) -> Result + where + Self: Sized, + { + unimplemented!() + } +} + +pub trait Followable { + type Form; + fn follow(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; + fn follow_accepted( + conn: &PgConnection, + community_id: CommunityId, + person_id: PersonId, + ) -> Result + where + Self: Sized; + fn unfollow(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; + fn has_local_followers(conn: &PgConnection, community_id: CommunityId) -> Result; +} + +pub trait Joinable { + type Form; + fn join(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; + fn leave(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; +} + +pub trait Likeable { + type Form; + type IdType; + fn like(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; + fn remove( + conn: &PgConnection, + person_id: PersonId, + item_id: Self::IdType, + ) -> Result + where + Self: Sized; +} + +pub trait Bannable { + type Form; + fn ban(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; + fn unban(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; +} + +pub trait Saveable { + type Form; + fn save(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; + fn unsave(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; +} + +pub trait Blockable { + type Form; + fn block(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; + fn unblock(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; +} + +pub trait Readable { + type Form; + fn mark_as_read(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; + fn mark_as_unread(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; +} + +pub trait Reportable { + type Form; + type IdType; + fn report(conn: &PgConnection, form: &Self::Form) -> Result + where + Self: Sized; + fn resolve( + conn: &PgConnection, + report_id: Self::IdType, + resolver_id: PersonId, + ) -> Result + where + Self: Sized; + fn unresolve( + conn: &PgConnection, + report_id: Self::IdType, + resolver_id: PersonId, + ) -> Result + where + Self: Sized; +} + +pub trait DeleteableOrRemoveable { + fn blank_out_deleted_or_removed_info(self) -> Self; +} + +pub trait MaybeOptional { + fn get_optional(self) -> Option; +} + +impl MaybeOptional for T { + fn get_optional(self) -> Option { + Some(self) + } +} + +impl MaybeOptional for Option { + fn get_optional(self) -> Option { + self + } +} + +pub trait ToSafe { + type SafeColumns; + fn safe_columns_tuple() -> Self::SafeColumns; +} + +pub trait ToSafeSettings { + type SafeSettingsColumns; + fn safe_settings_columns_tuple() -> Self::SafeSettingsColumns; +} + +pub trait ViewToVec { + type DbTuple; + fn from_tuple_to_vec(tuple: Vec) -> Vec + where + Self: Sized; +} diff --git a/crates/db_views/Cargo.toml b/crates/db_views/Cargo.toml index 85afe569e..fbea19878 100644 --- a/crates/db_views/Cargo.toml +++ b/crates/db_views/Cargo.toml @@ -11,7 +11,6 @@ documentation = "https://join-lemmy.org/docs/en/index.html" doctest = false [dependencies] -lemmy_db_queries = { version = "=0.13.0", path = "../db_queries" } lemmy_db_schema = { version = "=0.13.0", path = "../db_schema" } diesel = { version = "1.4.8", features = ["postgres","chrono","r2d2","serde_json"] } serde = { version = "1.0.130", features = ["derive"] } diff --git a/crates/db_views/src/comment_report_view.rs b/crates/db_views/src/comment_report_view.rs index 7c2f99579..1469e42d0 100644 --- a/crates/db_views/src/comment_report_view.rs +++ b/crates/db_views/src/comment_report_view.rs @@ -1,12 +1,8 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{ +use lemmy_db_schema::{ aggregates::comment_aggregates::CommentAggregates, limit_and_offset, - MaybeOptional, - ToSafe, - ViewToVec, -}; -use lemmy_db_schema::{ + newtypes::{CommentReportId, CommunityId, PersonId}, schema::{ comment, comment_aggregates, @@ -27,9 +23,7 @@ use lemmy_db_schema::{ person::{Person, PersonAlias1, PersonAlias2, PersonSafe, PersonSafeAlias1, PersonSafeAlias2}, post::Post, }, - CommentReportId, - CommunityId, - PersonId, + traits::{MaybeOptional, ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; @@ -309,14 +303,12 @@ impl ViewToVec for CommentReportView { #[cfg(test)] mod tests { use crate::comment_report_view::{CommentReportQueryBuilder, CommentReportView}; - use lemmy_db_queries::{ + use lemmy_db_schema::{ aggregates::comment_aggregates::CommentAggregates, establish_unpooled_connection, - Crud, - Joinable, - Reportable, + source::{comment::*, comment_report::*, community::*, person::*, post::*}, + traits::{Crud, Joinable, Reportable}, }; - use lemmy_db_schema::source::{comment::*, comment_report::*, community::*, person::*, post::*}; use serial_test::serial; #[test] diff --git a/crates/db_views/src/comment_view.rs b/crates/db_views/src/comment_view.rs index 2468c6536..4fdd40970 100644 --- a/crates/db_views/src/comment_view.rs +++ b/crates/db_views/src/comment_view.rs @@ -1,16 +1,10 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{ +use lemmy_db_schema::{ aggregates::comment_aggregates::CommentAggregates, functions::hot_rank, fuzzy_search, limit_and_offset, - ListingType, - MaybeOptional, - SortType, - ToSafe, - ViewToVec, -}; -use lemmy_db_schema::{ + newtypes::{CommentId, CommunityId, DbUrl, PersonId, PostId}, schema::{ comment, comment_aggregates, @@ -33,11 +27,9 @@ use lemmy_db_schema::{ person_block::PersonBlock, post::Post, }, - CommentId, - CommunityId, - DbUrl, - PersonId, - PostId, + traits::{MaybeOptional, ToSafe, ViewToVec}, + ListingType, + SortType, }; use serde::{Deserialize, Serialize}; @@ -526,19 +518,11 @@ impl ViewToVec for CommentView { #[cfg(test)] mod tests { use crate::comment_view::*; - use lemmy_db_queries::{ + use lemmy_db_schema::{ aggregates::comment_aggregates::CommentAggregates, establish_unpooled_connection, - Blockable, - Crud, - Likeable, - }; - use lemmy_db_schema::source::{ - comment::*, - community::*, - person::*, - person_block::PersonBlockForm, - post::*, + source::{comment::*, community::*, person::*, person_block::PersonBlockForm, post::*}, + traits::{Blockable, Crud, Likeable}, }; use serial_test::serial; diff --git a/crates/db_views/src/local_user_view.rs b/crates/db_views/src/local_user_view.rs index 0e4d872ac..f697aba65 100644 --- a/crates/db_views/src/local_user_view.rs +++ b/crates/db_views/src/local_user_view.rs @@ -1,13 +1,13 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{aggregates::person_aggregates::PersonAggregates, ToSafe, ToSafeSettings}; use lemmy_db_schema::{ + aggregates::person_aggregates::PersonAggregates, + newtypes::{LocalUserId, PersonId}, schema::{local_user, person, person_aggregates}, source::{ local_user::{LocalUser, LocalUserSettings}, person::{Person, PersonSafe}, }, - LocalUserId, - PersonId, + traits::{ToSafe, ToSafeSettings}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views/src/post_report_view.rs b/crates/db_views/src/post_report_view.rs index a8604ea9c..f27ba50aa 100644 --- a/crates/db_views/src/post_report_view.rs +++ b/crates/db_views/src/post_report_view.rs @@ -1,12 +1,8 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{ +use lemmy_db_schema::{ aggregates::post_aggregates::PostAggregates, limit_and_offset, - MaybeOptional, - ToSafe, - ViewToVec, -}; -use lemmy_db_schema::{ + newtypes::{CommunityId, PersonId, PostReportId}, schema::{ community, community_moderator, @@ -25,9 +21,7 @@ use lemmy_db_schema::{ post::Post, post_report::PostReport, }, - CommunityId, - PersonId, - PostReportId, + traits::{MaybeOptional, ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; @@ -288,18 +282,16 @@ impl ViewToVec for PostReportView { #[cfg(test)] mod tests { use crate::post_report_view::{PostReportQueryBuilder, PostReportView}; - use lemmy_db_queries::{ + use lemmy_db_schema::{ aggregates::post_aggregates::PostAggregates, establish_unpooled_connection, - Crud, - Joinable, - Reportable, - }; - use lemmy_db_schema::source::{ - community::*, - person::*, - post::*, - post_report::{PostReport, PostReportForm}, + source::{ + community::*, + person::*, + post::*, + post_report::{PostReport, PostReportForm}, + }, + traits::{Crud, Joinable, Reportable}, }; use serial_test::serial; diff --git a/crates/db_views/src/post_view.rs b/crates/db_views/src/post_view.rs index f42a16599..897a78e00 100644 --- a/crates/db_views/src/post_view.rs +++ b/crates/db_views/src/post_view.rs @@ -1,16 +1,10 @@ use diesel::{pg::Pg, result::Error, *}; -use lemmy_db_queries::{ +use lemmy_db_schema::{ aggregates::post_aggregates::PostAggregates, functions::hot_rank, fuzzy_search, limit_and_offset, - ListingType, - MaybeOptional, - SortType, - ToSafe, - ViewToVec, -}; -use lemmy_db_schema::{ + newtypes::{CommunityId, DbUrl, PersonId, PostId}, schema::{ community, community_block, @@ -30,10 +24,9 @@ use lemmy_db_schema::{ person_block::PersonBlock, post::{Post, PostRead, PostSaved}, }, - CommunityId, - DbUrl, - PersonId, - PostId, + traits::{MaybeOptional, ToSafe, ViewToVec}, + ListingType, + SortType, }; use log::debug; use serde::{Deserialize, Serialize}; @@ -487,22 +480,20 @@ impl ViewToVec for PostView { #[cfg(test)] mod tests { use crate::post_view::{PostQueryBuilder, PostView}; - use lemmy_db_queries::{ + use lemmy_db_schema::{ aggregates::post_aggregates::PostAggregates, establish_unpooled_connection, - Blockable, - Crud, - Likeable, + source::{ + community::*, + community_block::{CommunityBlock, CommunityBlockForm}, + person::*, + person_block::{PersonBlock, PersonBlockForm}, + post::*, + }, + traits::{Blockable, Crud, Likeable}, ListingType, SortType, }; - use lemmy_db_schema::source::{ - community::*, - community_block::{CommunityBlock, CommunityBlockForm}, - person::*, - person_block::{PersonBlock, PersonBlockForm}, - post::*, - }; use serial_test::serial; #[test] diff --git a/crates/db_views/src/private_message_view.rs b/crates/db_views/src/private_message_view.rs index 7e322bbc7..940dbd366 100644 --- a/crates/db_views/src/private_message_view.rs +++ b/crates/db_views/src/private_message_view.rs @@ -1,13 +1,13 @@ use diesel::{pg::Pg, result::Error, *}; -use lemmy_db_queries::{limit_and_offset, MaybeOptional, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::{PersonId, PrivateMessageId}, schema::{person, person_alias_1, private_message}, source::{ person::{Person, PersonAlias1, PersonSafe, PersonSafeAlias1}, private_message::PrivateMessage, }, - PersonId, - PrivateMessageId, + traits::{MaybeOptional, ToSafe, ViewToVec}, }; use log::debug; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views/src/site_view.rs b/crates/db_views/src/site_view.rs index d0c2ee82d..3c94975aa 100644 --- a/crates/db_views/src/site_view.rs +++ b/crates/db_views/src/site_view.rs @@ -1,11 +1,12 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{aggregates::site_aggregates::SiteAggregates, ToSafe}; use lemmy_db_schema::{ + aggregates::site_aggregates::SiteAggregates, schema::{person, site, site_aggregates}, source::{ person::{Person, PersonSafe}, site::Site, }, + traits::ToSafe, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_actor/Cargo.toml b/crates/db_views_actor/Cargo.toml index fa21bf87b..ced1e8a28 100644 --- a/crates/db_views_actor/Cargo.toml +++ b/crates/db_views_actor/Cargo.toml @@ -11,7 +11,6 @@ documentation = "https://join-lemmy.org/docs/en/index.html" doctest = false [dependencies] -lemmy_db_queries = { version = "=0.13.0", path = "../db_queries" } lemmy_db_schema = { version = "=0.13.0", path = "../db_schema" } diesel = { version = "1.4.8", features = ["postgres","chrono","r2d2","serde_json"] } serde = { version = "1.0.130", features = ["derive"] } diff --git a/crates/db_views_actor/src/community_block_view.rs b/crates/db_views_actor/src/community_block_view.rs index 3046b0c2d..8f0cfca76 100644 --- a/crates/db_views_actor/src/community_block_view.rs +++ b/crates/db_views_actor/src/community_block_view.rs @@ -1,12 +1,12 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{ToSafe, ViewToVec}; use lemmy_db_schema::{ + newtypes::PersonId, schema::{community, community_block, person}, source::{ community::{Community, CommunitySafe}, person::{Person, PersonSafe}, }, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_actor/src/community_follower_view.rs b/crates/db_views_actor/src/community_follower_view.rs index d3b11e4d2..379d70958 100644 --- a/crates/db_views_actor/src/community_follower_view.rs +++ b/crates/db_views_actor/src/community_follower_view.rs @@ -1,13 +1,12 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{ToSafe, ViewToVec}; use lemmy_db_schema::{ + newtypes::{CommunityId, PersonId}, schema::{community, community_follower, person}, source::{ community::{Community, CommunitySafe}, person::{Person, PersonSafe}, }, - CommunityId, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_actor/src/community_moderator_view.rs b/crates/db_views_actor/src/community_moderator_view.rs index 071fc1075..1e48ad0ab 100644 --- a/crates/db_views_actor/src/community_moderator_view.rs +++ b/crates/db_views_actor/src/community_moderator_view.rs @@ -1,13 +1,12 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{ToSafe, ViewToVec}; use lemmy_db_schema::{ + newtypes::{CommunityId, PersonId}, schema::{community, community_moderator, person}, source::{ community::{Community, CommunitySafe}, person::{Person, PersonSafe}, }, - CommunityId, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_actor/src/community_person_ban_view.rs b/crates/db_views_actor/src/community_person_ban_view.rs index b08549211..bffbacb12 100644 --- a/crates/db_views_actor/src/community_person_ban_view.rs +++ b/crates/db_views_actor/src/community_person_ban_view.rs @@ -1,13 +1,12 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::ToSafe; use lemmy_db_schema::{ + newtypes::{CommunityId, PersonId}, schema::{community, community_person_ban, person}, source::{ community::{Community, CommunitySafe}, person::{Person, PersonSafe}, }, - CommunityId, - PersonId, + traits::ToSafe, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_actor/src/community_view.rs b/crates/db_views_actor/src/community_view.rs index 8ce3b7e6f..48270c25c 100644 --- a/crates/db_views_actor/src/community_view.rs +++ b/crates/db_views_actor/src/community_view.rs @@ -1,24 +1,19 @@ use crate::{community_moderator_view::CommunityModeratorView, person_view::PersonViewSafe}; use diesel::{result::Error, *}; -use lemmy_db_queries::{ +use lemmy_db_schema::{ aggregates::community_aggregates::CommunityAggregates, functions::hot_rank, fuzzy_search, limit_and_offset, - ListingType, - MaybeOptional, - SortType, - ToSafe, - ViewToVec, -}; -use lemmy_db_schema::{ + newtypes::{CommunityId, PersonId}, schema::{community, community_aggregates, community_block, community_follower}, source::{ community::{Community, CommunityFollower, CommunitySafe}, community_block::CommunityBlock, }, - CommunityId, - PersonId, + traits::{MaybeOptional, ToSafe, ViewToVec}, + ListingType, + SortType, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_actor/src/person_block_view.rs b/crates/db_views_actor/src/person_block_view.rs index d4a528603..2ca2077cb 100644 --- a/crates/db_views_actor/src/person_block_view.rs +++ b/crates/db_views_actor/src/person_block_view.rs @@ -1,9 +1,9 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{ToSafe, ViewToVec}; use lemmy_db_schema::{ + newtypes::PersonId, schema::{person, person_alias_1, person_block}, source::person::{Person, PersonAlias1, PersonSafe, PersonSafeAlias1}, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_actor/src/person_mention_view.rs b/crates/db_views_actor/src/person_mention_view.rs index 1de01491f..5e6e3df3f 100644 --- a/crates/db_views_actor/src/person_mention_view.rs +++ b/crates/db_views_actor/src/person_mention_view.rs @@ -1,14 +1,9 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{ +use lemmy_db_schema::{ aggregates::comment_aggregates::CommentAggregates, functions::hot_rank, limit_and_offset, - MaybeOptional, - SortType, - ToSafe, - ViewToVec, -}; -use lemmy_db_schema::{ + newtypes::{PersonId, PersonMentionId}, schema::{ comment, comment_aggregates, @@ -31,8 +26,8 @@ use lemmy_db_schema::{ person_mention::PersonMention, post::Post, }, - PersonId, - PersonMentionId, + traits::{MaybeOptional, ToSafe, ViewToVec}, + SortType, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_actor/src/person_view.rs b/crates/db_views_actor/src/person_view.rs index 496ac672f..b6585196b 100644 --- a/crates/db_views_actor/src/person_view.rs +++ b/crates/db_views_actor/src/person_view.rs @@ -1,17 +1,13 @@ use diesel::{dsl::*, result::Error, *}; -use lemmy_db_queries::{ +use lemmy_db_schema::{ aggregates::person_aggregates::PersonAggregates, fuzzy_search, limit_and_offset, - MaybeOptional, - SortType, - ToSafe, - ViewToVec, -}; -use lemmy_db_schema::{ + newtypes::PersonId, schema::{person, person_aggregates}, source::person::{Person, PersonSafe}, - PersonId, + traits::{MaybeOptional, ToSafe, ViewToVec}, + SortType, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_moderator/Cargo.toml b/crates/db_views_moderator/Cargo.toml index 3511d07d3..3a0b707cf 100644 --- a/crates/db_views_moderator/Cargo.toml +++ b/crates/db_views_moderator/Cargo.toml @@ -11,7 +11,6 @@ documentation = "https://join-lemmy.org/docs/en/index.html" doctest = false [dependencies] -lemmy_db_queries = { version = "=0.13.0", path = "../db_queries" } lemmy_db_schema = { version = "=0.13.0", path = "../db_schema" } diesel = { version = "1.4.8", features = ["postgres","chrono","r2d2","serde_json"] } serde = { version = "1.0.130", features = ["derive"] } diff --git a/crates/db_views_moderator/src/mod_add_community_view.rs b/crates/db_views_moderator/src/mod_add_community_view.rs index f5fe8af11..b0d72d21a 100644 --- a/crates/db_views_moderator/src/mod_add_community_view.rs +++ b/crates/db_views_moderator/src/mod_add_community_view.rs @@ -1,14 +1,14 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{limit_and_offset, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::{CommunityId, PersonId}, schema::{community, mod_add_community, person, person_alias_1}, source::{ community::{Community, CommunitySafe}, moderator::ModAddCommunity, person::{Person, PersonAlias1, PersonSafe, PersonSafeAlias1}, }, - CommunityId, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_moderator/src/mod_add_view.rs b/crates/db_views_moderator/src/mod_add_view.rs index 0ac915539..bd4e388b3 100644 --- a/crates/db_views_moderator/src/mod_add_view.rs +++ b/crates/db_views_moderator/src/mod_add_view.rs @@ -1,12 +1,13 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{limit_and_offset, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::PersonId, schema::{mod_add, person, person_alias_1}, source::{ moderator::ModAdd, person::{Person, PersonAlias1, PersonSafe, PersonSafeAlias1}, }, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_moderator/src/mod_ban_from_community_view.rs b/crates/db_views_moderator/src/mod_ban_from_community_view.rs index d67f82dfe..a5a37cce1 100644 --- a/crates/db_views_moderator/src/mod_ban_from_community_view.rs +++ b/crates/db_views_moderator/src/mod_ban_from_community_view.rs @@ -1,14 +1,14 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{limit_and_offset, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::{CommunityId, PersonId}, schema::{community, mod_ban_from_community, person, person_alias_1}, source::{ community::{Community, CommunitySafe}, moderator::ModBanFromCommunity, person::{Person, PersonAlias1, PersonSafe, PersonSafeAlias1}, }, - CommunityId, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_moderator/src/mod_ban_view.rs b/crates/db_views_moderator/src/mod_ban_view.rs index 79a199cb0..fabb56ca9 100644 --- a/crates/db_views_moderator/src/mod_ban_view.rs +++ b/crates/db_views_moderator/src/mod_ban_view.rs @@ -1,12 +1,13 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{limit_and_offset, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::PersonId, schema::{mod_ban, person, person_alias_1}, source::{ moderator::ModBan, person::{Person, PersonAlias1, PersonSafe, PersonSafeAlias1}, }, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_moderator/src/mod_lock_post_view.rs b/crates/db_views_moderator/src/mod_lock_post_view.rs index 8774bfbd4..5ec355791 100644 --- a/crates/db_views_moderator/src/mod_lock_post_view.rs +++ b/crates/db_views_moderator/src/mod_lock_post_view.rs @@ -1,6 +1,7 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{limit_and_offset, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::{CommunityId, PersonId}, schema::{community, mod_lock_post, person, post}, source::{ community::{Community, CommunitySafe}, @@ -8,8 +9,7 @@ use lemmy_db_schema::{ person::{Person, PersonSafe}, post::Post, }, - CommunityId, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_moderator/src/mod_remove_comment_view.rs b/crates/db_views_moderator/src/mod_remove_comment_view.rs index 9cf9862e1..abb88020a 100644 --- a/crates/db_views_moderator/src/mod_remove_comment_view.rs +++ b/crates/db_views_moderator/src/mod_remove_comment_view.rs @@ -1,6 +1,7 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{limit_and_offset, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::{CommunityId, PersonId}, schema::{comment, community, mod_remove_comment, person, person_alias_1, post}, source::{ comment::Comment, @@ -9,8 +10,7 @@ use lemmy_db_schema::{ person::{Person, PersonAlias1, PersonSafe, PersonSafeAlias1}, post::Post, }, - CommunityId, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_moderator/src/mod_remove_community_view.rs b/crates/db_views_moderator/src/mod_remove_community_view.rs index 7196aec6b..6634b2ff8 100644 --- a/crates/db_views_moderator/src/mod_remove_community_view.rs +++ b/crates/db_views_moderator/src/mod_remove_community_view.rs @@ -1,13 +1,14 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{limit_and_offset, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::PersonId, schema::{community, mod_remove_community, person}, source::{ community::{Community, CommunitySafe}, moderator::ModRemoveCommunity, person::{Person, PersonSafe}, }, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_moderator/src/mod_remove_post_view.rs b/crates/db_views_moderator/src/mod_remove_post_view.rs index d83f95b46..c92191610 100644 --- a/crates/db_views_moderator/src/mod_remove_post_view.rs +++ b/crates/db_views_moderator/src/mod_remove_post_view.rs @@ -1,6 +1,7 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{limit_and_offset, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::{CommunityId, PersonId}, schema::{community, mod_remove_post, person, post}, source::{ community::{Community, CommunitySafe}, @@ -8,8 +9,7 @@ use lemmy_db_schema::{ person::{Person, PersonSafe}, post::Post, }, - CommunityId, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_moderator/src/mod_sticky_post_view.rs b/crates/db_views_moderator/src/mod_sticky_post_view.rs index f1dfcb144..55593e4fc 100644 --- a/crates/db_views_moderator/src/mod_sticky_post_view.rs +++ b/crates/db_views_moderator/src/mod_sticky_post_view.rs @@ -1,6 +1,7 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{limit_and_offset, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::{CommunityId, PersonId}, schema::{community, mod_sticky_post, person, post}, source::{ community::{Community, CommunitySafe}, @@ -8,8 +9,7 @@ use lemmy_db_schema::{ person::{Person, PersonSafe}, post::Post, }, - CommunityId, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/db_views_moderator/src/mod_transfer_community_view.rs b/crates/db_views_moderator/src/mod_transfer_community_view.rs index 9fcc481be..2fbacbb83 100644 --- a/crates/db_views_moderator/src/mod_transfer_community_view.rs +++ b/crates/db_views_moderator/src/mod_transfer_community_view.rs @@ -1,14 +1,14 @@ use diesel::{result::Error, *}; -use lemmy_db_queries::{limit_and_offset, ToSafe, ViewToVec}; use lemmy_db_schema::{ + limit_and_offset, + newtypes::{CommunityId, PersonId}, schema::{community, mod_transfer_community, person, person_alias_1}, source::{ community::{Community, CommunitySafe}, moderator::ModTransferCommunity, person::{Person, PersonAlias1, PersonSafe, PersonSafeAlias1}, }, - CommunityId, - PersonId, + traits::{ToSafe, ViewToVec}, }; use serde::{Deserialize, Serialize}; diff --git a/crates/routes/Cargo.toml b/crates/routes/Cargo.toml index dfa8c9482..65dcb8cda 100644 --- a/crates/routes/Cargo.toml +++ b/crates/routes/Cargo.toml @@ -13,7 +13,6 @@ doctest = false [dependencies] lemmy_utils = { version = "=0.13.0", path = "../utils" } lemmy_websocket = { version = "=0.13.0", path = "../websocket" } -lemmy_db_queries = { version = "=0.13.0", path = "../db_queries" } lemmy_db_views = { version = "=0.13.0", path = "../db_views" } lemmy_db_views_actor = { version = "=0.13.0", path = "../db_views_actor" } lemmy_db_schema = { version = "=0.13.0", path = "../db_schema" } diff --git a/crates/routes/src/feeds.rs b/crates/routes/src/feeds.rs index a02b5fe33..1a85a10ac 100644 --- a/crates/routes/src/feeds.rs +++ b/crates/routes/src/feeds.rs @@ -3,16 +3,13 @@ use anyhow::anyhow; use chrono::{DateTime, NaiveDateTime, Utc}; use diesel::PgConnection; use lemmy_api_common::blocking; -use lemmy_db_queries::{ - source::{community::Community_, person::Person_}, - Crud, +use lemmy_db_schema::{ + newtypes::LocalUserId, + source::{community::Community, local_user::LocalUser, person::Person}, + traits::Crud, ListingType, SortType, }; -use lemmy_db_schema::{ - source::{community::Community, local_user::LocalUser, person::Person}, - LocalUserId, -}; use lemmy_db_views::{ comment_view::{CommentQueryBuilder, CommentView}, post_view::{PostQueryBuilder, PostView}, diff --git a/crates/routes/src/webfinger.rs b/crates/routes/src/webfinger.rs index 798636da5..ef0afd990 100644 --- a/crates/routes/src/webfinger.rs +++ b/crates/routes/src/webfinger.rs @@ -2,7 +2,6 @@ use actix_web::{error::ErrorBadRequest, web::Query, *}; use anyhow::anyhow; use lemmy_api_common::blocking; use lemmy_apub_lib::webfinger::{WebfingerLink, WebfingerResponse}; -use lemmy_db_queries::source::{community::Community_, person::Person_}; use lemmy_db_schema::source::{community::Community, person::Person}; use lemmy_utils::{settings::structs::Settings, LemmyError}; use lemmy_websocket::LemmyContext; diff --git a/crates/utils/src/settings/mod.rs b/crates/utils/src/settings/mod.rs index 6678b91f5..40dd91664 100644 --- a/crates/utils/src/settings/mod.rs +++ b/crates/utils/src/settings/mod.rs @@ -27,7 +27,7 @@ impl Settings { /// Reads config from configuration file. /// /// Note: The env var `LEMMY_DATABASE_URL` is parsed in - /// `lemmy_db_queries/src/lib.rs::get_database_url_from_env()` + /// `lemmy_db_schema/src/lib.rs::get_database_url_from_env()` /// Warning: Only call this once. pub fn init() -> Result { // Read the config file diff --git a/crates/websocket/Cargo.toml b/crates/websocket/Cargo.toml index cab4da439..c7d5f3a60 100644 --- a/crates/websocket/Cargo.toml +++ b/crates/websocket/Cargo.toml @@ -15,7 +15,6 @@ doctest = false [dependencies] lemmy_utils = { version = "=0.13.0", path = "../utils" } lemmy_api_common = { version = "=0.13.0", path = "../api_common" } -lemmy_db_queries = { version = "=0.13.0", path = "../db_queries" } lemmy_db_schema = { version = "=0.13.0", path = "../db_schema" } lemmy_db_views = { version = "=0.13.0", path = "../db_views" } lemmy_db_views_actor = { version = "=0.13.0", path = "../db_views_actor" } diff --git a/crates/websocket/src/chat_server.rs b/crates/websocket/src/chat_server.rs index db09ac95e..3e17b6262 100644 --- a/crates/websocket/src/chat_server.rs +++ b/crates/websocket/src/chat_server.rs @@ -14,7 +14,10 @@ use diesel::{ PgConnection, }; use lemmy_api_common::{comment::*, post::*}; -use lemmy_db_schema::{source::secret::Secret, CommunityId, LocalUserId, PostId}; +use lemmy_db_schema::{ + newtypes::{CommunityId, LocalUserId, PostId}, + source::secret::Secret, +}; use lemmy_utils::{ location_info, rate_limit::RateLimit, diff --git a/crates/websocket/src/lib.rs b/crates/websocket/src/lib.rs index e9f488741..fbf9d25a3 100644 --- a/crates/websocket/src/lib.rs +++ b/crates/websocket/src/lib.rs @@ -4,8 +4,7 @@ extern crate strum_macros; use crate::chat_server::ChatServer; use actix::Addr; use background_jobs::QueueHandle; -use lemmy_db_queries::DbPool; -use lemmy_db_schema::source::secret::Secret; +use lemmy_db_schema::{source::secret::Secret, DbPool}; use lemmy_utils::{settings::structs::Settings, LemmyError}; use reqwest::Client; use serde::Serialize; diff --git a/crates/websocket/src/messages.rs b/crates/websocket/src/messages.rs index 3c16ec273..4192b5402 100644 --- a/crates/websocket/src/messages.rs +++ b/crates/websocket/src/messages.rs @@ -1,7 +1,7 @@ use crate::UserOperation; use actix::{prelude::*, Recipient}; use lemmy_api_common::{comment::CommentResponse, post::PostResponse}; -use lemmy_db_schema::{CommunityId, LocalUserId, PostId}; +use lemmy_db_schema::newtypes::{CommunityId, LocalUserId, PostId}; use lemmy_utils::{ConnectionId, IpAddr}; use serde::{Deserialize, Serialize}; diff --git a/crates/websocket/src/send.rs b/crates/websocket/src/send.rs index a49759d63..5982e24ce 100644 --- a/crates/websocket/src/send.rs +++ b/crates/websocket/src/send.rs @@ -10,8 +10,10 @@ use lemmy_api_common::{ person::PrivateMessageResponse, post::PostResponse, }; -use lemmy_db_queries::DeleteableOrRemoveable; -use lemmy_db_schema::{CommentId, CommunityId, LocalUserId, PersonId, PostId, PrivateMessageId}; +use lemmy_db_schema::{ + newtypes::{CommentId, CommunityId, LocalUserId, PersonId, PostId, PrivateMessageId}, + traits::DeleteableOrRemoveable, +}; use lemmy_db_views::{ comment_view::CommentView, local_user_view::LocalUserView, diff --git a/docker/dev/docker-compose.yml b/docker/dev/docker-compose.yml index 2474c74d6..e1ea333ad 100644 --- a/docker/dev/docker-compose.yml +++ b/docker/dev/docker-compose.yml @@ -18,7 +18,7 @@ services: - "8536:8536" restart: always environment: - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_queries=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" + - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" volumes: - ../lemmy.hjson:/config/config.hjson depends_on: diff --git a/docker/federation/docker-compose.yml b/docker/federation/docker-compose.yml index 55b3877cc..3a8447c1a 100644 --- a/docker/federation/docker-compose.yml +++ b/docker/federation/docker-compose.yml @@ -42,7 +42,7 @@ services: environment: - APUB_TESTING_SEND_SYNC - RUST_BACKTRACE=1 - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_queries=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" + - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" depends_on: - postgres_alpha ports: @@ -71,7 +71,7 @@ services: environment: - APUB_TESTING_SEND_SYNC - RUST_BACKTRACE=1 - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_queries=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" + - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" depends_on: - postgres_beta ports: @@ -100,7 +100,7 @@ services: environment: - APUB_TESTING_SEND_SYNC - RUST_BACKTRACE=1 - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_queries=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" + - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" depends_on: - postgres_gamma ports: @@ -130,7 +130,7 @@ services: environment: - APUB_TESTING_SEND_SYNC - RUST_BACKTRACE=1 - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_queries=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" + - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" depends_on: - postgres_delta ports: @@ -160,7 +160,7 @@ services: environment: - APUB_TESTING_SEND_SYNC - RUST_BACKTRACE=1 - - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_queries=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" + - RUST_LOG="warn,lemmy_server=debug,lemmy_api=debug,lemmy_api_common=debug,lemmy_api_crud=debug,lemmy_apub=debug,lemmy_db_schema=debug,lemmy_db_views=debug,lemmy_db_views_actor=debug,lemmy_db_views_moderator=debug,lemmy_routes=debug,lemmy_utils=debug,lemmy_websocket=debug" depends_on: - postgres_epsilon ports: diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml index a9d7e613f..2b39ab18a 100644 --- a/docker/prod/docker-compose.yml +++ b/docker/prod/docker-compose.yml @@ -17,7 +17,7 @@ services: - "127.0.0.1:8536:8536" restart: always environment: - - RUST_LOG="warn,lemmy_server=info,lemmy_api=info,lemmy_api_common=info,lemmy_api_crud=info,lemmy_apub=info,lemmy_db_queries=info,lemmy_db_schema=info,lemmy_db_views=info,lemmy_db_views_actor=info,lemmy_db_views_moderator=info,lemmy_routes=info,lemmy_utils=info,lemmy_websocket=info" + - RUST_LOG="warn,lemmy_server=info,lemmy_api=info,lemmy_api_common=info,lemmy_api_crud=info,lemmy_apub=info,lemmy_db_schema=info,lemmy_db_views=info,lemmy_db_views_actor=info,lemmy_db_views_moderator=info,lemmy_routes=info,lemmy_utils=info,lemmy_websocket=info" volumes: - ./lemmy.hjson:/config/config.hjson depends_on: diff --git a/src/code_migrations.rs b/src/code_migrations.rs index 1f9381986..8910733a5 100644 --- a/src/code_migrations.rs +++ b/src/code_migrations.rs @@ -10,10 +10,6 @@ use lemmy_apub::{ generate_shared_inbox_url, EndpointType, }; -use lemmy_db_queries::{ - source::{comment::Comment_, post::Post_, private_message::PrivateMessage_}, - Crud, -}; use lemmy_db_schema::{ naive_now, source::{ @@ -23,6 +19,7 @@ use lemmy_db_schema::{ post::Post, private_message::PrivateMessage, }, + traits::Crud, }; use lemmy_utils::{apub::generate_actor_keypair, LemmyError}; use log::info; diff --git a/src/main.rs b/src/main.rs index 483b17415..c078e7860 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,8 +12,7 @@ use lemmy_api::match_websocket_operation; use lemmy_api_common::blocking; use lemmy_api_crud::match_websocket_operation_crud; use lemmy_apub_lib::activity_queue::create_activity_queue; -use lemmy_db_queries::{get_database_url_from_env, source::secret::Secret_}; -use lemmy_db_schema::source::secret::Secret; +use lemmy_db_schema::{get_database_url_from_env, source::secret::Secret}; use lemmy_routes::{feeds, images, nodeinfo, webfinger}; use lemmy_server::{api_routes, code_migrations::run_advanced_migrations, scheduled_tasks}; use lemmy_utils::{ diff --git a/src/scheduled_tasks.rs b/src/scheduled_tasks.rs index 5c406ff6d..396c7b675 100644 --- a/src/scheduled_tasks.rs +++ b/src/scheduled_tasks.rs @@ -2,8 +2,7 @@ use clokwerk::{Scheduler, TimeUnits}; // Import week days and WeekDay use diesel::{sql_query, PgConnection, RunQueryDsl}; -use lemmy_db_queries::{source::activity::Activity_, DbPool}; -use lemmy_db_schema::source::activity::Activity; +use lemmy_db_schema::{source::activity::Activity, DbPool}; use log::info; use std::{thread, time::Duration};