use anyhow::Result; use persmgr_derive::TableMeta; use sqlx::prelude::FromRow; use crate::db::{ CurrPool, tables::{ForeignKey, TableMeta, assignables::ranks::Rank, user::User}, }; #[derive(Debug, Default, Clone, FromRow, TableMeta)] #[meta(table = "records_ranks")] pub struct RankRecord { pub id: i64, pub user_id: ForeignKey, pub rank_id: ForeignKey, pub author_id: ForeignKey, pub created_at: i64, } impl RankRecord { pub async fn insert_new(&self, pool: &CurrPool) -> Result { let session = sqlx::query_as!( RankRecord, r#" INSERT INTO records_ranks (user_id, rank_id, author_id, created_at) VALUES ($1, $2, $3, $4) RETURNING * "#, *self.user_id, *self.rank_id, *self.author_id, self.created_at, ) .fetch_one(pool) .await?; Ok(session) } pub async fn get_by_id(pool: &CurrPool, id: i64) -> anyhow::Result { let session = sqlx::query_as!(RankRecord, "SELECT * FROM records_ranks WHERE id = $1", id) .fetch_one(pool) .await?; Ok(session) } pub async fn get_by_user_id(pool: &CurrPool, id: i64) -> anyhow::Result> { let session = sqlx::query_as!( RankRecord, "SELECT * FROM records_ranks WHERE user_id = $1", id ) .fetch_all(pool) .await?; Ok(session) } pub async fn get_by_author_id(pool: &CurrPool, id: i64) -> anyhow::Result> { let session = sqlx::query_as!( RankRecord, "SELECT * FROM records_ranks WHERE author_id = $1", id ) .fetch_all(pool) .await?; Ok(session) } pub async fn get_by_rank_id(pool: &CurrPool, id: i64) -> anyhow::Result> { let session = sqlx::query_as!( RankRecord, "SELECT * FROM records_ranks WHERE rank_id = $1", id ) .fetch_all(pool) .await?; Ok(session) } }