diff --git a/server/migrations/2020-04-07-135912_add_user_community_apub_constraints/down.sql b/server/migrations/2020-04-07-135912_add_user_community_apub_constraints/down.sql new file mode 100644 index 000000000..faf24fdce --- /dev/null +++ b/server/migrations/2020-04-07-135912_add_user_community_apub_constraints/down.sql @@ -0,0 +1,36 @@ +-- User table +drop view user_view cascade; + +alter table user_ +add column fedi_name varchar(40) not null default 'changeme'; + +alter table user_ +add constraint user__name_fedi_name_key unique (name, fedi_name); + +-- Community +alter table community +add constraint community_name_key unique (name); + + +create view user_view as +select +u.id, +u.name, +u.avatar, +u.email, +u.matrix_user_id, +u.fedi_name, +u.admin, +u.banned, +u.show_avatars, +u.send_notifications_to_email, +u.published, +(select count(*) from post p where p.creator_id = u.id) as number_of_posts, +(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score, +(select count(*) from comment c where c.creator_id = u.id) as number_of_comments, +(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score +from user_ u; + +create materialized view user_mview as select * from user_view; + +create unique index idx_user_mview_id on user_mview (id); diff --git a/server/migrations/2020-04-07-135912_add_user_community_apub_constraints/up.sql b/server/migrations/2020-04-07-135912_add_user_community_apub_constraints/up.sql new file mode 100644 index 000000000..de65191d8 --- /dev/null +++ b/server/migrations/2020-04-07-135912_add_user_community_apub_constraints/up.sql @@ -0,0 +1,38 @@ +-- User table + +-- Need to regenerate user_view, user_mview +drop view user_view cascade; + +-- Remove the fedi_name constraint, drop that useless column +alter table user_ +drop constraint user__name_fedi_name_key; + +alter table user_ +drop column fedi_name; + +-- Community +alter table community +drop constraint community_name_key; + +create view user_view as +select +u.id, +u.name, +u.avatar, +u.email, +u.matrix_user_id, +u.admin, +u.banned, +u.show_avatars, +u.send_notifications_to_email, +u.published, +(select count(*) from post p where p.creator_id = u.id) as number_of_posts, +(select coalesce(sum(score), 0) from post p, post_like pl where u.id = p.creator_id and p.id = pl.post_id) as post_score, +(select count(*) from comment c where c.creator_id = u.id) as number_of_comments, +(select coalesce(sum(score), 0) from comment c, comment_like cl where u.id = c.creator_id and c.id = cl.comment_id) as comment_score +from user_ u; + +create materialized view user_mview as select * from user_view; + +create unique index idx_user_mview_id on user_mview (id); + diff --git a/server/src/api/user.rs b/server/src/api/user.rs index 629ce8e5a..dda1d9ade 100644 --- a/server/src/api/user.rs +++ b/server/src/api/user.rs @@ -256,7 +256,6 @@ impl Perform for Oper { // Register the new user let user_form = UserForm { name: data.username.to_owned(), - fedi_name: Settings::get().hostname.to_owned(), email: data.email.to_owned(), matrix_user_id: None, avatar: None, @@ -404,7 +403,6 @@ impl Perform for Oper { let user_form = UserForm { name: read_user.name, - fedi_name: read_user.fedi_name, email, matrix_user_id: data.matrix_user_id.to_owned(), avatar: data.avatar.to_owned(), diff --git a/server/src/apub/mod.rs b/server/src/apub/mod.rs index f2e5a56f3..fd5cd4c78 100644 --- a/server/src/apub/mod.rs +++ b/server/src/apub/mod.rs @@ -34,10 +34,10 @@ pub enum EndpointType { // and have it fetch the object. pub fn make_apub_endpoint(endpoint_type: EndpointType, name: &str) -> Url { let point = match endpoint_type { - EndpointType::Community => "c", - EndpointType::User => "u", - EndpointType::Post => "p", - EndpointType::Comment => todo!(), + EndpointType::Community => "community", + EndpointType::User => "user", + EndpointType::Post => "post", + EndpointType::Comment => "comment", }; Url::parse(&format!( diff --git a/server/src/db/code_migrations.rs b/server/src/db/code_migrations.rs index 2fdf03d51..3575462ef 100644 --- a/server/src/db/code_migrations.rs +++ b/server/src/db/code_migrations.rs @@ -33,7 +33,6 @@ fn user_updates_2020_04_02(conn: &PgConnection) -> Result<(), Error> { let form = UserForm { name: cuser.name.to_owned(), - fedi_name: cuser.fedi_name.to_owned(), email: cuser.email.to_owned(), matrix_user_id: cuser.matrix_user_id.to_owned(), avatar: cuser.avatar.to_owned(), diff --git a/server/src/db/comment.rs b/server/src/db/comment.rs index 7550f072e..4925aabcd 100644 --- a/server/src/db/comment.rs +++ b/server/src/db/comment.rs @@ -207,7 +207,6 @@ mod tests { let new_user = UserForm { name: "terry".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, diff --git a/server/src/db/comment_view.rs b/server/src/db/comment_view.rs index f0ca72318..bbeeecdec 100644 --- a/server/src/db/comment_view.rs +++ b/server/src/db/comment_view.rs @@ -434,7 +434,6 @@ mod tests { let new_user = UserForm { name: "timmy".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, diff --git a/server/src/db/community.rs b/server/src/db/community.rs index 08354d420..159157159 100644 --- a/server/src/db/community.rs +++ b/server/src/db/community.rs @@ -231,7 +231,6 @@ mod tests { let new_user = UserForm { name: "bobbee".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, diff --git a/server/src/db/moderator.rs b/server/src/db/moderator.rs index 01acc25e5..882621120 100644 --- a/server/src/db/moderator.rs +++ b/server/src/db/moderator.rs @@ -438,7 +438,6 @@ mod tests { let new_mod = UserForm { name: "the mod".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, @@ -466,7 +465,6 @@ mod tests { let new_user = UserForm { name: "jim2".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, diff --git a/server/src/db/password_reset_request.rs b/server/src/db/password_reset_request.rs index c9d18e1cf..ea8b2964a 100644 --- a/server/src/db/password_reset_request.rs +++ b/server/src/db/password_reset_request.rs @@ -88,7 +88,6 @@ mod tests { let new_user = UserForm { name: "thommy prw".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, diff --git a/server/src/db/post.rs b/server/src/db/post.rs index b0b9bddc0..469fa8196 100644 --- a/server/src/db/post.rs +++ b/server/src/db/post.rs @@ -240,7 +240,6 @@ mod tests { let new_user = UserForm { name: "jim".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, diff --git a/server/src/db/post_view.rs b/server/src/db/post_view.rs index 29ff2f1bd..420e46df1 100644 --- a/server/src/db/post_view.rs +++ b/server/src/db/post_view.rs @@ -359,7 +359,6 @@ mod tests { let new_user = UserForm { name: user_name.to_owned(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, diff --git a/server/src/db/private_message.rs b/server/src/db/private_message.rs index 18ec4963b..63607547f 100644 --- a/server/src/db/private_message.rs +++ b/server/src/db/private_message.rs @@ -65,7 +65,6 @@ mod tests { let creator_form = UserForm { name: "creator_pm".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, @@ -93,7 +92,6 @@ mod tests { let recipient_form = UserForm { name: "recipient_pm".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, diff --git a/server/src/db/user.rs b/server/src/db/user.rs index 1669d722c..7b10d874a 100644 --- a/server/src/db/user.rs +++ b/server/src/db/user.rs @@ -10,7 +10,6 @@ use jsonwebtoken::{decode, encode, DecodingKey, EncodingKey, Header, TokenData, pub struct User_ { pub id: i32, pub name: String, - pub fedi_name: String, pub preferred_username: Option, pub password_encrypted: String, pub email: Option, @@ -39,7 +38,6 @@ pub struct User_ { #[table_name = "user_"] pub struct UserForm { pub name: String, - pub fedi_name: String, pub preferred_username: Option, pub password_encrypted: String, pub admin: bool, @@ -157,7 +155,7 @@ impl User_ { let my_claims = Claims { id: self.id, username: self.name.to_owned(), - iss: self.fedi_name.to_owned(), + iss: Settings::get().hostname.to_owned(), show_nsfw: self.show_nsfw, theme: self.theme.to_owned(), default_sort_type: self.default_sort_type, @@ -214,7 +212,6 @@ mod tests { let new_user = UserForm { name: "thommy".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, @@ -243,7 +240,6 @@ mod tests { let expected_user = User_ { id: inserted_user.id, name: "thommy".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, diff --git a/server/src/db/user_mention.rs b/server/src/db/user_mention.rs index 801df6fe3..20eed23e4 100644 --- a/server/src/db/user_mention.rs +++ b/server/src/db/user_mention.rs @@ -64,7 +64,6 @@ mod tests { let new_user = UserForm { name: "terrylake".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, @@ -92,7 +91,6 @@ mod tests { let recipient_form = UserForm { name: "terrylakes recipient".into(), - fedi_name: "rrf".into(), preferred_username: None, password_encrypted: "nope".into(), email: None, diff --git a/server/src/db/user_view.rs b/server/src/db/user_view.rs index 2274ecbdf..efd844685 100644 --- a/server/src/db/user_view.rs +++ b/server/src/db/user_view.rs @@ -9,7 +9,6 @@ table! { avatar -> Nullable, email -> Nullable, matrix_user_id -> Nullable, - fedi_name -> Varchar, admin -> Bool, banned -> Bool, show_avatars -> Bool, @@ -29,7 +28,6 @@ table! { avatar -> Nullable, email -> Nullable, matrix_user_id -> Nullable, - fedi_name -> Varchar, admin -> Bool, banned -> Bool, show_avatars -> Bool, @@ -52,7 +50,6 @@ pub struct UserView { pub avatar: Option, pub email: Option, pub matrix_user_id: Option, - pub fedi_name: String, pub admin: bool, pub banned: bool, pub show_avatars: bool, diff --git a/server/src/schema.rs b/server/src/schema.rs index 819fcd1c5..01c526c65 100644 --- a/server/src/schema.rs +++ b/server/src/schema.rs @@ -293,7 +293,6 @@ table! { user_ (id) { id -> Int4, name -> Varchar, - fedi_name -> Varchar, preferred_username -> Nullable, password_encrypted -> Text, email -> Nullable, diff --git a/ui/src/interfaces.ts b/ui/src/interfaces.ts index 0eeeac06d..283e1944f 100644 --- a/ui/src/interfaces.ts +++ b/ui/src/interfaces.ts @@ -102,7 +102,6 @@ export interface UserView { avatar?: string; email?: string; matrix_user_id?: string; - fedi_name: string; published: string; number_of_posts: number; post_score: number;