X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_schema%2Fsrc%2Fimpls%2Fsite.rs;h=60d2c013c2059fe8c3b4b21d2fadf0fbfaa386da;hb=dd865c5af5c53601a13b9d64a874c43b5560c3b1;hp=8a84bdfbbbf21a49c4dd2cbe2438840b72ceb6ab;hpb=f1aef631492dc8821cc3a3da527c2734a3de53c5;p=lemmy.git diff --git a/crates/db_schema/src/impls/site.rs b/crates/db_schema/src/impls/site.rs index 8a84bdfb..60d2c013 100644 --- a/crates/db_schema/src/impls/site.rs +++ b/crates/db_schema/src/impls/site.rs @@ -1,5 +1,6 @@ -use crate::{source::site::*, traits::Crud}; +use crate::{source::site::*, traits::Crud, DbUrl}; use diesel::{dsl::*, result::Error, *}; +use url::Url; impl Crud for Site { type Form = SiteForm; @@ -27,8 +28,35 @@ impl Crud for Site { } impl Site { - pub fn read_simple(conn: &PgConnection) -> Result { + pub fn read_local_site(conn: &PgConnection) -> Result { use crate::schema::site::dsl::*; - site.first::(conn) + site.order_by(id).first::(conn) + } + + pub fn upsert(conn: &PgConnection, site_form: &SiteForm) -> Result { + use crate::schema::site::dsl::*; + insert_into(site) + .values(site_form) + .on_conflict(actor_id) + .do_update() + .set(site_form) + .get_result::(conn) + } + + pub fn read_from_apub_id(conn: &PgConnection, object_id: Url) -> Result, Error> { + use crate::schema::site::dsl::*; + let object_id: DbUrl = object_id.into(); + Ok( + site + .filter(actor_id.eq(object_id)) + .first::(conn) + .ok() + .map(Into::into), + ) + } + + pub fn read_remote_sites(conn: &PgConnection) -> Result, Error> { + use crate::schema::site::dsl::*; + site.order_by(id).offset(1).get_results::(conn) } }