@@ -30,7 +30,26 @@ pub mod article {
30
30
pub content : String ,
31
31
pub created_at : String ,
32
32
}
33
-
33
+
34
+ // @todo -> How to unify struct ArticleRequest with ArticleUpdateRequest | If possible unify with ArticleModel, why not?
35
+ #[ derive( Serialize , Deserialize ) ]
36
+ pub struct ArticleRequest {
37
+ pub author : String ,
38
+ pub title : String ,
39
+ pub content : String ,
40
+ pub created_at : String ,
41
+ }
42
+
43
+ #[ derive( Serialize , Deserialize ) ]
44
+ pub struct ArticleUpdateRequest {
45
+ #[ serde( rename = "_id" ) ]
46
+ pub _id : String ,
47
+ pub author : String ,
48
+ pub title : String ,
49
+ pub content : String ,
50
+ pub created_at : String ,
51
+ }
52
+
34
53
pub async fn _all ( ) -> Result < Vec < ArticleModel > > {
35
54
let database_url = env:: var ( "DATABASE_URL" ) . expect ( "DATABASE_URL is not set in .env file" ) ;
36
55
let db = Client :: with_uri_str ( & database_url) . await ?. database ( MONGO_DB ) ;
@@ -57,17 +76,7 @@ pub mod article {
57
76
58
77
Ok ( doc)
59
78
}
60
-
61
-
62
- // @todo -> How to unify struct ArticleRequest with ArticleUpdateRequest
63
- #[ derive( Serialize , Deserialize ) ]
64
- pub struct ArticleRequest {
65
- pub author : String ,
66
- pub title : String ,
67
- pub content : String ,
68
- pub created_at : String ,
69
- }
70
-
79
+
71
80
pub async fn _create ( _article : web:: Json < ArticleRequest > ) -> Result < ArticleModel > {
72
81
let database_url = env:: var ( "DATABASE_URL" ) . expect ( "DATABASE_URL is not set in .env file" ) ;
73
82
let db = Client :: with_uri_str ( & database_url) . await ?. database ( MONGO_DB ) ;
@@ -85,25 +94,47 @@ pub mod article {
85
94
Ok ( to_save)
86
95
}
87
96
88
- pub async fn _update ( _article : bson :: Document , query : bson :: Document ) -> Result < Option < ArticleModel > > {
97
+ pub async fn _update ( _article : web :: Json < ArticleUpdateRequest > ) -> Result < ( ) > {
89
98
let database_url = env:: var ( "DATABASE_URL" ) . expect ( "DATABASE_URL is not set in .env file" ) ;
90
99
let db = Client :: with_uri_str ( & database_url) . await ?. database ( MONGO_DB ) ;
91
100
92
- let doc = ArticleModel :: find_one ( & db, query, None ) . await ?;
93
- println ! ( "{:?}" , doc) ;
101
+ // This is bad code, how to dont pass all params? -> need improve
102
+ let to_update = ArticleModel {
103
+ id : serde:: __private:: Some ( ObjectId :: with_string ( & _article. _id . clone ( ) ) . unwrap ( ) ) , // bad code
104
+ author : _article. author . clone ( ) ,
105
+ created_at : _article. created_at . clone ( ) ,
106
+ title : _article. title . clone ( ) ,
107
+ content : _article. content . clone ( ) ,
108
+ } ;
109
+
110
+ let document = doc ! {
111
+ "author" : _article. author. clone( ) ,
112
+ "created_at" : _article. created_at. clone( ) ,
113
+ "title" : _article. title. clone( ) ,
114
+ "content" : _article. content. clone( ) ,
115
+ } ;
116
+
117
+ to_update. update ( & db, None , doc ! { "$set" : document} , None ) . await ?;
94
118
95
- Ok ( doc )
119
+ Ok ( ( ) ) // it's work but is better return with document
96
120
}
97
121
98
- pub async fn _delete ( query : bson:: Document ) -> Result < Option < ArticleModel > > {
122
+ pub async fn _delete ( query : bson:: oid :: ObjectId ) -> Result < mongodb :: results :: DeleteResult > {
99
123
let database_url = env:: var ( "DATABASE_URL" ) . expect ( "DATABASE_URL is not set in .env file" ) ;
100
124
let db = Client :: with_uri_str ( & database_url) . await ?. database ( MONGO_DB ) ;
101
125
102
- let doc = ArticleModel :: find_one ( & db, query, None ) . await ?;
103
- println ! ( "{:?}" , doc) ;
126
+ // This is bad code, how to dont pass all params? -> need improve
127
+ let to_delete = ArticleModel {
128
+ id : serde:: __private:: Some ( query) ,
129
+ author : String :: from ( "" ) ,
130
+ title : String :: from ( "" ) ,
131
+ content : String :: from ( "" ) ,
132
+ created_at : String :: from ( "" ) ,
133
+ } ;
134
+
135
+ let doc = ArticleModel :: delete ( & to_delete, & db) . await ?;
104
136
105
137
Ok ( doc)
106
138
}
107
-
108
-
139
+
109
140
}
0 commit comments