@@ -206,17 +206,7 @@ impl Dashboards {
206
206
. dashboard_id
207
207
. ok_or ( DashboardError :: Metadata ( "Dashboard ID must be provided" ) ) ?;
208
208
209
- // ensure the dashboard has unique title
210
- let dashboards = self . 0 . read ( ) . await ;
211
- let has_duplicate = dashboards
212
- . iter ( )
213
- . any ( |d| d. title == dashboard. title && d. dashboard_id != dashboard. dashboard_id ) ;
214
-
215
- if has_duplicate {
216
- return Err ( DashboardError :: Metadata ( "Dashboard title must be unique" ) ) ;
217
- }
218
209
let path = dashboard_path ( user_id, & format ! ( "{dashboard_id}.json" ) ) ;
219
-
220
210
let store = PARSEABLE . storage . get_object_store ( ) ;
221
211
let dashboard_bytes = serde_json:: to_vec ( & dashboard) ?;
222
212
store
@@ -237,8 +227,19 @@ impl Dashboards {
237
227
dashboard. created = Some ( Utc :: now ( ) ) ;
238
228
dashboard. set_metadata ( user_id, None ) ;
239
229
230
+ let mut dashboards = self . 0 . write ( ) . await ;
231
+
232
+ let has_duplicate = dashboards
233
+ . iter ( )
234
+ . any ( |d| d. title == dashboard. title && d. dashboard_id != dashboard. dashboard_id ) ;
235
+
236
+ if has_duplicate {
237
+ return Err ( DashboardError :: Metadata ( "Dashboard title must be unique" ) ) ;
238
+ }
239
+
240
240
self . save_dashboard ( user_id, dashboard) . await ?;
241
- self . 0 . write ( ) . await . push ( dashboard. clone ( ) ) ;
241
+
242
+ dashboards. push ( dashboard. clone ( ) ) ;
242
243
243
244
Ok ( ( ) )
244
245
}
@@ -252,16 +253,32 @@ impl Dashboards {
252
253
dashboard_id : Ulid ,
253
254
dashboard : & mut Dashboard ,
254
255
) -> Result < ( ) , DashboardError > {
255
- let existing_dashboard = self
256
- . ensure_dashboard_ownership ( dashboard_id, user_id)
257
- . await ?;
256
+ let mut dashboards = self . 0 . write ( ) . await ;
257
+
258
+ let existing_dashboard = dashboards
259
+ . iter ( )
260
+ . find ( |d| d. dashboard_id == Some ( dashboard_id) && d. author == Some ( user_id. to_string ( ) ) )
261
+ . cloned ( )
262
+ . ok_or_else ( || {
263
+ DashboardError :: Metadata (
264
+ "Dashboard does not exist or you do not have permission to access it" ,
265
+ )
266
+ } ) ?;
258
267
259
268
dashboard. set_metadata ( user_id, Some ( dashboard_id) ) ;
260
269
dashboard. created = existing_dashboard. created ;
270
+
271
+ let has_duplicate = dashboards
272
+ . iter ( )
273
+ . any ( |d| d. title == dashboard. title && d. dashboard_id != dashboard. dashboard_id ) ;
274
+
275
+ if has_duplicate {
276
+ return Err ( DashboardError :: Metadata ( "Dashboard title must be unique" ) ) ;
277
+ }
278
+
261
279
self . save_dashboard ( user_id, dashboard) . await ?;
262
280
263
- let mut dashboards = self . 0 . write ( ) . await ;
264
- dashboards. retain ( |d| d. dashboard_id != dashboard. dashboard_id ) ;
281
+ dashboards. retain ( |d| d. dashboard_id != Some ( dashboard_id) ) ;
265
282
dashboards. push ( dashboard. clone ( ) ) ;
266
283
267
284
Ok ( ( ) )
0 commit comments