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,
|
Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize, sqlx::Type,
|
||||||
)]
|
)]
|
||||||
#[sqlx(type_name = "account_type", rename_all = "PascalCase")]
|
#[sqlx(type_name = "account_type", rename_all = "PascalCase")]
|
||||||
|
#[serde(rename_all = "lowercase")]
|
||||||
pub enum AccountType {
|
pub enum AccountType {
|
||||||
Asset,
|
Asset,
|
||||||
Equity,
|
Equity,
|
||||||
|
|
|
@ -28,7 +28,7 @@ pub async fn get_all_permissions_by_category(
|
||||||
category: PermissionCategoryType,
|
category: PermissionCategoryType,
|
||||||
) -> Result<Vec<PermissionEntity>, AppError> {
|
) -> Result<Vec<PermissionEntity>, AppError> {
|
||||||
sqlx::query_as::<_, PermissionEntity>(
|
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)
|
.bind(category)
|
||||||
.fetch_all(pool)
|
.fetch_all(pool)
|
||||||
|
@ -64,9 +64,10 @@ pub async fn get_many_permissions_by_id(
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join(",");
|
.join(",");
|
||||||
|
|
||||||
sqlx::query_as::<_, PermissionEntity>(
|
let query =
|
||||||
"SELECT id, category, name, value FROM public.permission WHERE id IN ($1);",
|
format!("SELECT id, category, name, value FROM public.permission WHERE id IN ({ids});",);
|
||||||
)
|
|
||||||
|
sqlx::query_as::<_, PermissionEntity>(query.as_str())
|
||||||
.bind(ids.as_str())
|
.bind(ids.as_str())
|
||||||
.fetch_all(pool)
|
.fetch_all(pool)
|
||||||
.await
|
.await
|
||||||
|
|
|
@ -4,8 +4,8 @@ use tracing::error;
|
||||||
use crate::models::AppError;
|
use crate::models::AppError;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
get_all_permissions_by_category, get_many_permissions_by_id, DbPool, PermissionCategoryType,
|
DbPool, PermissionCategoryType, PermissionEntity, StatusType, get_all_permissions_by_category,
|
||||||
PermissionEntity, StatusType,
|
get_many_permissions_by_id,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
@ -38,7 +38,9 @@ pub async fn associate_account_with_user_as_owner(
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join(",");
|
.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())
|
let permission_ids = sqlx::query_as::<_, UserAccountPermissionEntity>(query.as_str())
|
||||||
.fetch_all(pool)
|
.fetch_all(pool)
|
||||||
|
|
|
@ -56,7 +56,7 @@ impl FromRequestParts<AppState> for Session {
|
||||||
|
|
||||||
let token_id = trusted_token
|
let token_id = trusted_token
|
||||||
.payload_claims()
|
.payload_claims()
|
||||||
.and_then(|claims| claims.get_claim("kid"))
|
.and_then(|claims| claims.get_claim("jti"))
|
||||||
.ok_or(AppError::invalid_token())
|
.ok_or(AppError::invalid_token())
|
||||||
.map(|value| value.as_str().unwrap())
|
.map(|value| value.as_str().unwrap())
|
||||||
.and_then(|token_id| Uuid::try_from(token_id).map_err(|_| AppError::invalid_token()))?;
|
.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;
|
use crate::db::AccountType;
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct AccountCreationRequest {
|
pub struct AccountCreationRequest {
|
||||||
pub r#type: AccountType,
|
pub r#type: AccountType,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
use std::time::{Duration, SystemTime};
|
use std::time::{Duration, SystemTime};
|
||||||
|
|
||||||
use http::{header::AUTHORIZATION, HeaderMap};
|
use http::{HeaderMap, header::AUTHORIZATION};
|
||||||
use humantime::format_rfc3339_seconds;
|
use humantime::format_rfc3339_seconds;
|
||||||
use pasetors::{
|
use pasetors::{
|
||||||
|
Local,
|
||||||
claims::{Claims, ClaimsValidationRules},
|
claims::{Claims, ClaimsValidationRules},
|
||||||
errors::{ClaimValidationError, Error as TokenError},
|
errors::{ClaimValidationError, Error as TokenError},
|
||||||
footer::Footer,
|
footer::Footer,
|
||||||
|
@ -10,14 +11,13 @@ use pasetors::{
|
||||||
local,
|
local,
|
||||||
token::{TrustedToken, UntrustedToken},
|
token::{TrustedToken, UntrustedToken},
|
||||||
version4::V4,
|
version4::V4,
|
||||||
Local,
|
|
||||||
};
|
};
|
||||||
use tracing::error;
|
use tracing::error;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::models::AppError;
|
use crate::models::AppError;
|
||||||
|
|
||||||
use super::{cache, CachePool};
|
use super::{CachePool, cache};
|
||||||
|
|
||||||
static AUTH_TOKEN_CACHE_KEY_PREFIX: &'static str = "debt_pirate:auth:";
|
static AUTH_TOKEN_CACHE_KEY_PREFIX: &'static str = "debt_pirate:auth:";
|
||||||
static ONE_DAY: Duration = Duration::from_secs(86_400);
|
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(),
|
ClaimValidationError::Exp => AppError::expired_token(),
|
||||||
_ => AppError::invalid_token(),
|
_ => AppError::invalid_token(),
|
||||||
},
|
},
|
||||||
_ => AppError::invalid_token(),
|
_ => {
|
||||||
|
error!(?err);
|
||||||
|
AppError::invalid_token()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue