@@ -16,12 +16,22 @@ lazy_static! {
1616#[ derive( Serialize , Deserialize , Debug , Clone ) ]
1717pub struct User {
1818 pub id : u64 ,
19+ pub chat_id : Option < i64 > ,
1920 pub name : String ,
2021 pub requests_amount : u64 ,
2122 pub timestamp : u64 ,
2223 pub register_timestamp : u64 ,
2324}
2425
26+ pub enum UserColumn {
27+ Id ,
28+ Name ,
29+ RequestsAmount ,
30+ Timestamp ,
31+ ChatId ,
32+ RegisterTimestamp
33+ }
34+
2535async fn read_users ( ) -> BotResult < HashMap < u64 , User > > {
2636 let path = Path :: new ( FILE_PATH ) ;
2737 if !path. exists ( ) {
@@ -50,7 +60,7 @@ pub fn current_timestamp() -> u64 {
5060#[ allow( dead_code) ]
5161pub async fn set_data (
5262 user_id : u64 ,
53- column : & str ,
63+ column : UserColumn ,
5464 value : & str ,
5565) -> BotResult < ( ) > {
5666 let _lock = DATA_MUTEX . lock ( ) . await ;
@@ -60,11 +70,12 @@ pub async fn set_data(
6070 . ok_or ( "User not found" ) ?;
6171
6272 match column {
63- "name" => user. name = value. to_string ( ) ,
64- "requests_amount" => user. requests_amount = value. parse ( ) ?,
65- "timestamp" => user. timestamp = value. parse ( ) ?,
66- "id" => return Err ( "Cannot modify user ID" . into ( ) ) ,
67- _ => return Err ( "Invalid column name" . into ( ) ) ,
73+ UserColumn :: Name => user. name = value. to_string ( ) ,
74+ UserColumn :: RequestsAmount => user. requests_amount = value. parse ( ) ?,
75+ UserColumn :: Timestamp => user. timestamp = value. parse ( ) ?,
76+ UserColumn :: Id => return Err ( "Cannot modify user ID" . into ( ) ) ,
77+ UserColumn :: RegisterTimestamp => return Err ( "Cannot modify user register timestamp" . into ( ) ) ,
78+ UserColumn :: ChatId => user. chat_id = value. parse ( ) . ok ( ) ,
6879 }
6980
7081 write_users ( & users) . await ?;
@@ -118,24 +129,20 @@ pub async fn remove_user(id: u64) -> BotResult<()> {
118129}
119130
120131#[ allow( dead_code) ]
121- pub async fn get_data ( user_id : u64 , column : & str ) -> BotResult < Option < String > > {
132+ pub async fn get_data ( user_id : u64 , column : UserColumn ) -> BotResult < Option < String > > {
122133 let _lock = DATA_MUTEX . lock ( ) . await ;
123134 let users = read_users ( ) . await ?;
124135
125- match users. get ( & user_id) {
126- Some ( user) => {
127- let value = match column {
128- "id" => user. id . to_string ( ) ,
129- "name" => user. name . clone ( ) ,
130- "requests_amount" => user. requests_amount . to_string ( ) ,
131- "timestamp" => user. timestamp . to_string ( ) ,
132- "register_timestamp" => user. register_timestamp . to_string ( ) ,
133- _ => return Ok ( None ) ,
134- } ;
135- Ok ( Some ( value) )
136+ Ok ( users. get ( & user_id) . and_then ( |user| {
137+ match column {
138+ UserColumn :: Id => Some ( user. id . to_string ( ) ) ,
139+ UserColumn :: Name => Some ( user. name . clone ( ) ) ,
140+ UserColumn :: RequestsAmount => Some ( user. requests_amount . to_string ( ) ) ,
141+ UserColumn :: Timestamp => Some ( user. timestamp . to_string ( ) ) ,
142+ UserColumn :: ChatId => user. chat_id . map ( |id| id. to_string ( ) ) ,
143+ UserColumn :: RegisterTimestamp => Some ( user. register_timestamp . to_string ( ) ) ,
136144 }
137- None => Ok ( None ) ,
138- }
145+ } ) )
139146}
140147
141148pub async fn get_user ( id : u64 ) -> BotResult < Option < User > > {
0 commit comments