Added a method to get current members
This commit is contained in:
parent
06344541ae
commit
8758491938
@ -2,6 +2,8 @@ use sqlx::{PgPool, Postgres};
|
|||||||
|
|
||||||
use crate::model::member::Roles;
|
use crate::model::member::Roles;
|
||||||
|
|
||||||
|
use super::Member as DbMember;
|
||||||
|
|
||||||
#[derive(validator::Validate)]
|
#[derive(validator::Validate)]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
pub user_id: uuid::Uuid,
|
pub user_id: uuid::Uuid,
|
||||||
@ -99,4 +101,18 @@ impl UserMember {
|
|||||||
|
|
||||||
Ok(roles)
|
Ok(roles)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn get_members_from_user(
|
||||||
|
pool: &PgPool,
|
||||||
|
user_id: &uuid::Uuid,
|
||||||
|
) -> Result<Vec<DbMember>, sqlx::Error> {
|
||||||
|
let members = sqlx::query_as!(DbMember,
|
||||||
|
"
|
||||||
|
SELECT members.* FROM users_members INNER JOIN members ON users_members.member_id = members.member_id AND users_members.user_id = $1;
|
||||||
|
",
|
||||||
|
user_id
|
||||||
|
).fetch_all(pool).await?;
|
||||||
|
|
||||||
|
Ok(members)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
use bitflags::bitflags;
|
use bitflags::bitflags;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct Name {
|
pub struct Name {
|
||||||
pub first: String,
|
pub first: String,
|
||||||
pub full: String,
|
pub full: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct Member {
|
pub struct Member {
|
||||||
pub id: String,
|
pub id: String,
|
||||||
pub name: Name,
|
pub name: Name,
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
use sqlx::PgPool;
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
@ -8,6 +9,10 @@ pub struct User {
|
|||||||
}
|
}
|
||||||
|
|
||||||
use crate::database::model::User as DbUser;
|
use crate::database::model::User as DbUser;
|
||||||
|
use crate::database::model::UserMember as DbUserMember;
|
||||||
|
use crate::util::convert_vec;
|
||||||
|
|
||||||
|
use super::Member;
|
||||||
impl From<DbUser> for User {
|
impl From<DbUser> for User {
|
||||||
fn from(db_user: DbUser) -> Self {
|
fn from(db_user: DbUser) -> Self {
|
||||||
Self {
|
Self {
|
||||||
@ -17,3 +22,11 @@ impl From<DbUser> for User {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl User {
|
||||||
|
pub async fn members(&self, pool: &PgPool) -> Result<Vec<Member>, sqlx::Error> {
|
||||||
|
let related_members = DbUserMember::get_members_from_user(pool, &self.id).await?;
|
||||||
|
|
||||||
|
Ok(convert_vec(related_members))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
use axum::{extract::State, routing::post, Router};
|
use axum::{
|
||||||
|
extract::State,
|
||||||
|
http::HeaderMap,
|
||||||
|
routing::{get, post},
|
||||||
|
Json, Router,
|
||||||
|
};
|
||||||
|
|
||||||
use crate::AppState;
|
use crate::{auth::get_user_from_header, model::Member, AppState};
|
||||||
|
|
||||||
pub mod migrate;
|
pub mod migrate;
|
||||||
|
|
||||||
@ -8,11 +13,20 @@ pub fn routes() -> Router<AppState> {
|
|||||||
Router::new()
|
Router::new()
|
||||||
.route("/members/migrate_request", post(migrate::migrate_request))
|
.route("/members/migrate_request", post(migrate::migrate_request))
|
||||||
.route("/members/migrate_confirm", post(migrate::migrate_confirm))
|
.route("/members/migrate_confirm", post(migrate::migrate_confirm))
|
||||||
|
.route("/member", get(get_current_members))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_members<'a>(
|
pub async fn get_current_members(
|
||||||
State(state): State<AppState>,
|
State(state): State<AppState>,
|
||||||
body: String,
|
headers: HeaderMap,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<Json<Vec<Member>>, crate::Error> {
|
||||||
|
let (_roles, user) = get_user_from_header(&state.pool, &headers).await?;
|
||||||
|
|
||||||
|
let members = user.members(&state.pool).await?;
|
||||||
|
|
||||||
|
Ok(Json(members))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn get_members(State(state): State<AppState>, body: String) -> Result<(), crate::Error> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user