From 7414752ddd9c8fd2eed3383ef1429cf5e9dfdd25 Mon Sep 17 00:00:00 2001 From: traxys Date: Tue, 29 Aug 2023 21:52:36 +0200 Subject: [PATCH] Sort emails by domain --- Cargo.lock | 14 ++++++++++++-- Cargo.toml | 1 + src/main.rs | 16 ++++++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dfb337e..e901af7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1153,6 +1153,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -1273,6 +1282,7 @@ dependencies = [ "cookie", "envious", "futures-util", + "itertools 0.11.0", "jwt-simple", "once_cell", "openidconnect", @@ -1474,7 +1484,7 @@ dependencies = [ "dyn-clone", "hmac", "http", - "itertools", + "itertools 0.10.5", "log", "oauth2", "p256", @@ -2341,7 +2351,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e" dependencies = [ - "itertools", + "itertools 0.10.5", "nom", "unicode_categories", ] diff --git a/Cargo.toml b/Cargo.toml index 4773c91..d8e62a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ color-eyre = "0.6.2" cookie = "0.17.0" envious = "0.2.2" futures-util = "0.3.28" +itertools = "0.11.0" jwt-simple = "0.11.6" once_cell = "1.18.0" openidconnect = "3.3.0" diff --git a/src/main.rs b/src/main.rs index a7af419..b7c6905 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,6 +18,7 @@ use base64::{engine::general_purpose, engine::Engine}; use color_eyre::eyre; use cookie::{time::OffsetDateTime, SameSite}; use futures_util::TryStreamExt; +use itertools::Itertools; use jwt_simple::prelude::*; use once_cell::sync::Lazy; use openidconnect::{ @@ -519,7 +520,12 @@ async fn home( ) -> Result, Error> { let mails = sqlx::query_as!( Mail, - "SELECT mail FROM emails WHERE id = $1 AND alias = false", + r#" + SELECT mail + FROM emails + WHERE id = $1 AND alias = false + ORDER BY lower(substring(mail from position('@' in mail)+1 )),lower(mail) + "#, user ) .fetch_all(&state.db) @@ -527,7 +533,12 @@ async fn home( let aliases = sqlx::query_as!( Mail, - "SELECT mail FROM emails WHERE id = $1 AND alias = true", + r#" + SELECT mail + FROM emails + WHERE id = $1 AND alias = true + ORDER BY lower(substring(mail from position('@' in mail)+1 )),lower(mail) + "#, user ) .fetch_all(&state.db) @@ -552,6 +563,7 @@ async fn home( let aliases: Vec<_> = aliases .into_iter() .map(|(mail, recipients)| Alias { mail, recipients }) + .sorted_by(|a, b| a.mail.cmp(&b.mail)) .collect(); let mut context = tera::Context::new();