diff --git a/backend/src/api/mod.rs b/backend/src/api/mod.rs index 8810dfe..35c8173 100644 --- a/backend/src/api/mod.rs +++ b/backend/src/api/mod.rs @@ -1,23 +1,39 @@ use serde::Deserialize; -use std::{error::Error, marker::Sync}; +use std::{collections::HashMap, error::Error, println, string::String, vec::Vec}; #[derive(Debug, Deserialize)] pub struct Problem { pub id: String, pub contest_id: String, - pub title: String, + pub name: String, } -pub async fn fetch_problem() -> Result, Box> { - let url = "https://kenkoooo.com/atcoder/resources/problems.json"; +#[derive(Debug, Deserialize)] +pub struct ProblemModel { + pub difficulty: Option, +} + +pub async fn fetch_problem() -> Result<(Vec, HashMap), Box> { + // let problems_url = "https://kenkoooo.com/atcoder/resources/problems.json"; + // let problem_models_url = "https://kenkoooo.com/atcoder/resources/problem-models.json"; + let problems_url = "https://github.com/Twil3akine/atcoder-random-picker/blob/master/.gitconfig"; + let problem_models_url = "https://github.com/Twil3akine/atcoder-random-picker/blob/master/.gitconfig"; - // reqwest::Clientを作成し、User-Agentヘッダーを追加 let client = reqwest::Client::builder() - .user_agent("atcoder-random-picker/0.1") // 任意の名前やバージョンを指定 - .build()?; + .user_agent("atcoder-random-picker/0.1 (twil3; contact: twil3akine@gmail.com)") + .build()?; + + // 問題一覧 + let problems_text = client.get(problems_url).send().await?.text().await?; + let problems: Vec = serde_json::from_str(&problems_text)?; + + // 問題モデル + let problem_models_text = client.get(problem_models_url).send().await?.text().await?; + let problem_models: HashMap = serde_json::from_str(&problem_models_text)?; - let text = client.get(url).send().await?.text().await?; - let problem: Vec = serde_json::from_str(&text)?; + for (id, model) in &problem_models { + println!("{}: {:?}", id, model.difficulty); + } - Ok(problem) + Ok((problems, problem_models)) } \ No newline at end of file diff --git a/backend/src/main.rs b/backend/src/main.rs index 30c7b31..2f76d00 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -2,11 +2,18 @@ use hyper::service::{make_service_fn, service_fn}; use hyper::{Server}; use std::net::SocketAddr; use std::convert::Infallible; +use std::{println}; +use std::result::Result::Err; -use backend::router; +use backend::{api, router}; #[tokio::main] async fn main() { + match api::fetch_problem().await { + Ok(_ps) => println!("Successed to fetch problems"), + Err(e) => eprintln!("Failed to failed problems: {}", e), + } + let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); let make_svc = make_service_fn(|_conn| async {