Added insert members function
This commit is contained in:
parent
349c1a24a4
commit
69259667bd
2
server/migrations/004_unique_users_members.sql
Normal file
2
server/migrations/004_unique_users_members.sql
Normal file
@ -0,0 +1,2 @@
|
||||
ALTER TABLE users_members
|
||||
ADD UNIQUE (user_id, member_id);
|
@ -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;
|
||||
|
@ -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())
|
||||
|
@ -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)))
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user