Added insert members function

This commit is contained in:
xeovalyte 2025-02-14 17:04:15 +01:00
parent 349c1a24a4
commit 69259667bd
Signed by: xeovalyte
SSH Key Fingerprint: SHA256:GWI1hq+MNKR2UOcvk7n9tekASXT8vyazK7vDF9Xyciw
4 changed files with 23 additions and 6 deletions

View File

@ -0,0 +1,2 @@
ALTER TABLE users_members
ADD UNIQUE (user_id, member_id);

View File

@ -12,8 +12,8 @@ use sqlx::PgPool;
use tokio::task; use tokio::task;
use crate::{ use crate::{
database::model::{Session, UserMember}, database::model::Session,
model::{member::Roles, User}, model::User,
}; };
mod error; mod error;

View File

@ -8,7 +8,6 @@ pub mod user;
pub fn routes() -> Router<AppState> { pub fn routes() -> Router<AppState> {
Router::new() Router::new()
.route("/", get(root)) .route("/", get(root))
// .route("/member/:id", get())
.merge(member::routes()) .merge(member::routes())
.merge(auth::routes()) .merge(auth::routes())
.merge(user::routes()) .merge(user::routes())

View File

@ -7,7 +7,9 @@ use axum::{
use crate::{ use crate::{
auth::get_user_from_header, auth::get_user_from_header,
model::{member::Roles, User}, database::model::{Member as DbMember, UserMember as DbUserMember},
model::{member::Roles, Member, User},
util::convert_vec,
AppState, AppState,
}; };
@ -29,10 +31,24 @@ pub async fn members_insert(
State(state): State<AppState>, State(state): State<AppState>,
Path(user_id): Path<String>, Path(user_id): Path<String>,
headers: HeaderMap, headers: HeaderMap,
) -> Result<(), crate::Error> { Json(registration_tokens): Json<Vec<String>>,
) -> Result<Json<Vec<Member>>, crate::Error> {
let user = get_user_from_header(&state.pool, &headers).await?; let user = get_user_from_header(&state.pool, &headers).await?;
user.authorize(&state.pool, Some(Roles::ADMIN), Some(user_id)) user.authorize(&state.pool, Some(Roles::ADMIN), Some(user_id))
.await?; .await?;
Ok(()) let members =
DbMember::get_many_from_registration_tokens(&state.pool, registration_tokens).await?;
let member_ids: Vec<String> = members.iter().map(|m| m.member_id.to_owned()).collect();
let mut transaction = state.pool.begin().await?;
// Link the user to the members
let user_ids: Vec<uuid::Uuid> = vec![user.id; member_ids.len()];
DbUserMember::insert_many(&mut transaction, &user_ids, &member_ids).await?;
transaction.commit().await?;
Ok(Json(convert_vec(members)))
} }