diff options
| -rw-r--r-- | src/database.rs | 36 | ||||
| -rw-r--r-- | src/main.rs | 17 | 
2 files changed, 45 insertions, 8 deletions
| diff --git a/src/database.rs b/src/database.rs index 085494e..375ca3b 100644 --- a/src/database.rs +++ b/src/database.rs @@ -72,7 +72,11 @@ impl Db {          let mut tx = self.connection.begin().await?;          // NOTE: Returns `RowNotFound` if not found. -        let row = sqlx::query("SELECT id, name FROM repositories where id = ?") +        let row = sqlx::query(r#" +            SELECT id, name, updated_at +            FROM repositories +            WHERE id = ? +        "#)              .bind(id)              .fetch_one(&mut tx)              .await?; @@ -83,7 +87,7 @@ impl Db {              Repo {                  id: row.get(0),                  name: Some(row.get(1)), -                updated_at: None, +                updated_at: Some(row.get(2)),              }          )      } @@ -108,9 +112,31 @@ impl Db {          Ok(())      } -    pub fn repo_is_updated() -> Result<bool, Error> { -        // select id from repositories where updated_at > datetime("2020-07-13T17:57:56Z"); -        Ok(false) +    pub async fn repo_is_updated( +        &mut self, +        repo: &Repo, +    ) -> Result<bool, Error> { +        let mut tx = self.connection.begin().await?; + +        let is_updated = match sqlx::query(r#" +            SELECT 1 +            FROM repositories +            WHERE id = ? +                AND datetime(updated_at) < datetime(?) +        "#) +            .bind(repo.id) +            .bind(&repo.updated_at) +            .fetch_one(&mut tx) +            .await +        { +            Ok(r) => Ok(true), +            Err(sqlx::Error::RowNotFound) => Ok(false), +            Err(e) => Err(e.into()), +        }; + +        tx.commit().await?; + +        is_updated      }      pub fn repo_update(repo: &Repo) -> Result<(), Error> { diff --git a/src/main.rs b/src/main.rs index 1b68b61..e7be108 100644 --- a/src/main.rs +++ b/src/main.rs @@ -56,11 +56,22 @@ async fn main() {      //   fetch      for repo in test_repos { -        match db.repo_get(repo.id).await { -            Ok(_r) => (), +        let id = repo.id; +        let db_repo = database::Repo::from(repo); + +        match db.repo_get(id).await { +            Ok(r) => { +                // TODO: fetch + +                if db.repo_is_updated(&db_repo).await.unwrap() { +                    dbg!("UPDATED", &db_repo); +                } +            }, +              Err(database::Error::Db(sqlx::Error::RowNotFound)) => { -                db.repo_insert(repo.into()).await.unwrap(); +                db.repo_insert(db_repo).await.unwrap();              }, +              e => panic!("{:?}", e),          }      } | 
