Rename TogglClient to TogglApiClient
This commit is contained in:
parent
82d9cf5c87
commit
1df76ea573
@ -8,7 +8,7 @@ use tracing::log::debug;
|
|||||||
use crate::types::{Current, Project, ProjectClient, ReportEntry, TogglQuery};
|
use crate::types::{Current, Project, ProjectClient, ReportEntry, TogglQuery};
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct TogglClient {
|
pub struct TogglApiClient {
|
||||||
client: Client,
|
client: Client,
|
||||||
workspace_id: String,
|
workspace_id: String,
|
||||||
base_url: String,
|
base_url: String,
|
||||||
@ -17,7 +17,7 @@ pub struct TogglClient {
|
|||||||
headers: HeaderMap,
|
headers: HeaderMap,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TogglClient {
|
impl TogglApiClient {
|
||||||
pub async fn check_health(&self) -> bool {
|
pub async fn check_health(&self) -> bool {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
20
src/main.rs
20
src/main.rs
@ -1,4 +1,4 @@
|
|||||||
use crate::client::TogglClient;
|
use crate::api_client::TogglApiClient;
|
||||||
use crate::entity::prelude::TimeEntry;
|
use crate::entity::prelude::TimeEntry;
|
||||||
use crate::entity::time_entry;
|
use crate::entity::time_entry;
|
||||||
use crate::entity::time_entry::ActiveModel;
|
use crate::entity::time_entry::ActiveModel;
|
||||||
@ -25,7 +25,7 @@ use std::net::SocketAddr;
|
|||||||
use tower_http::trace::TraceLayer;
|
use tower_http::trace::TraceLayer;
|
||||||
use tracing::{debug, instrument};
|
use tracing::{debug, instrument};
|
||||||
|
|
||||||
mod client;
|
mod api_client;
|
||||||
mod db;
|
mod db;
|
||||||
mod entity;
|
mod entity;
|
||||||
mod poll;
|
mod poll;
|
||||||
@ -54,7 +54,7 @@ struct Config {
|
|||||||
|
|
||||||
#[instrument(skip(db, toggl_client))]
|
#[instrument(skip(db, toggl_client))]
|
||||||
pub async fn report(
|
pub async fn report(
|
||||||
Extension(toggl_client): Extension<TogglClient>,
|
Extension(toggl_client): Extension<TogglApiClient>,
|
||||||
Extension(db): Extension<DatabaseConnection>,
|
Extension(db): Extension<DatabaseConnection>,
|
||||||
Json(query): Json<TogglQuery>,
|
Json(query): Json<TogglQuery>,
|
||||||
) -> Result<Json<Vec<ReportEntry>>> {
|
) -> Result<Json<Vec<ReportEntry>>> {
|
||||||
@ -107,14 +107,14 @@ async fn cache_report(
|
|||||||
|
|
||||||
#[instrument(skip(toggl_client))]
|
#[instrument(skip(toggl_client))]
|
||||||
pub async fn current(
|
pub async fn current(
|
||||||
Extension(toggl_client): Extension<TogglClient>,
|
Extension(toggl_client): Extension<TogglApiClient>,
|
||||||
) -> Result<Json<Option<Current>>> {
|
) -> Result<Json<Option<Current>>> {
|
||||||
Ok(toggl_client.get_current().await.map(Json)?)
|
Ok(toggl_client.get_current().await.map(Json)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(skip(toggl_client))]
|
#[instrument(skip(toggl_client))]
|
||||||
pub async fn start_time_entry(
|
pub async fn start_time_entry(
|
||||||
Extension(toggl_client): Extension<TogglClient>,
|
Extension(toggl_client): Extension<TogglApiClient>,
|
||||||
Json(body): Json<HashMap<String, Value>>,
|
Json(body): Json<HashMap<String, Value>>,
|
||||||
) -> Result<impl IntoResponse> {
|
) -> Result<impl IntoResponse> {
|
||||||
toggl_client.start_time_entry(body).await?;
|
toggl_client.start_time_entry(body).await?;
|
||||||
@ -125,7 +125,7 @@ pub async fn start_time_entry(
|
|||||||
#[instrument(skip(db, toggl_client))]
|
#[instrument(skip(db, toggl_client))]
|
||||||
async fn projects(
|
async fn projects(
|
||||||
Extension(db): Extension<DatabaseConnection>,
|
Extension(db): Extension<DatabaseConnection>,
|
||||||
Extension(toggl_client): Extension<TogglClient>,
|
Extension(toggl_client): Extension<TogglApiClient>,
|
||||||
) -> Result<Json<Vec<Project>>> {
|
) -> Result<Json<Vec<Project>>> {
|
||||||
let projects = toggl_client.fetch_projects().await?;
|
let projects = toggl_client.fetch_projects().await?;
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ async fn projects(
|
|||||||
#[instrument(skip(toggl_client, db))]
|
#[instrument(skip(toggl_client, db))]
|
||||||
async fn clients(
|
async fn clients(
|
||||||
Extension(db): Extension<DatabaseConnection>,
|
Extension(db): Extension<DatabaseConnection>,
|
||||||
Extension(toggl_client): Extension<TogglClient>,
|
Extension(toggl_client): Extension<TogglApiClient>,
|
||||||
) -> Result<Json<Vec<ProjectClient>>> {
|
) -> Result<Json<Vec<ProjectClient>>> {
|
||||||
let clients = toggl_client.fetch_clients().await?;
|
let clients = toggl_client.fetch_clients().await?;
|
||||||
entity::client::Entity::insert_many(clients.iter().map(ProjectClient::as_model))
|
entity::client::Entity::insert_many(clients.iter().map(ProjectClient::as_model))
|
||||||
@ -151,7 +151,7 @@ async fn clients(
|
|||||||
Ok(Json(clients))
|
Ok(Json(clients))
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn health(Extension(toggl_client): Extension<TogglClient>) -> Result<&'static str> {
|
async fn health(Extension(toggl_client): Extension<TogglApiClient>) -> Result<&'static str> {
|
||||||
return if toggl_client.check_health().await {
|
return if toggl_client.check_health().await {
|
||||||
Ok("Ok")
|
Ok("Ok")
|
||||||
} else {
|
} else {
|
||||||
@ -166,7 +166,7 @@ struct RefreshQuery {
|
|||||||
|
|
||||||
#[instrument(skip(toggl_client, db))]
|
#[instrument(skip(toggl_client, db))]
|
||||||
async fn refresh(
|
async fn refresh(
|
||||||
Extension(toggl_client): Extension<TogglClient>,
|
Extension(toggl_client): Extension<TogglApiClient>,
|
||||||
Extension(db): Extension<DatabaseConnection>,
|
Extension(db): Extension<DatabaseConnection>,
|
||||||
Query(RefreshQuery { start_date }): Query<RefreshQuery>,
|
Query(RefreshQuery { start_date }): Query<RefreshQuery>,
|
||||||
) -> Result<&'static str> {
|
) -> Result<&'static str> {
|
||||||
@ -228,7 +228,7 @@ async fn main() -> Result<()> {
|
|||||||
tracing_subscriber::fmt::init();
|
tracing_subscriber::fmt::init();
|
||||||
|
|
||||||
let config = Config::parse();
|
let config = Config::parse();
|
||||||
let toggl_client = TogglClient::new(
|
let toggl_client = TogglApiClient::new(
|
||||||
&config.workspace_id.to_string(),
|
&config.workspace_id.to_string(),
|
||||||
&STANDARD.encode(&format!("{}:api_token", config.toggl_api_token)),
|
&STANDARD.encode(&format!("{}:api_token", config.toggl_api_token)),
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
use crate::client::TogglClient;
|
use crate::api_client::TogglApiClient;
|
||||||
use crate::entity::{client, project, time_entry};
|
use crate::entity::{client, project, time_entry};
|
||||||
use crate::types::{Project, ProjectClient, TogglQuery};
|
use crate::types::{Project, ProjectClient, TogglQuery};
|
||||||
use sea_orm::{DatabaseConnection, EntityTrait, QuerySelect};
|
use sea_orm::{DatabaseConnection, EntityTrait, QuerySelect};
|
||||||
@ -6,7 +6,7 @@ use tracing::instrument;
|
|||||||
use crate::{day_exclusivity_condition, utils};
|
use crate::{day_exclusivity_condition, utils};
|
||||||
|
|
||||||
#[tracing::instrument(skip(client, db))]
|
#[tracing::instrument(skip(client, db))]
|
||||||
pub async fn poll_job(client: TogglClient, db: DatabaseConnection, poll_period: u64) {
|
pub async fn poll_job(client: TogglApiClient, db: DatabaseConnection, poll_period: u64) {
|
||||||
// Every 2h, poll the Toggl API for new time entries for today to cache them in the database
|
// Every 2h, poll the Toggl API for new time entries for today to cache them in the database
|
||||||
let period = tokio::time::Duration::from_secs(poll_period);
|
let period = tokio::time::Duration::from_secs(poll_period);
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ pub async fn poll_job(client: TogglClient, db: DatabaseConnection, poll_period:
|
|||||||
|
|
||||||
#[instrument(skip(client, db))]
|
#[instrument(skip(client, db))]
|
||||||
pub async fn perform_poll(
|
pub async fn perform_poll(
|
||||||
client: &TogglClient,
|
client: &TogglApiClient,
|
||||||
db: &DatabaseConnection,
|
db: &DatabaseConnection,
|
||||||
) -> utils::Result<usize> {
|
) -> utils::Result<usize> {
|
||||||
let now = chrono::Utc::now();
|
let now = chrono::Utc::now();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user