affluence/src/db/users.rs

75 lines
1.9 KiB
Rust
Raw Normal View History

2023-05-16 15:47:13 +02:00
use super::schema::users::{self, dsl::*};
use diesel::dsl::Eq;
2023-05-16 16:25:33 +02:00
use diesel::dsl::{AsSelect, Select};
use diesel::expression::AsExpression;
2023-05-16 15:47:13 +02:00
use diesel::helper_types::Filter;
2023-05-16 16:25:33 +02:00
use diesel::prelude::*;
2023-05-16 15:47:13 +02:00
use diesel::sql_types::BigInt;
2023-05-16 16:25:33 +02:00
use diesel::sqlite::Sqlite;
use diesel::sqlite::SqliteConnection;
2023-05-15 17:38:13 +02:00
2023-05-16 15:47:13 +02:00
#[derive(Queryable, Selectable)]
#[diesel(table_name = users)]
2023-05-15 17:38:13 +02:00
pub struct User {
2023-05-16 15:47:13 +02:00
pub id: i32,
2023-05-15 17:38:13 +02:00
pub discord_id: i64,
2023-05-16 15:47:13 +02:00
pub guild_id: i64,
2023-05-15 17:38:13 +02:00
pub email: String,
pub first_name: String,
pub last_name: String,
}
2023-05-16 15:47:13 +02:00
#[derive(Insertable)]
#[diesel(table_name = users)]
pub struct NewUser {
pub discord_id: i64,
pub guild_id: i64,
pub email: String,
pub first_name: String,
pub last_name: String,
}
type All = Select<users::table, AsSelect<User, Sqlite>>;
type WithGuild<T> = Eq<guild_id, T>;
type ByGuild<T> = Filter<All, WithGuild<T>>;
impl User {
pub fn all() -> All {
users::table.select(User::as_select())
}
// pub fn by_guild<T>(guild_id_: T) -> ByGuild<T>
// where T: AsExpression<BigInt>
// {
// Self::all().filter(guild_id.eq(guild_id_))
// }
2023-05-16 16:25:33 +02:00
pub fn by_guild_id(guild_id_: i64) -> ByGuild<i64> {
2023-05-16 15:47:13 +02:00
Self::all().filter(guild_id.eq(guild_id_))
}
2023-05-16 16:25:33 +02:00
pub fn get(
conn: &mut SqliteConnection,
guild_id_: i64,
discord_id_: i64,
) -> Result<User, diesel::result::Error> {
Self::all()
.filter(guild_id.eq(guild_id_))
.filter(discord_id.eq(discord_id_))
.first(conn)
2023-05-16 15:47:13 +02:00
}
pub fn get_by_id(conn: &mut SqliteConnection, id_: i32) -> Result<User, diesel::result::Error> {
Self::all().filter(id.eq(id_)).first(conn)
}
2023-05-15 17:38:13 +02:00
}
2023-05-16 15:47:13 +02:00
impl NewUser {
pub fn insert(&self, conn: &mut SqliteConnection) -> User {
diesel::insert_into(users::table)
.values(self)
.get_result(conn)
.expect("fuck")
}
2023-05-15 17:38:13 +02:00
}