From 3004f571858250b27113adcb21db43086d78ba17 Mon Sep 17 00:00:00 2001 From: Pierre Hubert Date: Tue, 20 Jun 2023 18:55:14 +0200 Subject: [PATCH] Add route /family/list --- .../src/controllers/families_controller.rs | 5 +++++ geneit_backend/src/main.rs | 1 + geneit_backend/src/manual_schema.rs | 4 ++-- geneit_backend/src/models.rs | 12 ++++++++++++ geneit_backend/src/services/families_service.rs | 14 +++++++++++++- 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/geneit_backend/src/controllers/families_controller.rs b/geneit_backend/src/controllers/families_controller.rs index 3ee3980..f658661 100644 --- a/geneit_backend/src/controllers/families_controller.rs +++ b/geneit_backend/src/controllers/families_controller.rs @@ -63,3 +63,8 @@ pub async fn join( Ok(HttpResponse::Accepted().finish()) } + +/// Get the list of families of the user +pub async fn list(token: LoginToken) -> HttpResult { + Ok(HttpResponse::Ok().json(families_service::get_user_memberships(token.user_id).await?)) +} diff --git a/geneit_backend/src/main.rs b/geneit_backend/src/main.rs index 45a9dc4..f09296c 100644 --- a/geneit_backend/src/main.rs +++ b/geneit_backend/src/main.rs @@ -92,6 +92,7 @@ async fn main() -> std::io::Result<()> { web::post().to(families_controller::create), ) .route("/family/join", web::post().to(families_controller::join)) + .route("/family/list", web::get().to(families_controller::list)) }) .bind(AppConfig::get().listen_address.as_str())? .run() diff --git a/geneit_backend/src/manual_schema.rs b/geneit_backend/src/manual_schema.rs index c3adaee..6815840 100644 --- a/geneit_backend/src/manual_schema.rs +++ b/geneit_backend/src/manual_schema.rs @@ -6,7 +6,7 @@ diesel::table! { time_create -> Int8, is_admin -> Bool, invitation_code -> Varchar, - count_members -> Int4, - count_admins -> Int4, + count_members -> Int8, + count_admins -> Int8, } } diff --git a/geneit_backend/src/models.rs b/geneit_backend/src/models.rs index 6ff6103..39040e4 100644 --- a/geneit_backend/src/models.rs +++ b/geneit_backend/src/models.rs @@ -94,3 +94,15 @@ pub struct NewMembership { pub time_create: i64, pub is_admin: bool, } + +#[derive(Queryable, Debug, serde::Serialize)] +pub struct FamilyMembership { + user_id: i32, + family_id: i32, + name: String, + time_create: i64, + is_admin: bool, + invitation_code: String, + count_members: i64, + count_admins: i64, +} diff --git a/geneit_backend/src/services/families_service.rs b/geneit_backend/src/services/families_service.rs index 03c0d16..d6c8179 100644 --- a/geneit_backend/src/services/families_service.rs +++ b/geneit_backend/src/services/families_service.rs @@ -1,6 +1,9 @@ use crate::connections::db_connection; use crate::constants::FAMILY_INVITATION_CODE_LEN; -use crate::models::{Family, FamilyID, Membership, NewFamily, NewMembership, UserID}; +use crate::manual_schema::families_memberships; +use crate::models::{ + Family, FamilyID, FamilyMembership, Membership, NewFamily, NewMembership, UserID, +}; use crate::schema::{families, memberships}; use crate::utils::string_utils::rand_str; use crate::utils::time_utils::time; @@ -66,6 +69,15 @@ pub async fn is_member(family_id: FamilyID, user_id: UserID) -> anyhow::Result 0) } +/// Get the memberships of a user +pub async fn get_user_memberships(user_id: UserID) -> anyhow::Result> { + db_connection::execute(|conn| { + families_memberships::table + .filter(families_memberships::dsl::user_id.eq(user_id.0)) + .get_results(conn) + }) +} + /// Remove a membership to a family pub async fn remove_membership(_family_id: FamilyID, _user_id: UserID) { todo!()