summaryrefslogtreecommitdiffstats
path: root/src/util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.rs')
-rw-r--r--src/util.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/util.rs b/src/util.rs
new file mode 100644
index 0000000..944feb6
--- /dev/null
+++ b/src/util.rs
@@ -0,0 +1,37 @@
+use actix::{Handler, Message};
+use diesel::{ExpressionMethods, MysqlConnection, QueryDsl, RunQueryDsl};
+
+use crate::error::ServiceError;
+use crate::model::{DbExecutor, User};
+use crate::schema::users::{columns as user_columns, dsl::users};
+
+pub struct UserRequest(pub String);
+
+impl Message for UserRequest {
+ type Result = Result<User, ServiceError>;
+}
+
+impl Handler<UserRequest> for DbExecutor {
+ type Result = Result<User, ServiceError>;
+
+ fn handle(&mut self, req: UserRequest, _: &mut Self::Context) -> Self::Result {
+ let conn: &MysqlConnection = &self.0.get().unwrap();
+
+ users
+ .filter(user_columns::name.eq(req.0))
+ .first::<User>(conn)
+ .map_err(|_| ServiceError::NotFound)
+ }
+}
+
+pub mod filters {
+ use num_format::{CustomFormat, ToFormattedString};
+
+ pub fn fmt_points(amount: &u64) -> Result<String, askama::Error> {
+ let format = CustomFormat::builder()
+ .separator(" ")
+ .build()
+ .expect("Format is fine");
+ Ok(format!("{} JKP", (*amount).to_formatted_string(&format)))
+ }
+}