11use diesel:: prelude:: * ;
22
33use crate :: domain:: github:: { GitHubUser , Issue , IssueComment } ;
4- use crate :: domain:: rfcbot:: { FcpProposal , FcpReviewRequest } ;
4+ use crate :: domain:: rfcbot:: { FcpConcern , FcpProposal , FcpReviewRequest } ;
5+ use crate :: domain:: schema:: fcp_concern;
56use crate :: error:: DashResult ;
67use crate :: DB_POOL ;
78
89#[ derive( Serialize ) ]
910pub struct FcpWithInfo {
1011 pub fcp : FcpProposal ,
1112 pub reviews : Vec < ( GitHubUser , bool ) > ,
13+ // (Concern name, comment registering it, and user leaving it)
14+ pub concerns : Vec < ( String , IssueComment , GitHubUser ) > ,
1215 pub issue : Issue ,
1316 pub status_comment : IssueComment ,
1417}
@@ -31,6 +34,26 @@ pub fn all_fcps() -> DashResult<Vec<FcpWithInfo>> {
3134 . filter ( fcp_review_request:: fk_proposal. eq ( fcp. id ) )
3235 . load :: < FcpReviewRequest > ( conn) ?;
3336
37+ let raw_concerns = fcp_concern:: table
38+ . filter ( fcp_concern:: fk_proposal. eq ( fcp. id ) )
39+ . load :: < FcpConcern > ( conn) ?;
40+
41+ let mut concerns = Vec :: new ( ) ;
42+
43+ for concern in raw_concerns {
44+ // Skip resolved concerns.
45+ if concern. fk_resolved_comment . is_some ( ) {
46+ continue ;
47+ }
48+ let user = githubuser:: table
49+ . filter ( githubuser:: id. eq ( concern. fk_initiator ) )
50+ . first ( conn) ?;
51+ let comment = issuecomment:: table
52+ . filter ( issuecomment:: id. eq ( concern. fk_initiating_comment ) )
53+ . first :: < IssueComment > ( conn) ?;
54+ concerns. push ( ( concern. name , comment, user) ) ;
55+ }
56+
3457 let mut reviews_with_users = Vec :: new ( ) ;
3558
3659 for review in reviews {
@@ -51,6 +74,7 @@ pub fn all_fcps() -> DashResult<Vec<FcpWithInfo>> {
5174 let fcp_with_info = FcpWithInfo {
5275 fcp,
5376 reviews : reviews_with_users,
77+ concerns,
5478 issue,
5579 status_comment,
5680 } ;
0 commit comments