18
18
19
19
use crate :: {
20
20
handlers:: http:: rbac:: RBACError ,
21
- parseable:: PARSEABLE ,
22
- storage:: { object_storage:: dashboard_path, ObjectStorageError } ,
23
- users:: dashboards:: { Dashboard , Tile , CURRENT_DASHBOARD_VERSION , DASHBOARDS } ,
21
+ storage:: ObjectStorageError ,
22
+ users:: dashboards:: { Dashboard , Tile , DASHBOARDS } ,
24
23
utils:: { get_hash, get_user_from_request} ,
25
24
} ;
26
25
use actix_web:: {
27
26
http:: header:: ContentType ,
28
27
web:: { self , Json , Path } ,
29
28
HttpRequest , HttpResponse , Responder ,
30
29
} ;
31
- use bytes:: Bytes ;
32
-
33
- use chrono:: Utc ;
34
30
use http:: StatusCode ;
35
31
use serde_json:: { Error as SerdeError , Map } ;
36
32
use ulid:: Ulid ;
@@ -80,24 +76,9 @@ pub async fn post(
80
76
) -> Result < impl Responder , DashboardError > {
81
77
let mut user_id = get_user_from_request ( & req) ?;
82
78
user_id = get_hash ( & user_id) ;
83
- let dashboard_id = Ulid :: new ( ) ;
84
- dashboard. dashboard_id = Some ( dashboard_id) ;
85
- dashboard. version = Some ( CURRENT_DASHBOARD_VERSION . to_string ( ) ) ;
86
- dashboard. modified = Some ( Utc :: now ( ) ) ;
87
79
dashboard. author = Some ( user_id. clone ( ) ) ;
88
- for tile in dashboard. tiles . iter_mut ( ) {
89
- tile. tile_id = Ulid :: new ( ) ;
90
- }
91
- DASHBOARDS . update ( & dashboard) . await ;
92
-
93
- let path = dashboard_path ( & user_id, & format ! ( "{}.json" , dashboard_id) ) ;
94
-
95
- let store = PARSEABLE . storage . get_object_store ( ) ;
96
- let dashboard_bytes = serde_json:: to_vec ( & dashboard) ?;
97
- store
98
- . put_object ( & path, Bytes :: from ( dashboard_bytes) )
99
- . await ?;
100
80
81
+ DASHBOARDS . create ( & user_id, & mut dashboard) . await ?;
101
82
Ok ( ( web:: Json ( dashboard) , StatusCode :: OK ) )
102
83
}
103
84
@@ -113,29 +94,11 @@ pub async fn update(
113
94
} else {
114
95
return Err ( DashboardError :: Metadata ( "Invalid dashboard ID" ) ) ;
115
96
} ;
116
-
117
- if DASHBOARDS . get_dashboard ( dashboard_id) . await . is_none ( ) {
118
- return Err ( DashboardError :: Metadata ( "Dashboard does not exist" ) ) ;
119
- }
120
- dashboard. dashboard_id = Some ( dashboard_id) ;
121
97
dashboard. author = Some ( user_id. clone ( ) ) ;
122
- dashboard. modified = Some ( Utc :: now ( ) ) ;
123
- dashboard. version = Some ( CURRENT_DASHBOARD_VERSION . to_string ( ) ) ;
124
- for tile in dashboard. tiles . iter_mut ( ) {
125
- if tile. tile_id . is_nil ( ) {
126
- tile. tile_id = Ulid :: new ( ) ;
127
- }
128
- }
129
- DASHBOARDS . update ( & dashboard) . await ;
130
98
131
- let path = dashboard_path ( & user_id, & format ! ( "{}.json" , dashboard_id) ) ;
132
-
133
- let store = PARSEABLE . storage . get_object_store ( ) ;
134
- let dashboard_bytes = serde_json:: to_vec ( & dashboard) ?;
135
- store
136
- . put_object ( & path, Bytes :: from ( dashboard_bytes) )
99
+ DASHBOARDS
100
+ . update ( & user_id, dashboard_id, & mut dashboard)
137
101
. await ?;
138
-
139
102
Ok ( ( web:: Json ( dashboard) , StatusCode :: OK ) )
140
103
}
141
104
@@ -150,14 +113,7 @@ pub async fn delete(
150
113
} else {
151
114
return Err ( DashboardError :: Metadata ( "Invalid dashboard ID" ) ) ;
152
115
} ;
153
- if DASHBOARDS . get_dashboard ( dashboard_id) . await . is_none ( ) {
154
- return Err ( DashboardError :: Metadata ( "Dashboard does not exist" ) ) ;
155
- }
156
- let path = dashboard_path ( & user_id, & format ! ( "{}.json" , dashboard_id) ) ;
157
- let store = PARSEABLE . storage . get_object_store ( ) ;
158
- store. delete_object ( & path) . await ?;
159
-
160
- DASHBOARDS . delete_dashboard ( dashboard_id) . await ;
116
+ DASHBOARDS . delete_dashboard ( & user_id, dashboard_id) . await ?;
161
117
162
118
Ok ( HttpResponse :: Ok ( ) . finish ( ) )
163
119
}
@@ -183,16 +139,8 @@ pub async fn add_tile(
183
139
tile. tile_id = Ulid :: new ( ) ;
184
140
}
185
141
dashboard. tiles . push ( tile. clone ( ) ) ;
186
- dashboard. modified = Some ( Utc :: now ( ) ) ;
187
- dashboard. version = Some ( CURRENT_DASHBOARD_VERSION . to_string ( ) ) ;
188
- DASHBOARDS . update ( & dashboard) . await ;
189
-
190
- let path = dashboard_path ( & user_id, & format ! ( "{}.json" , dashboard_id) ) ;
191
-
192
- let store = PARSEABLE . storage . get_object_store ( ) ;
193
- let dashboard_bytes = serde_json:: to_vec ( & dashboard) ?;
194
- store
195
- . put_object ( & path, Bytes :: from ( dashboard_bytes) )
142
+ DASHBOARDS
143
+ . update ( & user_id, dashboard_id, & mut dashboard)
196
144
. await ?;
197
145
198
146
Ok ( ( web:: Json ( dashboard) , StatusCode :: OK ) )
0 commit comments