Open SuzukiTakamasa opened 3 months ago
①constants.tsのHouseholdMonthlySummaryにdetail(string)フィールド追加 ②models.rsのHouseholdMonthlySummaryにdetail(String)フィールド追加 ③schema_completed_households.sqlを以下に修正 DROP TABLE IF EXISTS completed_households; CREATE TABLE completed_households ( id INTEGER PRIMARY KEY AUTOINCREMENT, year INTEGER NOT NULL, month INTEGER NOT NULL, billing_amount INTEGER NOT NULL, total_amount INTEGER NOT NULL, detail TEXT NOT NULL ); detailは、現状取得しているhouseholdsのオブジェクトをstringifyしたものを送信するようにする
以下Claude 3.5の回答
.get_async("/completed_household/monthly_summary/:year", |req, ctx| async move {
let year = ctx.param("year").unwrap();
let db_str = match get_db_env(&req) {
Ok(val) => val,
Err(e) => return Response::error(e.to_string(), 400)
};
let d1 = ctx.env.d1(db_str.as_str())?;
let statement = d1.prepare("SELECT month, detail, billing_amount, total_amount FROM completed_households WHERE year = ?1");
let query = statement.bind(&[year.into()])?;
let result = match query.all().await {
Ok(res) => res,
Err(e) => {
console_log!("{:?}", e);
return Response::error("Error querying database", 500)
}
};
let monthly_summary: Result<Vec<HouseholdMonthlySummary>, worker::Error> = result.results::<(u8, String, u32, u32)>()?
.into_iter()
.map(|(month, detail_json, billing_amount, total_amount)| {
let detail: Vec<Detail> = serde_json::from_str(&detail_json).map_err(|e| {
console_log!("Error parsing detail JSON: {:?}", e);
worker::Error::RustError(format!("Failed to parse detail JSON for month {}", month))
})?;
Ok(HouseholdMonthlySummary {
month,
detail,
billing_amount,
total_amount,
})
})
.collect();
match monthly_summary {
Ok(data) => Response::from_json(&data),
Err(e) => {
console_log!("{:?}", e);
Response::error("Error parsing results", 500)
}
}
})
明細が表示されるように対応済み 残対応としては