]> Untitled Git - lemmy.git/blob - lemmy_db/src/site.rs
Isomorphic docker (#1124)
[lemmy.git] / lemmy_db / src / site.rs
1 use crate::{naive_now, schema::site, Crud};
2 use diesel::{dsl::*, result::Error, *};
3
4 #[derive(Queryable, Identifiable, PartialEq, Debug)]
5 #[table_name = "site"]
6 pub struct Site {
7   pub id: i32,
8   pub name: String,
9   pub description: Option<String>,
10   pub creator_id: i32,
11   pub published: chrono::NaiveDateTime,
12   pub updated: Option<chrono::NaiveDateTime>,
13   pub enable_downvotes: bool,
14   pub open_registration: bool,
15   pub enable_nsfw: bool,
16   pub icon: Option<String>,
17   pub banner: Option<String>,
18 }
19
20 #[derive(Insertable, AsChangeset)]
21 #[table_name = "site"]
22 pub struct SiteForm {
23   pub name: String,
24   pub description: Option<String>,
25   pub creator_id: i32,
26   pub updated: Option<chrono::NaiveDateTime>,
27   pub enable_downvotes: bool,
28   pub open_registration: bool,
29   pub enable_nsfw: bool,
30   // when you want to null out a column, you have to send Some(None)), since sending None means you just don't want to update that column.
31   pub icon: Option<Option<String>>,
32   pub banner: Option<Option<String>>,
33 }
34
35 impl Crud<SiteForm> for Site {
36   fn read(conn: &PgConnection, _site_id: i32) -> Result<Self, Error> {
37     use crate::schema::site::dsl::*;
38     site.first::<Self>(conn)
39   }
40
41   fn create(conn: &PgConnection, new_site: &SiteForm) -> Result<Self, Error> {
42     use crate::schema::site::dsl::*;
43     insert_into(site).values(new_site).get_result::<Self>(conn)
44   }
45
46   fn update(conn: &PgConnection, site_id: i32, new_site: &SiteForm) -> Result<Self, Error> {
47     use crate::schema::site::dsl::*;
48     diesel::update(site.find(site_id))
49       .set(new_site)
50       .get_result::<Self>(conn)
51   }
52 }
53
54 impl Site {
55   pub fn transfer(conn: &PgConnection, new_creator_id: i32) -> Result<Self, Error> {
56     use crate::schema::site::dsl::*;
57     diesel::update(site.find(1))
58       .set((creator_id.eq(new_creator_id), updated.eq(naive_now())))
59       .get_result::<Self>(conn)
60   }
61 }