aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/database.rs36
-rw-r--r--src/main.rs17
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),
}
}