44
55// Further info could be find in src/jobs.rs
66use super :: Context ;
7+ use crate :: db:: issue_decision_state:: get_issue_decision_state;
78use crate :: github:: * ;
89use crate :: handlers:: decision:: { DecisionProcessActionMetadata , DECISION_PROCESS_JOB_NAME } ;
10+ use crate :: interactions:: PingComment ;
911use parser:: command:: decision:: Resolution :: { Hold , Merge } ;
1012use reqwest:: Client ;
13+ use tokio_postgres:: Client as DbClient ;
1114use tracing as log;
1215
1316pub async fn handle_job (
@@ -22,7 +25,8 @@ pub async fn handle_job(
2225 Ok ( ( ) )
2326 }
2427 matched_name if * matched_name == DECISION_PROCESS_JOB_NAME . to_string ( ) => {
25- decision_process_handler ( & metadata) . await
28+ let db = ctx. db . get ( ) . await ;
29+ decision_process_handler ( & db, & metadata) . await
2630 }
2731 _ => default ( & name, & metadata) ,
2832 }
@@ -38,7 +42,10 @@ fn default(name: &String, metadata: &serde_json::Value) -> anyhow::Result<()> {
3842 Ok ( ( ) )
3943}
4044
41- async fn decision_process_handler ( metadata : & serde_json:: Value ) -> anyhow:: Result < ( ) > {
45+ async fn decision_process_handler (
46+ db : & DbClient ,
47+ metadata : & serde_json:: Value ,
48+ ) -> anyhow:: Result < ( ) > {
4249 tracing:: trace!(
4350 "handle_job fell into decision process case: (metadata={:?})" ,
4451 metadata
@@ -50,7 +57,22 @@ async fn decision_process_handler(metadata: &serde_json::Value) -> anyhow::Resul
5057
5158 match gh_client. json :: < Issue > ( request) . await {
5259 Ok ( issue) => match metadata. status {
53- Merge => issue. merge ( & gh_client) . await ?,
60+ Merge => {
61+ let users: Vec < String > = get_issue_decision_state ( & db, & issue. number )
62+ . await
63+ . unwrap ( )
64+ . current
65+ . into_keys ( )
66+ . collect ( ) ;
67+ let users_ref: Vec < & str > = users. iter ( ) . map ( |x| x. as_ref ( ) ) . collect ( ) ;
68+
69+ let cmnt = PingComment :: new (
70+ & issue,
71+ & users_ref,
72+ "The final comment period has resolved, with a decision to **merge**. Ping involved once again." ,
73+ ) ;
74+ cmnt. post ( & gh_client) . await ?;
75+ }
5476 Hold => issue. close ( & gh_client) . await ?,
5577 } ,
5678 Err ( e) => log:: error!(
0 commit comments