zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
pub mod query_date_time;
pub mod query_feeds;
pub mod query_kline;
pub mod query_owner;
pub mod query_projects;
pub mod query_users;

use async_graphql::Context;
use async_graphql::Error;
use async_graphql::MergedObject;

use crate::core::auth0::Requestor;
use crate::core::auth0::UserDetails;

use query_date_time::QueryDateTime;
use query_feeds::QueryFeeds;
use query_kline::QueryKline;
use query_owner::QueryOwner;
use query_projects::QueryProject;
use query_users::QueryUsers;

// 查询组件
#[derive(MergedObject, Default)]
pub struct Query(
    QueryDateTime,
    QueryProject,
    QueryOwner,
    QueryKline,
    QueryFeeds,
    QueryUsers,
);

pub fn required_auth(ctx: &Context<'_>) -> async_graphql::Result<UserDetails> {
    match ctx.data::<Requestor>()? {
        Requestor::Anonymous(_) => Err(Error::new("401".to_string())),
        Requestor::LoginUser(user_detail) => Ok(user_detail.clone()),
        Requestor::JwtUser(user_detail) => Ok(user_detail.clone()),
        Requestor::InnerService(_) => todo!(),
    }
}

pub fn get_user_id(ctx: &Context<'_>) -> Option<String> {
    match ctx.data::<Requestor>() {
        Ok(Requestor::Anonymous(_)) => None,
        Ok(Requestor::LoginUser(user_detail)) => Some(user_detail.user_id.to_owned()),
        Ok(Requestor::JwtUser(user_detail)) => Some(user_detail.user_id.to_owned()),
        Ok(Requestor::InnerService(_)) => todo!(),
        Err(_) => None,
    }
}