11//! The `jobs` table provides a way to have scheduled jobs
22use anyhow:: { Context as _, Result } ;
3- use chrono:: { DateTime , Duration , FixedOffset } ;
4- use postgres_types:: { FromSql , ToSql } ;
3+ use chrono:: { DateTime , FixedOffset } ;
54use serde:: { Deserialize , Serialize } ;
65use tokio_postgres:: Client as DbClient ;
76use uuid:: Uuid ;
@@ -11,40 +10,23 @@ pub struct Job {
1110 pub id : Uuid ,
1211 pub name : String ,
1312 pub scheduled_at : DateTime < FixedOffset > ,
14- pub frequency : Option < i32 > ,
15- pub frequency_unit : Option < FrequencyUnit > ,
1613 pub metadata : serde_json:: Value ,
1714 pub executed_at : Option < DateTime < FixedOffset > > ,
1815 pub error_message : Option < String > ,
1916}
2017
21- #[ derive( Serialize , Deserialize , Debug , ToSql , FromSql ) ]
22- #[ postgres( name = "frequency_unit" ) ]
23- pub enum FrequencyUnit {
24- #[ postgres( name = "days" ) ]
25- Days ,
26- #[ postgres( name = "hours" ) ]
27- Hours ,
28- #[ postgres( name = "minutes" ) ]
29- Minutes ,
30- #[ postgres( name = "seconds" ) ]
31- Seconds ,
32- }
33-
3418pub async fn insert_job (
3519 db : & DbClient ,
3620 name : & String ,
3721 scheduled_at : & DateTime < FixedOffset > ,
38- frequency : & Option < i32 > ,
39- frequency_unit : & Option < FrequencyUnit > ,
4022 metadata : & serde_json:: Value ,
4123) -> Result < ( ) > {
4224 tracing:: trace!( "insert_job(name={})" , name) ;
4325
4426 db. execute (
45- "INSERT INTO jobs (name, scheduled_at, frequency, frequency_unit, metadata) VALUES ($1, $2, $3, $4, $5)
27+ "INSERT INTO jobs (name, scheduled_at, metadata) VALUES ($1, $2, $3, $4, $5)
4628 ON CONFLICT (name, scheduled_at) DO UPDATE SET metadata = EXCLUDED.metadata" ,
47- & [ & name, & scheduled_at, & frequency , & frequency_unit , & metadata] ,
29+ & [ & name, & scheduled_at, & metadata] ,
4830 )
4931 . await
5032 . context ( "Inserting job" ) ?;
@@ -103,8 +85,6 @@ pub async fn get_jobs_to_execute(db: &DbClient) -> Result<Vec<Job>> {
10385 let id: Uuid = job. get ( 0 ) ;
10486 let name: String = job. get ( 1 ) ;
10587 let scheduled_at: DateTime < FixedOffset > = job. get ( 2 ) ;
106- let frequency: Option < i32 > = job. get ( 3 ) ;
107- let frequency_unit: Option < FrequencyUnit > = job. get ( 4 ) ;
10888 let metadata: serde_json:: Value = job. get ( 5 ) ;
10989 let executed_at: Option < DateTime < FixedOffset > > = job. get ( 6 ) ;
11090 let error_message: Option < String > = job. get ( 7 ) ;
@@ -113,8 +93,6 @@ pub async fn get_jobs_to_execute(db: &DbClient) -> Result<Vec<Job>> {
11393 id,
11494 name,
11595 scheduled_at,
116- frequency,
117- frequency_unit,
11896 metadata,
11997 executed_at,
12098 error_message,
@@ -123,12 +101,3 @@ pub async fn get_jobs_to_execute(db: &DbClient) -> Result<Vec<Job>> {
123101
124102 Ok ( data)
125103}
126-
127- pub fn get_duration_from_cron ( cron_period : i32 , cron_unit : & FrequencyUnit ) -> Duration {
128- match cron_unit {
129- FrequencyUnit :: Days => Duration :: days ( cron_period as i64 ) ,
130- FrequencyUnit :: Hours => Duration :: hours ( cron_period as i64 ) ,
131- FrequencyUnit :: Minutes => Duration :: minutes ( cron_period as i64 ) ,
132- FrequencyUnit :: Seconds => Duration :: seconds ( cron_period as i64 ) ,
133- }
134- }
0 commit comments