1+ // src/models/relationship.rs
2+ use crate :: models:: user:: User ;
3+ use chrono:: NaiveDateTime ;
4+ use diesel:: prelude:: * ;
5+ use serde:: { Deserialize , Serialize } ;
6+ use diesel:: pg:: Pg ;
7+ use crate :: schema:: dev_pm_relationships;
8+ use crate :: schema:: dev_pm_relationships:: dsl;
9+
10+ #[ derive( Queryable , Selectable , Serialize , Identifiable , Associations , Debug ) ]
11+ #[ diesel( belongs_to( User , foreign_key = developer_id) ) ]
12+ #[ diesel( table_name = crate :: schema:: dev_pm_relationships) ]
13+ pub struct DevPmRelationship {
14+ pub id : i32 ,
15+ pub developer_id : i32 ,
16+ pub project_manager_id : i32 ,
17+ pub status : String ,
18+ pub created_at : NaiveDateTime ,
19+ pub updated_at : NaiveDateTime ,
20+ }
21+
22+ #[ derive( Insertable ) ]
23+ #[ diesel( table_name = crate :: schema:: dev_pm_relationships) ]
24+ pub struct NewDevPmRelationship {
25+ pub developer_id : i32 ,
26+ pub project_manager_id : i32 ,
27+ pub status : String ,
28+ }
29+
30+ #[ derive( Deserialize ) ]
31+ pub struct InvitePmRequest {
32+ pub project_manager_id : i32 ,
33+ }
34+
35+ #[ derive( Deserialize ) ]
36+ pub struct RespondToInviteRequest {
37+ pub status : String ,
38+ }
39+
40+ // Query builders helper methods
41+ impl DevPmRelationship {
42+ pub fn for_developer ( user_id : i32 ) -> dev_pm_relationships:: BoxedQuery < ' static , Pg > {
43+ use crate :: schema:: dev_pm_relationships:: dsl:: * ;
44+
45+ dev_pm_relationships
46+ . filter ( developer_id. eq ( user_id) )
47+ . into_boxed ( )
48+ }
49+
50+ pub fn for_project_manager ( user_id : i32 ) -> dev_pm_relationships:: BoxedQuery < ' static , Pg > {
51+ use crate :: schema:: dev_pm_relationships:: dsl:: * ;
52+
53+ dev_pm_relationships
54+ . filter ( project_manager_id. eq ( user_id) )
55+ . into_boxed ( )
56+ }
57+
58+ pub fn pending ( ) -> dev_pm_relationships:: BoxedQuery < ' static , Pg > {
59+ use crate :: schema:: dev_pm_relationships:: dsl:: * ;
60+
61+ dev_pm_relationships
62+ . filter ( status. eq ( "pending" ) )
63+ . into_boxed ( )
64+ }
65+
66+ pub fn accepted ( ) -> dev_pm_relationships:: BoxedQuery < ' static , Pg > {
67+ use crate :: schema:: dev_pm_relationships:: dsl:: * ;
68+
69+ dev_pm_relationships
70+ . filter ( status. eq ( "accepted" ) )
71+ . into_boxed ( )
72+ }
73+ }
0 commit comments