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 tokio::task;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
database::model::{Session, UserMember},
|
database::model::Session,
|
||||||
model::{member::Roles, User},
|
model::User,
|
||||||
};
|
};
|
||||||
|
|
||||||
mod error;
|
mod error;
|
||||||
|
@ -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())
|
||||||
|
@ -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)))
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user