create_rust_app/auth/
user.rs1use super::schema::users;
2use crate::diesel::{
3 insert_into, AsChangeset, ExpressionMethods, Identifiable, Insertable, QueryDsl, Queryable,
4 RunQueryDsl,
5};
6
7use super::{PaginationParams, Utc, ID};
8use crate::database::Connection;
9use diesel::QueryResult;
10use serde::{Deserialize, Serialize};
11
12#[allow(clippy::module_name_repetitions)]
13#[tsync::tsync]
14#[derive(
15 Debug, Serialize, Deserialize, Clone, Queryable, Insertable, Identifiable, AsChangeset,
16)]
17#[diesel(table_name=users)]
18pub struct User {
19 pub id: ID,
23
24 pub email: String,
25 pub hash_password: String,
26 pub activated: bool,
27
28 pub created_at: Utc,
29 #[cfg(not(feature = "database_sqlite"))]
30 pub updated_at: Utc,
31}
32
33#[allow(clippy::module_name_repetitions)]
34#[tsync::tsync]
35#[derive(Debug, Serialize, Deserialize, Clone, Insertable, AsChangeset)]
36#[diesel(table_name=users)]
37pub struct UserChangeset {
38 pub email: String,
44 pub hash_password: String,
45 pub activated: bool,
46}
47
48impl User {
49 pub fn create(db: &mut Connection, item: &UserChangeset) -> QueryResult<Self> {
54 use super::schema::users::dsl::users;
55
56 insert_into(users).values(item).get_result::<Self>(db)
57 }
58
59 pub fn read(db: &mut Connection, item_id: ID) -> QueryResult<Self> {
65 use super::schema::users::dsl::{id, users};
66
67 users.filter(id.eq(item_id)).first::<Self>(db)
68 }
69
70 pub fn find_by_email(db: &mut Connection, item_email: String) -> QueryResult<Self> {
76 use super::schema::users::dsl::{email, users};
77
78 users.filter(email.eq(item_email)).first::<Self>(db)
79 }
80
81 pub fn read_all(db: &mut Connection, pagination: &PaginationParams) -> QueryResult<Vec<Self>> {
87 use super::schema::users::dsl::{created_at, users};
88
89 users
90 .order(created_at)
91 .limit(pagination.page_size)
92 .offset(
93 pagination.page
94 * std::cmp::max(
95 pagination.page_size,
96 i64::from(PaginationParams::MAX_PAGE_SIZE),
97 ),
98 )
99 .load::<Self>(db)
100 }
101
102 pub fn update(db: &mut Connection, item_id: ID, item: &UserChangeset) -> QueryResult<Self> {
108 use super::schema::users::dsl::{id, users};
109
110 diesel::update(users.filter(id.eq(item_id)))
111 .set(item)
112 .get_result(db)
113 }
114
115 pub fn delete(db: &mut Connection, item_id: ID) -> QueryResult<usize> {
121 use super::schema::users::dsl::{id, users};
122
123 diesel::delete(users.filter(id.eq(item_id))).execute(db)
124 }
125}