1 use crate::structs::{LocalUserSettingsView, LocalUserView};
2 use diesel::{result::Error, *};
4 aggregates::structs::PersonAggregates,
5 newtypes::{LocalUserId, PersonId},
6 schema::{local_user, person, person_aggregates},
8 local_user::{LocalUser, LocalUserSettings},
9 person::{Person, PersonSafe},
11 traits::{ToSafe, ToSafeSettings},
12 utils::functions::lower,
15 type LocalUserViewTuple = (LocalUser, Person, PersonAggregates);
18 pub fn read(conn: &mut PgConnection, local_user_id: LocalUserId) -> Result<Self, Error> {
19 let (local_user, person, counts) = local_user::table
21 .inner_join(person::table)
22 .inner_join(person_aggregates::table.on(person::id.eq(person_aggregates::person_id)))
24 local_user::all_columns,
26 person_aggregates::all_columns,
28 .first::<LocalUserViewTuple>(conn)?;
36 pub fn read_person(conn: &mut PgConnection, person_id: PersonId) -> Result<Self, Error> {
37 let (local_user, person, counts) = local_user::table
38 .filter(person::id.eq(person_id))
39 .inner_join(person::table)
40 .inner_join(person_aggregates::table.on(person::id.eq(person_aggregates::person_id)))
42 local_user::all_columns,
44 person_aggregates::all_columns,
46 .first::<LocalUserViewTuple>(conn)?;
54 // TODO check where this is used
55 pub fn read_from_name(conn: &mut PgConnection, name: &str) -> Result<Self, Error> {
56 let (local_user, person, counts) = local_user::table
57 .filter(person::name.eq(name))
58 .inner_join(person::table)
59 .inner_join(person_aggregates::table.on(person::id.eq(person_aggregates::person_id)))
61 local_user::all_columns,
63 person_aggregates::all_columns,
65 .first::<LocalUserViewTuple>(conn)?;
73 pub fn find_by_email_or_name(
74 conn: &mut PgConnection,
76 ) -> Result<Self, Error> {
77 let (local_user, person, counts) = local_user::table
78 .inner_join(person::table)
79 .inner_join(person_aggregates::table.on(person::id.eq(person_aggregates::person_id)))
82 .eq(lower(name_or_email))
83 .or(local_user::email.eq(name_or_email)),
86 local_user::all_columns,
88 person_aggregates::all_columns,
90 .first::<LocalUserViewTuple>(conn)?;
98 pub fn find_by_email(conn: &mut PgConnection, from_email: &str) -> Result<Self, Error> {
99 let (local_user, person, counts) = local_user::table
100 .inner_join(person::table)
101 .inner_join(person_aggregates::table.on(person::id.eq(person_aggregates::person_id)))
102 .filter(local_user::email.eq(from_email))
104 local_user::all_columns,
106 person_aggregates::all_columns,
108 .first::<LocalUserViewTuple>(conn)?;
117 type LocalUserSettingsViewTuple = (LocalUserSettings, PersonSafe, PersonAggregates);
119 impl LocalUserSettingsView {
120 pub fn read(conn: &mut PgConnection, local_user_id: LocalUserId) -> Result<Self, Error> {
121 let (local_user, person, counts) = local_user::table
123 .inner_join(person::table)
124 .inner_join(person_aggregates::table.on(person::id.eq(person_aggregates::person_id)))
126 LocalUser::safe_settings_columns_tuple(),
127 Person::safe_columns_tuple(),
128 person_aggregates::all_columns,
130 .first::<LocalUserSettingsViewTuple>(conn)?;