Skip to content

Commit 0674b9f

Browse files
committed
Added ChatId
1 parent 1187d09 commit 0674b9f

1 file changed

Lines changed: 27 additions & 20 deletions

File tree

src/data.rs

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,22 @@ lazy_static! {
1616
#[derive(Serialize, Deserialize, Debug, Clone)]
1717
pub 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+
2535
async 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)]
5161
pub 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

141148
pub async fn get_user(id: u64) -> BotResult<Option<User>> {

0 commit comments

Comments
 (0)