Add financial account creation endpoint
This commit is contained in:
parent
3a93b7e12f
commit
8005bb6800
6 changed files with 25 additions and 17 deletions
|
@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize};
|
|||
Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize, sqlx::Type,
|
||||
)]
|
||||
#[sqlx(type_name = "account_type", rename_all = "PascalCase")]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
pub enum AccountType {
|
||||
Asset,
|
||||
Equity,
|
||||
|
|
|
@ -28,7 +28,7 @@ pub async fn get_all_permissions_by_category(
|
|||
category: PermissionCategoryType,
|
||||
) -> Result<Vec<PermissionEntity>, AppError> {
|
||||
sqlx::query_as::<_, PermissionEntity>(
|
||||
"SELECT id, category, name value FROM public.permission WHERE category = $1;",
|
||||
"SELECT id, category, name, value FROM public.permission WHERE category = $1;",
|
||||
)
|
||||
.bind(category)
|
||||
.fetch_all(pool)
|
||||
|
@ -64,14 +64,15 @@ pub async fn get_many_permissions_by_id(
|
|||
.collect::<Vec<_>>()
|
||||
.join(",");
|
||||
|
||||
sqlx::query_as::<_, PermissionEntity>(
|
||||
"SELECT id, category, name, value FROM public.permission WHERE id IN ($1);",
|
||||
)
|
||||
.bind(ids.as_str())
|
||||
.fetch_all(pool)
|
||||
.await
|
||||
.inspect_err(|err| error!(?err, ?ids, "Unable to fetch permissions"))
|
||||
.map_err(From::from)
|
||||
let query =
|
||||
format!("SELECT id, category, name, value FROM public.permission WHERE id IN ({ids});",);
|
||||
|
||||
sqlx::query_as::<_, PermissionEntity>(query.as_str())
|
||||
.bind(ids.as_str())
|
||||
.fetch_all(pool)
|
||||
.await
|
||||
.inspect_err(|err| error!(?err, ?ids, "Unable to fetch permissions"))
|
||||
.map_err(From::from)
|
||||
}
|
||||
|
||||
pub async fn _get_permission_by_category_and_name(
|
||||
|
|
|
@ -4,8 +4,8 @@ use tracing::error;
|
|||
use crate::models::AppError;
|
||||
|
||||
use super::{
|
||||
get_all_permissions_by_category, get_many_permissions_by_id, DbPool, PermissionCategoryType,
|
||||
PermissionEntity, StatusType,
|
||||
DbPool, PermissionCategoryType, PermissionEntity, StatusType, get_all_permissions_by_category,
|
||||
get_many_permissions_by_id,
|
||||
};
|
||||
|
||||
#[allow(dead_code)]
|
||||
|
@ -38,7 +38,9 @@ pub async fn associate_account_with_user_as_owner(
|
|||
.collect::<Vec<_>>()
|
||||
.join(",");
|
||||
|
||||
let query = format!("INSERT INTO public.user_account_relation (user_id, account_id, permission_id) VALUES {values} RETURNING (id, user_id, account_id, permission_id, status);");
|
||||
let query = format!(
|
||||
"INSERT INTO public.user_account_permission (user_id, account_id, permission_id) VALUES {values} RETURNING id, user_id, account_id, permission_id, status;"
|
||||
);
|
||||
|
||||
let permission_ids = sqlx::query_as::<_, UserAccountPermissionEntity>(query.as_str())
|
||||
.fetch_all(pool)
|
||||
|
|
|
@ -56,7 +56,7 @@ impl FromRequestParts<AppState> for Session {
|
|||
|
||||
let token_id = trusted_token
|
||||
.payload_claims()
|
||||
.and_then(|claims| claims.get_claim("kid"))
|
||||
.and_then(|claims| claims.get_claim("jti"))
|
||||
.ok_or(AppError::invalid_token())
|
||||
.map(|value| value.as_str().unwrap())
|
||||
.and_then(|token_id| Uuid::try_from(token_id).map_err(|_| AppError::invalid_token()))?;
|
||||
|
|
|
@ -3,6 +3,7 @@ use serde::Deserialize;
|
|||
use crate::db::AccountType;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct AccountCreationRequest {
|
||||
pub r#type: AccountType,
|
||||
pub name: String,
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
use std::time::{Duration, SystemTime};
|
||||
|
||||
use http::{header::AUTHORIZATION, HeaderMap};
|
||||
use http::{HeaderMap, header::AUTHORIZATION};
|
||||
use humantime::format_rfc3339_seconds;
|
||||
use pasetors::{
|
||||
Local,
|
||||
claims::{Claims, ClaimsValidationRules},
|
||||
errors::{ClaimValidationError, Error as TokenError},
|
||||
footer::Footer,
|
||||
|
@ -10,14 +11,13 @@ use pasetors::{
|
|||
local,
|
||||
token::{TrustedToken, UntrustedToken},
|
||||
version4::V4,
|
||||
Local,
|
||||
};
|
||||
use tracing::error;
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::models::AppError;
|
||||
|
||||
use super::{cache, CachePool};
|
||||
use super::{CachePool, cache};
|
||||
|
||||
static AUTH_TOKEN_CACHE_KEY_PREFIX: &'static str = "debt_pirate:auth:";
|
||||
static ONE_DAY: Duration = Duration::from_secs(86_400);
|
||||
|
@ -175,7 +175,10 @@ fn map_token_error(err: TokenError) -> AppError {
|
|||
ClaimValidationError::Exp => AppError::expired_token(),
|
||||
_ => AppError::invalid_token(),
|
||||
},
|
||||
_ => AppError::invalid_token(),
|
||||
_ => {
|
||||
error!(?err);
|
||||
AppError::invalid_token()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue