Skip to content

Commit c86878e

Browse files
authored
Merge pull request #148 from MathisBurger/feature/delete-20day-old
Deletion scheduler
2 parents 457be17 + 988bdae commit c86878e

File tree

5 files changed

+42
-0
lines changed

5 files changed

+42
-0
lines changed

tasky/Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tasky/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ awc = "3.5.1"
3232
actix-http = "3.9.0"
3333
serial_test = "0.5"
3434
diesel_full_text_search = "2.2.0"
35+
actix-rt = "2.10.0"
3536

3637
[build-dependencies]
3738
tonic-build = "0.12.2"

tasky/src/deletion_scheduler.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use crate::{
2+
models::DB, schema::group_join_requests::dsl as join_request_dsl,
3+
schema::notifications::dsl as notification_dsl,
4+
};
5+
use actix_rt::time;
6+
use diesel::dsl::IntervalDsl;
7+
use diesel::prelude::*;
8+
use std::time::Duration;
9+
10+
/// Schedules deletion of entities after specific amount of time
11+
pub async fn scheduler(conn: &mut DB) {
12+
let mut interval = time::interval(Duration::from_secs(3600 * 24));
13+
loop {
14+
diesel::delete(
15+
join_request_dsl::group_join_requests
16+
.filter(join_request_dsl::updated_at.lt(diesel::dsl::now - 20_i32.days())),
17+
)
18+
.execute(conn)
19+
.expect("Cannot delete join requests");
20+
21+
diesel::delete(
22+
notification_dsl::notifications
23+
.filter(notification_dsl::created_at.lt(diesel::dsl::now - 20_i32.days())),
24+
)
25+
.execute(conn)
26+
.expect("Cannot delete notifications");
27+
28+
interval.tick().await;
29+
}
30+
}

tasky/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ pub struct AppState {
1313
}
1414

1515
pub mod auth_middleware;
16+
pub mod deletion_scheduler;
1617
pub mod error;
1718
pub mod grpc;
1819
pub mod handler;

tasky/src/main.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use futures::future::join;
66
use log::info;
77
use std::net::SocketAddr;
88
use tasky::auth_middleware::Auth;
9+
use tasky::deletion_scheduler;
910
use tasky::routes::init_services;
1011
use tasky::spotlight;
1112
use tasky::tasky_grpc::tasky_api_server::TaskyApiServer;
@@ -31,6 +32,13 @@ async fn main() -> std::io::Result<()> {
3132
)
3233
.await
3334
};
35+
36+
let db_pool = state.clone().db.db.clone();
37+
actix_rt::spawn(async move {
38+
let db_conn = &mut db_pool.get().unwrap();
39+
deletion_scheduler::scheduler(db_conn).await;
40+
});
41+
3442
let actix = HttpServer::new(move || {
3543
App::new()
3644
.wrap(middleware::Logger::default())

0 commit comments

Comments
 (0)