1818
1919use crate :: {
2020 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 } ,
2423 utils:: { get_hash, get_user_from_request} ,
2524} ;
2625use actix_web:: {
2726 http:: header:: ContentType ,
2827 web:: { self , Json , Path } ,
2928 HttpRequest , HttpResponse , Responder ,
3029} ;
31- use bytes:: Bytes ;
32-
33- use chrono:: Utc ;
3430use http:: StatusCode ;
3531use serde_json:: { Error as SerdeError , Map } ;
3632use ulid:: Ulid ;
@@ -80,24 +76,9 @@ pub async fn post(
8076) -> Result < impl Responder , DashboardError > {
8177 let mut user_id = get_user_from_request ( & req) ?;
8278 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 ( ) ) ;
8779 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 ?;
10080
81+ DASHBOARDS . create ( & user_id, & mut dashboard) . await ?;
10182 Ok ( ( web:: Json ( dashboard) , StatusCode :: OK ) )
10283}
10384
@@ -113,29 +94,11 @@ pub async fn update(
11394 } else {
11495 return Err ( DashboardError :: Metadata ( "Invalid dashboard ID" ) ) ;
11596 } ;
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) ;
12197 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 ;
13098
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)
137101 . await ?;
138-
139102 Ok ( ( web:: Json ( dashboard) , StatusCode :: OK ) )
140103}
141104
@@ -150,14 +113,7 @@ pub async fn delete(
150113 } else {
151114 return Err ( DashboardError :: Metadata ( "Invalid dashboard ID" ) ) ;
152115 } ;
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 ?;
161117
162118 Ok ( HttpResponse :: Ok ( ) . finish ( ) )
163119}
@@ -183,16 +139,8 @@ pub async fn add_tile(
183139 tile. tile_id = Ulid :: new ( ) ;
184140 }
185141 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)
196144 . await ?;
197145
198146 Ok ( ( web:: Json ( dashboard) , StatusCode :: OK ) )
0 commit comments