1 use crate::{ApubObject, Crud};
2 use chrono::NaiveDateTime;
3 use diesel::{dsl::*, result::Error, *};
6 schema::person::dsl::*,
7 source::person::{Person, PersonForm},
14 use lemmy_db_schema::{schema::person::columns::*, source::person::Person};
36 impl ToSafe for Person {
37 type SafeColumns = Columns;
38 fn safe_columns_tuple() -> Self::SafeColumns {
62 mod safe_type_alias_1 {
64 use lemmy_db_schema::{schema::person_alias_1::columns::*, source::person::PersonAlias1};
86 impl ToSafe for PersonAlias1 {
87 type SafeColumns = Columns;
88 fn safe_columns_tuple() -> Self::SafeColumns {
112 mod safe_type_alias_2 {
114 use lemmy_db_schema::{schema::person_alias_2::columns::*, source::person::PersonAlias2};
136 impl ToSafe for PersonAlias2 {
137 type SafeColumns = Columns;
138 fn safe_columns_tuple() -> Self::SafeColumns {
162 impl Crud for Person {
163 type Form = PersonForm;
164 type IdType = PersonId;
165 fn read(conn: &PgConnection, person_id: PersonId) -> Result<Self, Error> {
167 .filter(deleted.eq(false))
171 fn delete(conn: &PgConnection, person_id: PersonId) -> Result<usize, Error> {
172 diesel::delete(person.find(person_id)).execute(conn)
174 fn create(conn: &PgConnection, form: &PersonForm) -> Result<Self, Error> {
175 insert_into(person).values(form).get_result::<Self>(conn)
177 fn update(conn: &PgConnection, person_id: PersonId, form: &PersonForm) -> Result<Self, Error> {
178 diesel::update(person.find(person_id))
180 .get_result::<Self>(conn)
184 impl ApubObject for Person {
185 fn last_refreshed_at(&self) -> Option<NaiveDateTime> {
186 Some(self.last_refreshed_at)
189 fn read_from_apub_id(conn: &PgConnection, object_id: &DbUrl) -> Result<Self, Error> {
190 use lemmy_db_schema::schema::person::dsl::*;
192 .filter(deleted.eq(false))
193 .filter(actor_id.eq(object_id))
199 fn ban_person(conn: &PgConnection, person_id: PersonId, ban: bool) -> Result<Person, Error>;
200 fn add_admin(conn: &PgConnection, person_id: PersonId, added: bool) -> Result<Person, Error>;
201 fn find_by_name(conn: &PgConnection, name: &str) -> Result<Person, Error>;
202 fn mark_as_updated(conn: &PgConnection, person_id: PersonId) -> Result<Person, Error>;
203 fn delete_account(conn: &PgConnection, person_id: PersonId) -> Result<Person, Error>;
204 fn upsert(conn: &PgConnection, person_form: &PersonForm) -> Result<Person, Error>;
207 impl Person_ for Person {
208 fn ban_person(conn: &PgConnection, person_id: PersonId, ban: bool) -> Result<Self, Error> {
209 diesel::update(person.find(person_id))
211 .get_result::<Self>(conn)
214 fn add_admin(conn: &PgConnection, person_id: PersonId, added: bool) -> Result<Self, Error> {
215 diesel::update(person.find(person_id))
216 .set(admin.eq(added))
217 .get_result::<Self>(conn)
220 fn find_by_name(conn: &PgConnection, from_name: &str) -> Result<Person, Error> {
222 .filter(deleted.eq(false))
223 .filter(local.eq(true))
224 .filter(name.ilike(from_name))
225 .first::<Person>(conn)
228 fn mark_as_updated(conn: &PgConnection, person_id: PersonId) -> Result<Person, Error> {
229 diesel::update(person.find(person_id))
230 .set((last_refreshed_at.eq(naive_now()),))
231 .get_result::<Self>(conn)
234 fn delete_account(conn: &PgConnection, person_id: PersonId) -> Result<Person, Error> {
235 use lemmy_db_schema::schema::local_user;
237 // Set the local user info to none
238 diesel::update(local_user::table.filter(local_user::person_id.eq(person_id)))
240 local_user::email.eq::<Option<String>>(None),
241 local_user::validator_time.eq(naive_now()),
245 diesel::update(person.find(person_id))
247 display_name.eq::<Option<String>>(None),
248 bio.eq::<Option<String>>(None),
249 matrix_user_id.eq::<Option<String>>(None),
251 updated.eq(naive_now()),
253 .get_result::<Self>(conn)
256 fn upsert(conn: &PgConnection, person_form: &PersonForm) -> Result<Person, Error> {
259 .on_conflict(actor_id)
262 .get_result::<Self>(conn)
268 use crate::{establish_unpooled_connection, source::person::*};
272 let conn = establish_unpooled_connection();
274 let new_person = PersonForm {
275 name: "holly".into(),
276 ..PersonForm::default()
279 let inserted_person = Person::create(&conn, &new_person).unwrap();
281 let expected_person = Person {
282 id: inserted_person.id,
283 name: "holly".into(),
289 published: inserted_person.published,
291 actor_id: inserted_person.actor_id.to_owned(),
298 last_refreshed_at: inserted_person.published,
299 inbox_url: inserted_person.inbox_url.to_owned(),
300 shared_inbox_url: None,
301 matrix_user_id: None,
304 let read_person = Person::read(&conn, inserted_person.id).unwrap();
305 let updated_person = Person::update(&conn, inserted_person.id, &new_person).unwrap();
306 let num_deleted = Person::delete(&conn, inserted_person.id).unwrap();
308 assert_eq!(expected_person, read_person);
309 assert_eq!(expected_person, inserted_person);
310 assert_eq!(expected_person, updated_person);
311 assert_eq!(1, num_deleted);