From a587459a1817c0fc57b46df3f9c69567e1e775b7 Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Tue, 12 Dec 2023 18:20:56 +0000 Subject: refactor: separate model and controller --- src/db/mod.rs | 18 +++++++++++++++ src/db/users.rs | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 src/db/mod.rs create mode 100644 src/db/users.rs (limited to 'src/db') diff --git a/src/db/mod.rs b/src/db/mod.rs new file mode 100644 index 0000000..f010bf8 --- /dev/null +++ b/src/db/mod.rs @@ -0,0 +1,18 @@ +mod users; + +use sqlx::{Pool, Postgres}; + +use self::users::Users; + +#[derive(Clone)] +pub struct Database(Pool); + +impl Database { + pub fn new(pool: Pool) -> Self { + Self(pool) + } + + pub fn users(&self) -> Users { + Users::new(self.0.clone()) + } +} diff --git a/src/db/users.rs b/src/db/users.rs new file mode 100644 index 0000000..0fc7c64 --- /dev/null +++ b/src/db/users.rs @@ -0,0 +1,68 @@ +use sqlx::{Pool, Postgres}; + +use crate::users::User; +use crate::Result; + +#[derive(Clone)] +pub struct Users(Pool); +// code code code code code code code code code code code code code code +impl Users { + pub fn new(pool: Pool) -> Self { + Self(pool) + } + + pub async fn create(&self, user: User) -> Result<()> { + sqlx::query!( + r#"insert into users (username, password, email, bio, site, privacy, admin) values ($1, $2, $3, $4, $5, $6, $7)"#, + user.username, + user.password, + user.email, + user.bio, + user.site, + user.privacy as _, + user.admin + ) + .execute(&self.0) + .await?; + Ok(()) + } + + pub async fn read(&self, user_id: i32) -> Result { + Ok( + sqlx::query_as!( + User, + "select username, password, email, bio, site, privacy as \"privacy: _\", admin from users where id = $1", + user_id + ) + .fetch_one(&self.0) + .await? + ) + } + + pub async fn read_username(&self, username: &str) -> Result { + Ok( + sqlx::query_as!( + User, + "select username, password, email, bio, site, privacy as \"privacy: _\", admin from users where username = $1", + username + ) + .fetch_one(&self.0) + .await? + ) + } + + pub async fn get_id(&self, username: &str) -> Result { + Ok( + sqlx::query!("select id from users where username = $1", username) + .fetch_one(&self.0) + .await? + .id, + ) + } + + pub async fn read_all(&self) -> Result> { + Ok(sqlx::query_as("select * from users") + .fetch_all(&self.0) + .await?) + } +} -- cgit