use std::ops::Deref;
use lcode_config::{config::user_nested::Suffix, global::G_USER_CONFIG};
use crate::Json;
pub struct GraphqlQuery(pub Json);
impl Deref for GraphqlQuery {
type Target = Json;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl GraphqlQuery {
pub fn new(skip: u32) -> Self {
const GRQL_CN: &str = include_str!("../../graphqls/problemsetQuestionList_cn.graphql");
const GRQL_COM: &str = include_str!("../../graphqls/problemsetQuestionList_com.graphql");
let skip = skip.to_string();
let (graphql, var) = match G_USER_CONFIG.config.url_suffix {
Suffix::Cn => (
GRQL_CN,
r#"{"skip":$skip,"limit":100,"filters":{}}"#.replace("$skip", &skip),
),
Suffix::Com => (
GRQL_COM,
r#"{"categorySlug":"","skip":$skip,"limit":100,"filters":{}}"#
.replace("$skip", &skip),
),
};
let mut json: Json = Json::with_capacity(3);
json.insert("query", graphql.to_owned());
json.insert("variables", var);
json.insert("operationName", "problemsetQuestionList".to_owned());
Self(json)
}
pub fn get_count() -> Self {
const GRQL_CN: &str = include_str!("../../graphqls/get_list_count_cn.graphql");
const GRQL_COM: &str = include_str!("../../graphqls/problemsetQuestionList_com.graphql");
let (graphql, var) = match G_USER_CONFIG.config.url_suffix {
Suffix::Cn => (GRQL_CN, r#"{"skip":0,"limit":0,"filters":{}}"#),
Suffix::Com => (
GRQL_COM,
r#"{"categorySlug":"","skip":0,"limit":1,"filters":{}}"#,
),
};
let mut json: Json = Json::with_capacity(3);
json.insert("query", graphql.to_owned());
json.insert("variables", var.to_owned());
json.insert("operationName", "problemsetQuestionList".to_owned());
Self(json)
}
pub fn qs_detail(qs_title_slug: &str) -> Json {
const GRQL: &str = include_str!("../../graphqls/getQuestion_detail.graphql");
let mut json: Json = Json::with_capacity(3);
json.insert("query", GRQL.to_owned());
json.insert(
"variables",
r#"{"titleSlug": "$titleSlug"}"#.replace("$titleSlug", qs_title_slug),
);
json.insert("operationName", "getQuestion".to_owned());
json
}
pub fn subission_list(qs_title_slug: &str) -> Json {
const GRQL: &str = include_str!("../../graphqls/submissionList.graphql");
let mut json: Json = Json::with_capacity(3);
json.insert("query", GRQL.to_owned());
json.insert(
"variables",
r#"{"questionSlug":"$Slug", "offset":0,"limit":$num,"lastKey":null,"status":null}"#
.replace("$Slug", qs_title_slug)
.replace(
"$num",
&G_USER_CONFIG
.config
.num_sublist
.to_string(),
),
);
json.insert("operationName", "submissionList".to_owned());
json
}
pub fn daily_checkin() -> Json {
const DAILY_CHECKIN: &str = include_str!("../../graphqls/dailyCheckin.graphql");
let mut json: Json = Json::with_capacity(3);
json.insert("query", DAILY_CHECKIN.to_owned());
json.insert("variables", "{}".to_owned());
json.insert("operationName", "dailyCheckin".to_owned());
json
}
pub fn global_data() -> Json {
const GRQL: &str = include_str!("../../graphqls/globalData_user_info.graphql");
let mut json: Json = Json::with_capacity(3);
json.insert("query", GRQL.to_owned());
json.insert("variables", "{}".to_owned());
json.insert("operationName", "globalData".to_owned());
json
}
pub fn pass_status(user_slug: &str) -> Json {
const PASS_GRQL_CN: &str = include_str!("../../graphqls/pass_cn.graphql");
const PASS_GRQL_COM: &str = include_str!("../../graphqls/pass_com.graphql");
let pat = match G_USER_CONFIG.config.url_suffix {
Suffix::Cn => PASS_GRQL_CN,
Suffix::Com => PASS_GRQL_COM,
};
let mut json: Json = Json::with_capacity(3);
json.insert("query", pat.to_owned());
json.insert(
"variables",
r#"{"userSlug":"$userSlug"}"#.replace("$userSlug", user_slug),
);
json.insert("operationName", "userSessionProgress".to_owned());
json
}
}