Add first routes for accounts management
This commit is contained in:
64
moneymgr_backend/src/services/accounts_service.rs
Normal file
64
moneymgr_backend/src/services/accounts_service.rs
Normal file
@ -0,0 +1,64 @@
|
||||
use crate::connections::db_connection::db;
|
||||
use crate::models::accounts::{Account, AccountID, NewAccount};
|
||||
use crate::models::users::UserID;
|
||||
use crate::schema::accounts;
|
||||
use crate::utils::time_utils::time;
|
||||
use diesel::RunQueryDsl;
|
||||
use diesel::prelude::*;
|
||||
|
||||
#[derive(serde::Deserialize)]
|
||||
pub struct UpdateAccountQuery {
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
/// Create a new account
|
||||
pub async fn create(user_id: UserID, query: &UpdateAccountQuery) -> anyhow::Result<Account> {
|
||||
let new_account = NewAccount {
|
||||
name: query.name.as_str(),
|
||||
user_id: user_id.0,
|
||||
time_create: time() as i64,
|
||||
time_update: time() as i64,
|
||||
};
|
||||
|
||||
let res: Account = diesel::insert_into(accounts::table)
|
||||
.values(&new_account)
|
||||
.get_result(&mut db()?)?;
|
||||
|
||||
update(res.id(), query).await?;
|
||||
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
/// Update an account
|
||||
pub async fn update(id: AccountID, q: &UpdateAccountQuery) -> anyhow::Result<()> {
|
||||
diesel::update(accounts::dsl::accounts.filter(accounts::dsl::id.eq(id.0)))
|
||||
.set((
|
||||
accounts::dsl::time_update.eq(time() as i64),
|
||||
accounts::dsl::name.eq(&q.name),
|
||||
))
|
||||
.execute(&mut db()?)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Get a single account by its id
|
||||
pub async fn get_by_id(account_id: AccountID) -> anyhow::Result<Account> {
|
||||
Ok(accounts::table
|
||||
.filter(accounts::dsl::id.eq(account_id.0))
|
||||
.get_result(&mut db()?)?)
|
||||
}
|
||||
|
||||
/// Get the accounts of a user
|
||||
pub async fn get_list_user(id: UserID) -> anyhow::Result<Vec<Account>> {
|
||||
Ok(accounts::table
|
||||
.filter(accounts::dsl::user_id.eq(id.0))
|
||||
.get_results(&mut db()?)?)
|
||||
}
|
||||
|
||||
/// Delete an account
|
||||
pub async fn delete(id: AccountID) -> anyhow::Result<()> {
|
||||
diesel::delete(accounts::dsl::accounts.filter(accounts::dsl::id.eq(id.0)))
|
||||
.execute(&mut db()?)?;
|
||||
|
||||
Ok(())
|
||||
}
|
@ -1,2 +1,3 @@
|
||||
pub mod accounts_service;
|
||||
pub mod tokens_service;
|
||||
pub mod users_service;
|
||||
|
@ -4,7 +4,7 @@ use crate::connections::db_connection::db;
|
||||
use crate::constants;
|
||||
use crate::models::tokens::{NewToken, Token, TokenID};
|
||||
use crate::models::users::UserID;
|
||||
use crate::schema::token;
|
||||
use crate::schema::tokens;
|
||||
use crate::utils::rand_utils::rand_string;
|
||||
use crate::utils::time_utils::time;
|
||||
|
||||
@ -41,7 +41,7 @@ pub async fn create(new_token: NewTokenInfo) -> anyhow::Result<Token> {
|
||||
right_attachment: new_token.right_attachment,
|
||||
};
|
||||
|
||||
let res = diesel::insert_into(token::table)
|
||||
let res = diesel::insert_into(tokens::table)
|
||||
.values(&t)
|
||||
.get_result(&mut db()?)?;
|
||||
|
||||
@ -50,36 +50,36 @@ pub async fn create(new_token: NewTokenInfo) -> anyhow::Result<Token> {
|
||||
|
||||
/// Get a single token by its id
|
||||
pub async fn get_by_id(token_id: TokenID) -> anyhow::Result<Token> {
|
||||
Ok(token::table
|
||||
.filter(token::dsl::id.eq(token_id.0))
|
||||
Ok(tokens::table
|
||||
.filter(tokens::dsl::id.eq(token_id.0))
|
||||
.get_result(&mut db()?)?)
|
||||
}
|
||||
|
||||
/// Get a single token by its name
|
||||
pub fn get_by_name(name: &str) -> anyhow::Result<Token> {
|
||||
Ok(token::table
|
||||
.filter(token::dsl::name.eq(name))
|
||||
Ok(tokens::table
|
||||
.filter(tokens::dsl::name.eq(name))
|
||||
.get_result(&mut db()?)?)
|
||||
}
|
||||
|
||||
/// Get a single token by its value
|
||||
pub async fn get_by_value(value: &str) -> anyhow::Result<Token> {
|
||||
Ok(token::table
|
||||
.filter(token::dsl::token_value.eq(value))
|
||||
Ok(tokens::table
|
||||
.filter(tokens::dsl::token_value.eq(value))
|
||||
.get_result(&mut db()?)?)
|
||||
}
|
||||
|
||||
/// Get the token of a user
|
||||
pub async fn get_list_user(id: UserID) -> anyhow::Result<Vec<Token>> {
|
||||
Ok(token::table
|
||||
.filter(token::dsl::user_id.eq(id.0))
|
||||
Ok(tokens::table
|
||||
.filter(tokens::dsl::user_id.eq(id.0))
|
||||
.get_results(&mut db()?)?)
|
||||
}
|
||||
|
||||
/// Update last used value of a token
|
||||
pub async fn update_time_used(token: &Token) -> anyhow::Result<()> {
|
||||
diesel::update(token::dsl::token.filter(token::dsl::id.eq(token.id().0)))
|
||||
.set(token::dsl::time_used.eq(time() as i64))
|
||||
diesel::update(tokens::dsl::tokens.filter(tokens::dsl::id.eq(token.id().0)))
|
||||
.set(tokens::dsl::time_used.eq(time() as i64))
|
||||
.execute(&mut db()?)?;
|
||||
Ok(())
|
||||
}
|
||||
@ -87,10 +87,10 @@ pub async fn update_time_used(token: &Token) -> anyhow::Result<()> {
|
||||
/// Delete the token of a user
|
||||
pub async fn delete(user_id: UserID, token_id: TokenID) -> anyhow::Result<()> {
|
||||
diesel::delete(
|
||||
token::dsl::token.filter(
|
||||
token::dsl::id
|
||||
tokens::dsl::tokens.filter(
|
||||
tokens::dsl::id
|
||||
.eq(token_id.0)
|
||||
.and(token::dsl::user_id.eq(user_id.0)),
|
||||
.and(tokens::dsl::user_id.eq(user_id.0)),
|
||||
),
|
||||
)
|
||||
.execute(&mut db()?)?;
|
||||
|
Reference in New Issue
Block a user