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