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 crate::{
database::model::{Session, UserMember},
model::{member::Roles, User},
database::model::Session,
model::User,
};
mod error;

View File

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

View File

@ -7,7 +7,9 @@ use axum::{
use crate::{
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,
};
@ -29,10 +31,24 @@ pub async fn members_insert(
State(state): State<AppState>,
Path(user_id): Path<String>,
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?;
user.authorize(&state.pool, Some(Roles::ADMIN), Some(user_id))
.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)))
}