1 use diesel::{result::Error, *};
2 use lemmy_db_queries::{aggregates::person_aggregates::PersonAggregates, ToSafe, ToSafeSettings};
4 schema::{local_user, person, person_aggregates},
6 local_user::{LocalUser, LocalUserSettings},
7 person::{Person, PersonSafe},
12 #[derive(Debug, Serialize, Clone)]
13 pub struct LocalUserView {
15 pub counts: PersonAggregates,
16 pub local_user: LocalUser,
19 type LocalUserViewTuple = (Person, PersonAggregates, LocalUser);
22 pub fn read_person(conn: &PgConnection, person_id: i32) -> Result<Self, Error> {
23 let (person, counts, local_user) = person::table
25 .inner_join(person_aggregates::table)
26 .inner_join(local_user::table)
29 person_aggregates::all_columns,
30 local_user::all_columns,
32 .first::<LocalUserViewTuple>(conn)?;
40 // TODO check where this is used
41 pub fn read_from_name(conn: &PgConnection, name: &str) -> Result<Self, Error> {
42 let (person, counts, local_user) = person::table
43 .filter(person::name.eq(name))
44 .inner_join(person_aggregates::table)
45 .inner_join(local_user::table)
48 person_aggregates::all_columns,
49 local_user::all_columns,
51 .first::<LocalUserViewTuple>(conn)?;
59 pub fn find_by_email_or_name(conn: &PgConnection, name_or_email: &str) -> Result<Self, Error> {
60 let (person, counts, local_user) = person::table
61 .inner_join(person_aggregates::table)
62 .inner_join(local_user::table)
66 .or(local_user::email.ilike(name_or_email)),
70 person_aggregates::all_columns,
71 local_user::all_columns,
73 .first::<LocalUserViewTuple>(conn)?;
81 pub fn find_by_email(conn: &PgConnection, from_email: &str) -> Result<Self, Error> {
82 let (person, counts, local_user) = person::table
83 .inner_join(person_aggregates::table)
84 .inner_join(local_user::table)
85 .filter(local_user::email.eq(from_email))
88 person_aggregates::all_columns,
89 local_user::all_columns,
91 .first::<LocalUserViewTuple>(conn)?;
100 #[derive(Debug, Serialize, Clone)]
101 pub struct LocalUserSettingsView {
102 pub person: PersonSafe,
103 pub counts: PersonAggregates,
104 pub local_user: LocalUserSettings,
107 type LocalUserSettingsViewTuple = (PersonSafe, PersonAggregates, LocalUserSettings);
109 impl LocalUserSettingsView {
110 pub fn read(conn: &PgConnection, person_id: i32) -> Result<Self, Error> {
111 let (person, counts, local_user) = person::table
113 .inner_join(person_aggregates::table)
114 .inner_join(local_user::table)
116 Person::safe_columns_tuple(),
117 person_aggregates::all_columns,
118 LocalUser::safe_settings_columns_tuple(),
120 .first::<LocalUserSettingsViewTuple>(conn)?;