(toggl-portal): Add manul fresh endpoint

This commit is contained in:
Joshua Coles 2023-12-19 20:38:53 +00:00
parent eca0a2cd44
commit d5dfb47aea

View File

@ -15,6 +15,8 @@ use sea_orm::{DatabaseConnection, EntityTrait};
use serde_json::Value;
use std::collections::HashMap;
use std::net::SocketAddr;
use axum::extract::Query;
use serde::Deserialize;
use tower_http::trace::TraceLayer;
mod client;
@ -113,6 +115,36 @@ async fn health(Extension(toggl_client): Extension<TogglClient>) -> Result<&'sta
};
}
#[derive(Debug, Clone, Deserialize)]
struct RefreshQuery {
start_date: Option<String>,
}
async fn refresh(
Extension(toggl_client): Extension<TogglClient>,
Extension(db): Extension<DatabaseConnection>,
Query(RefreshQuery { start_date }): Query<RefreshQuery>,
) -> Result<&'static str> {
let date = chrono::Utc::now()
.naive_utc()
.date()
.format("%Y-%m-%d")
.to_string();
let start_date = start_date.unwrap_or(date.clone());
let query = TogglQuery {
start_date: Some(start_date),
end_date: Some(date),
..Default::default()
};
let report = toggl_client.full_report(&query).await?;
cache_report(&db, &report).await?;
Ok("Ok")
}
#[tokio::main]
async fn main() -> Result<()> {
// install global collector configured based on RUST_LOG env var.
@ -140,6 +172,7 @@ async fn main() -> Result<()> {
let app = Router::new()
.route("/health", get(health))
.route("/current", get(current))
.route("/refresh", post(refresh))
.route("/report", post(report))
.route("/projects", get(projects))
.route("/clients", get(clients))