From d5dfb47aead37f4fcdef4c0c713314210f6ced39 Mon Sep 17 00:00:00 2001 From: Joshua Coles Date: Tue, 19 Dec 2023 20:38:53 +0000 Subject: [PATCH] (toggl-portal): Add manul fresh endpoint --- src/main.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/main.rs b/src/main.rs index 273fa2d..f69ce60 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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) -> Result<&'sta }; } +#[derive(Debug, Clone, Deserialize)] +struct RefreshQuery { + start_date: Option, +} + +async fn refresh( + Extension(toggl_client): Extension, + Extension(db): Extension, + Query(RefreshQuery { start_date }): Query, +) -> 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))