Can create a family
This commit is contained in:
		geneit_backend
migrations
2023-05-24-102711_create_users
src
							
								
								
									
										46
									
								
								geneit_backend/src/services/families_service.rs
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										46
									
								
								geneit_backend/src/services/families_service.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
use crate::connections::db_connection;
 | 
			
		||||
use crate::constants::FAMILY_INVITATION_CODE_LEN;
 | 
			
		||||
use crate::models::{Family, FamilyID, Membership, NewFamily, NewMembership, UserID};
 | 
			
		||||
use crate::schema::{families, memberships};
 | 
			
		||||
use crate::utils::string_utils::rand_str;
 | 
			
		||||
use crate::utils::time_utils::time;
 | 
			
		||||
use diesel::RunQueryDsl;
 | 
			
		||||
 | 
			
		||||
/// Create a new family, with an initial administrator
 | 
			
		||||
pub async fn create(name: &str, user_id: UserID) -> anyhow::Result<Family> {
 | 
			
		||||
    let family = db_connection::execute(|conn| {
 | 
			
		||||
        let res: Family = diesel::insert_into(families::table)
 | 
			
		||||
            .values(&NewFamily {
 | 
			
		||||
                name: name.trim(),
 | 
			
		||||
                invitation_code: rand_str(FAMILY_INVITATION_CODE_LEN),
 | 
			
		||||
                time_create: time() as i64,
 | 
			
		||||
            })
 | 
			
		||||
            .get_result(conn)?;
 | 
			
		||||
 | 
			
		||||
        Ok(res)
 | 
			
		||||
    })?;
 | 
			
		||||
 | 
			
		||||
    add_member(family.id(), user_id, true).await?;
 | 
			
		||||
 | 
			
		||||
    Ok(family)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Add a member to a family
 | 
			
		||||
pub async fn add_member(
 | 
			
		||||
    family_id: FamilyID,
 | 
			
		||||
    user_id: UserID,
 | 
			
		||||
    admin: bool,
 | 
			
		||||
) -> anyhow::Result<Membership> {
 | 
			
		||||
    db_connection::execute(|conn| {
 | 
			
		||||
        let res = diesel::insert_into(memberships::table)
 | 
			
		||||
            .values(&NewMembership {
 | 
			
		||||
                user_id: user_id.0,
 | 
			
		||||
                family_id: family_id.0,
 | 
			
		||||
                time_create: time() as i64,
 | 
			
		||||
                is_admin: admin,
 | 
			
		||||
            })
 | 
			
		||||
            .get_result(conn)?;
 | 
			
		||||
 | 
			
		||||
        Ok(res)
 | 
			
		||||
    })
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
//! # Backend services
 | 
			
		||||
 | 
			
		||||
pub mod families_service;
 | 
			
		||||
pub mod login_token_service;
 | 
			
		||||
pub mod mail_service;
 | 
			
		||||
pub mod openid_service;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user