X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_schema%2Fsrc%2Flib.rs;h=e3232c402e3feb42ab4ddfbb87700eee47d9f822;hb=9a5a13c734a1792511e1bfef7b9ac4121e0e7371;hp=b0733884ecd2b9269e3c79e1d7608d649e07274d;hpb=3d578f9df2ff3d3bfb084658e79219850ec6c10c;p=lemmy.git diff --git a/crates/db_schema/src/lib.rs b/crates/db_schema/src/lib.rs index b0733884..e3232c40 100644 --- a/crates/db_schema/src/lib.rs +++ b/crates/db_schema/src/lib.rs @@ -1,71 +1,196 @@ +#![recursion_limit = "256"] + +#[cfg(feature = "full")] #[macro_use] extern crate diesel; +#[cfg(feature = "full")] +#[macro_use] +extern crate diesel_derive_newtype; + +#[cfg(feature = "full")] +#[macro_use] +extern crate diesel_derive_enum; + +// this is used in tests +#[cfg(feature = "full")] +#[macro_use] +extern crate diesel_migrations; -use chrono::NaiveDateTime; -use diesel::{ - backend::Backend, - deserialize::FromSql, - serialize::{Output, ToSql}, - sql_types::Text, -}; -use serde::Serialize; -use std::{ - fmt::{Display, Formatter}, - io::Write, -}; +#[cfg(feature = "full")] +#[macro_use] +extern crate async_trait; +pub mod aggregates; +#[cfg(feature = "full")] +pub mod impls; +pub mod newtypes; +#[cfg(feature = "full")] +#[rustfmt::skip] +#[allow(clippy::wildcard_imports)] pub mod schema; +#[cfg(feature = "full")] +pub mod aliases { + use crate::schema::person; + diesel::alias!(person as person1: Person1, person as person2: Person2); +} pub mod source; +#[cfg(feature = "full")] +pub mod traits; +#[cfg(feature = "full")] +pub mod utils; + +use serde::{Deserialize, Serialize}; +use strum_macros::{Display, EnumString}; +#[cfg(feature = "full")] +use ts_rs::TS; -#[repr(transparent)] -#[derive(Clone, PartialEq, Serialize, Debug, AsExpression, FromSqlRow)] -#[sql_type = "Text"] -pub struct Url(url::Url); +#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)] +#[cfg_attr(feature = "full", derive(DbEnum, TS))] +#[cfg_attr( + feature = "full", + ExistingTypePath = "crate::schema::sql_types::SortTypeEnum" +)] +#[cfg_attr(feature = "full", DbValueStyle = "verbatim")] +#[cfg_attr(feature = "full", ts(export))] +/// The post sort types. See here for descriptions: https://join-lemmy.org/docs/en/users/03-votes-and-ranking.html +pub enum SortType { + Active, + Hot, + New, + Old, + TopDay, + TopWeek, + TopMonth, + TopYear, + TopAll, + MostComments, + NewComments, + TopHour, + TopSixHour, + TopTwelveHour, + TopThreeMonths, + TopSixMonths, + TopNineMonths, + Controversial, +} + +#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy)] +#[cfg_attr(feature = "full", derive(TS))] +#[cfg_attr(feature = "full", ts(export))] +/// The comment sort types. See here for descriptions: https://join-lemmy.org/docs/en/users/03-votes-and-ranking.html +pub enum CommentSortType { + Hot, + Top, + New, + Old, + Controversial, +} -impl ToSql for Url -where - String: ToSql, -{ - fn to_sql(&self, out: &mut Output) -> diesel::serialize::Result { - self.0.to_string().to_sql(out) - } +#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy)] +#[cfg_attr(feature = "full", derive(TS))] +#[cfg_attr(feature = "full", ts(export))] +/// The person sort types. See here for descriptions: https://join-lemmy.org/docs/en/users/03-votes-and-ranking.html +pub enum PersonSortType { + New, + Old, + MostComments, + CommentScore, + PostScore, + PostCount, } -impl FromSql for Url -where - String: FromSql, -{ - fn from_sql(bytes: Option<&DB::RawValue>) -> diesel::deserialize::Result { - let str = String::from_sql(bytes)?; - Ok(Url(url::Url::parse(&str)?)) - } +#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)] +#[cfg_attr(feature = "full", derive(DbEnum, TS))] +#[cfg_attr( + feature = "full", + ExistingTypePath = "crate::schema::sql_types::ListingTypeEnum" +)] +#[cfg_attr(feature = "full", DbValueStyle = "verbatim")] +#[cfg_attr(feature = "full", ts(export))] +/// A listing type for post and comment list fetches. +pub enum ListingType { + /// Content from your own site, as well as all connected / federated sites. + All, + /// Content from your site only. + Local, + /// Content only from communities you've subscribed to. + Subscribed, } -impl Url { - pub fn into_inner(self) -> url::Url { - self.0 - } +#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)] +#[cfg_attr(feature = "full", derive(DbEnum, TS))] +#[cfg_attr( + feature = "full", + ExistingTypePath = "crate::schema::sql_types::RegistrationModeEnum" +)] +#[cfg_attr(feature = "full", DbValueStyle = "verbatim")] +#[cfg_attr(feature = "full", ts(export))] +/// The registration mode for your site. Determines what happens after a user signs up. +pub enum RegistrationMode { + /// Closed to public. + Closed, + /// Open, but pending approval of a registration application. + RequireApplication, + /// Open to all. + Open, } -impl Display for Url { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - self.to_owned().into_inner().fmt(f) - } +#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy)] +#[cfg_attr(feature = "full", derive(TS))] +#[cfg_attr(feature = "full", ts(export))] +/// The type of content returned from a search. +pub enum SearchType { + All, + Comments, + Posts, + Communities, + Users, + Url, } -impl From for url::Url { - fn from(url: Url) -> Self { - url.0 - } +#[derive(EnumString, Display, Debug, PartialEq, Eq, Serialize, Deserialize, Clone, Copy)] +#[cfg_attr(feature = "full", derive(TS))] +#[cfg_attr(feature = "full", ts(export))] +/// A type / status for a community subscribe. +pub enum SubscribedType { + Subscribed, + NotSubscribed, + Pending, } -impl From for Url { - fn from(url: url::Url) -> Self { - Url(url) - } +#[derive(EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)] +#[cfg_attr(feature = "full", derive(TS))] +#[cfg_attr(feature = "full", ts(export))] +/// A list of possible types for the various modlog actions. +pub enum ModlogActionType { + All, + ModRemovePost, + ModLockPost, + ModFeaturePost, + ModRemoveComment, + ModRemoveCommunity, + ModBanFromCommunity, + ModAddCommunity, + ModTransferCommunity, + ModAdd, + ModBan, + ModHideCommunity, + AdminPurgePerson, + AdminPurgeCommunity, + AdminPurgePost, + AdminPurgeComment, } -// TODO: can probably move this back to lemmy_db_queries -pub fn naive_now() -> NaiveDateTime { - chrono::prelude::Utc::now().naive_utc() +#[derive( + EnumString, Display, Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq, +)] +#[cfg_attr(feature = "full", derive(TS))] +#[cfg_attr(feature = "full", ts(export))] +/// The feature type for a post. +pub enum PostFeatureType { + #[default] + /// Features to the top of your site. + Local, + /// Features to the top of the community. + Community, }