@@ -21,39 +21,33 @@ use crate::{
21
21
parseable:: PARSEABLE ,
22
22
storage:: { object_storage:: dashboard_path, ObjectStorageError } ,
23
23
users:: dashboards:: { Dashboard , CURRENT_DASHBOARD_VERSION , DASHBOARDS } ,
24
- utils:: { actix :: extract_session_key_from_req , get_hash, get_user_from_request} ,
24
+ utils:: { get_hash, get_user_from_request} ,
25
25
} ;
26
26
use actix_web:: {
27
27
http:: header:: ContentType ,
28
28
web:: { self , Json , Path } ,
29
29
HttpRequest , HttpResponse , Responder ,
30
30
} ;
31
31
use bytes:: Bytes ;
32
- use rand:: distributions:: DistString ;
33
32
34
- use chrono:: Utc ;
35
33
use http:: StatusCode ;
36
34
use serde_json:: Error as SerdeError ;
35
+ use ulid:: Ulid ;
37
36
38
- pub async fn list ( req : HttpRequest ) -> Result < impl Responder , DashboardError > {
39
- let key =
40
- extract_session_key_from_req ( & req) . map_err ( |e| DashboardError :: Custom ( e. to_string ( ) ) ) ?;
41
- let dashboards = DASHBOARDS . list_dashboards ( & key) . await ;
37
+ pub async fn list ( ) -> Result < impl Responder , DashboardError > {
38
+ let dashboards = DASHBOARDS . list_dashboards ( ) . await ;
42
39
43
40
Ok ( ( web:: Json ( dashboards) , StatusCode :: OK ) )
44
41
}
45
42
46
- pub async fn get (
47
- req : HttpRequest ,
48
- dashboard_id : Path < String > ,
49
- ) -> Result < impl Responder , DashboardError > {
50
- let user_id = get_user_from_request ( & req ) ? ;
51
- let dashboard_id = dashboard_id . into_inner ( ) ;
43
+ pub async fn get ( dashboard_id : Path < String > ) -> Result < impl Responder , DashboardError > {
44
+ let dashboard_id = if let Ok ( dashboard_id ) = Ulid :: from_string ( & dashboard_id . into_inner ( ) ) {
45
+ dashboard_id
46
+ } else {
47
+ return Err ( DashboardError :: Metadata ( "Invalid dashboard ID" ) ) ;
48
+ } ;
52
49
53
- if let Some ( dashboard) = DASHBOARDS
54
- . get_dashboard ( & dashboard_id, & get_hash ( & user_id) )
55
- . await
56
- {
50
+ if let Some ( dashboard) = DASHBOARDS . get_dashboard ( dashboard_id) . await {
57
51
return Ok ( ( web:: Json ( dashboard) , StatusCode :: OK ) ) ;
58
52
}
59
53
@@ -66,20 +60,13 @@ pub async fn post(
66
60
) -> Result < impl Responder , DashboardError > {
67
61
let mut user_id = get_user_from_request ( & req) ?;
68
62
user_id = get_hash ( & user_id) ;
69
- let dashboard_id = get_hash ( Utc :: now ( ) . timestamp_micros ( ) . to_string ( ) . as_str ( ) ) ;
70
- dashboard. dashboard_id = Some ( dashboard_id. clone ( ) ) ;
63
+ let dashboard_id = Ulid :: new ( ) ;
64
+ dashboard. dashboard_id = dashboard_id;
71
65
dashboard. version = Some ( CURRENT_DASHBOARD_VERSION . to_string ( ) ) ;
72
66
73
- dashboard. user_id = Some ( user_id. clone ( ) ) ;
67
+ dashboard. author = user_id. clone ( ) ;
74
68
for tile in dashboard. tiles . iter_mut ( ) {
75
- tile. tile_id = Some ( get_hash (
76
- format ! (
77
- "{}{}" ,
78
- rand:: distributions:: Alphanumeric . sample_string( & mut rand:: thread_rng( ) , 8 ) ,
79
- Utc :: now( ) . timestamp_micros( )
80
- )
81
- . as_str ( ) ,
82
- ) ) ;
69
+ tile. tile_id = Ulid :: new ( ) ;
83
70
}
84
71
DASHBOARDS . update ( & dashboard) . await ;
85
72
@@ -101,21 +88,21 @@ pub async fn update(
101
88
) -> Result < impl Responder , DashboardError > {
102
89
let mut user_id = get_user_from_request ( & req) ?;
103
90
user_id = get_hash ( & user_id) ;
104
- let dashboard_id = dashboard_id. into_inner ( ) ;
91
+ let dashboard_id = if let Ok ( dashboard_id) = Ulid :: from_string ( & dashboard_id. into_inner ( ) ) {
92
+ dashboard_id
93
+ } else {
94
+ return Err ( DashboardError :: Metadata ( "Invalid dashboard ID" ) ) ;
95
+ } ;
105
96
106
- if DASHBOARDS
107
- . get_dashboard ( & dashboard_id, & user_id)
108
- . await
109
- . is_none ( )
110
- {
97
+ if DASHBOARDS . get_dashboard ( dashboard_id) . await . is_none ( ) {
111
98
return Err ( DashboardError :: Metadata ( "Dashboard does not exist" ) ) ;
112
99
}
113
- dashboard. dashboard_id = Some ( dashboard_id. to_string ( ) ) ;
114
- dashboard. user_id = Some ( user_id. clone ( ) ) ;
100
+ dashboard. dashboard_id = dashboard_id;
101
+ dashboard. author = user_id. clone ( ) ;
115
102
dashboard. version = Some ( CURRENT_DASHBOARD_VERSION . to_string ( ) ) ;
116
103
for tile in dashboard. tiles . iter_mut ( ) {
117
- if tile. tile_id . is_none ( ) {
118
- tile. tile_id = Some ( get_hash ( Utc :: now ( ) . timestamp_micros ( ) . to_string ( ) . as_str ( ) ) ) ;
104
+ if tile. tile_id . is_nil ( ) {
105
+ tile. tile_id = Ulid :: new ( ) ;
119
106
}
120
107
}
121
108
DASHBOARDS . update ( & dashboard) . await ;
@@ -137,19 +124,19 @@ pub async fn delete(
137
124
) -> Result < HttpResponse , DashboardError > {
138
125
let mut user_id = get_user_from_request ( & req) ?;
139
126
user_id = get_hash ( & user_id) ;
140
- let dashboard_id = dashboard_id. into_inner ( ) ;
141
- if DASHBOARDS
142
- . get_dashboard ( & dashboard_id , & user_id )
143
- . await
144
- . is_none ( )
145
- {
127
+ let dashboard_id = if let Ok ( dashboard_id) = Ulid :: from_string ( & dashboard_id . into_inner ( ) ) {
128
+ dashboard_id
129
+ } else {
130
+ return Err ( DashboardError :: Metadata ( "Invalid dashboard ID" ) ) ;
131
+ } ;
132
+ if DASHBOARDS . get_dashboard ( dashboard_id ) . await . is_none ( ) {
146
133
return Err ( DashboardError :: Metadata ( "Dashboard does not exist" ) ) ;
147
134
}
148
135
let path = dashboard_path ( & user_id, & format ! ( "{}.json" , dashboard_id) ) ;
149
136
let store = PARSEABLE . storage . get_object_store ( ) ;
150
137
store. delete_object ( & path) . await ?;
151
138
152
- DASHBOARDS . delete_dashboard ( & dashboard_id) . await ;
139
+ DASHBOARDS . delete_dashboard ( dashboard_id) . await ;
153
140
154
141
Ok ( HttpResponse :: Ok ( ) . finish ( ) )
155
142
}
0 commit comments