diff --git a/geneit_backend/migrations/2023-05-24-102711_create_users/down.sql b/geneit_backend/migrations/2023-05-24-102711_create_users/down.sql index 10bdd70..b3f62b9 100644 --- a/geneit_backend/migrations/2023-05-24-102711_create_users/down.sql +++ b/geneit_backend/migrations/2023-05-24-102711_create_users/down.sql @@ -1,4 +1,5 @@ -- This file should undo anything in `up.sql` +drop view if exists families_memberships ; DROP table IF EXISTS memberships ; DROP table IF EXISTS families; DROP table IF EXISTS users; \ No newline at end of file diff --git a/geneit_backend/migrations/2023-05-24-102711_create_users/up.sql b/geneit_backend/migrations/2023-05-24-102711_create_users/up.sql index 75bd7a1..e0dde54 100644 --- a/geneit_backend/migrations/2023-05-24-102711_create_users/up.sql +++ b/geneit_backend/migrations/2023-05-24-102711_create_users/up.sql @@ -28,4 +28,44 @@ CREATE TABLE memberships ( is_admin BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY(user_id, family_id) -); \ No newline at end of file +); + +-- Create views +create view + families_memberships +as +select + m.user_id , + m.family_id, + m.is_admin , + f."name", + f.time_create, + f.invitation_code, + cm.num as count_members, + ca.num as count_admins +from + memberships m +left join families f on + f.id = m.family_id + -- count members +left join ( + select + family_id , + count(*) as num + from + memberships m + group by + family_id) cm on + cm.family_id = m.family_id + -- count admins +left join ( + select + family_id , + count(*) as num + from + memberships m + where + m.is_admin = true + group by + family_id) ca on + ca.family_id = m.family_id \ No newline at end of file diff --git a/geneit_backend/src/lib.rs b/geneit_backend/src/lib.rs index 9d4a2cb..b244aba 100644 --- a/geneit_backend/src/lib.rs +++ b/geneit_backend/src/lib.rs @@ -5,5 +5,6 @@ pub mod controllers; pub mod services; pub mod utils; +pub mod manual_schema; pub mod models; pub mod schema; diff --git a/geneit_backend/src/manual_schema.rs b/geneit_backend/src/manual_schema.rs new file mode 100644 index 0000000..c3adaee --- /dev/null +++ b/geneit_backend/src/manual_schema.rs @@ -0,0 +1,12 @@ +diesel::table! { + families_memberships (user_id, family_id) { + user_id -> Int4, + family_id -> Int4, + name -> Varchar, + time_create -> Int8, + is_admin -> Bool, + invitation_code -> Varchar, + count_members -> Int4, + count_admins -> Int4, + } +}