Prevent race conditions
- This is a massive cope, I don't know how to code Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
use crate::config::{Config, ALPACA_ASSET_API_URL};
|
||||
use crate::database;
|
||||
use crate::types::{
|
||||
alpaca::api::incoming::{self, asset::Status},
|
||||
asset, Asset, BroadcastMessage,
|
||||
use crate::{
|
||||
config::{Config, ALPACA_ASSET_API_URL},
|
||||
database,
|
||||
state::{self, BroadcastMessage},
|
||||
types::{
|
||||
alpaca::api::incoming::{self, asset::Status},
|
||||
Asset,
|
||||
},
|
||||
};
|
||||
use axum::{extract::Path, Extension, Json};
|
||||
use http::StatusCode;
|
||||
use log::info;
|
||||
use serde::Deserialize;
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::broadcast::Sender;
|
||||
@@ -35,7 +37,7 @@ pub struct AddAssetRequest {
|
||||
|
||||
pub async fn add(
|
||||
Extension(app_config): Extension<Arc<Config>>,
|
||||
Extension(broadcast_sender): Extension<Sender<BroadcastMessage>>,
|
||||
Extension(broadcast_bus_sender): Extension<Sender<BroadcastMessage>>,
|
||||
Json(request): Json<AddAssetRequest>,
|
||||
) -> Result<(StatusCode, Json<Asset>), StatusCode> {
|
||||
if database::assets::select_where_symbol(&app_config.clickhouse_client, &request.symbol)
|
||||
@@ -66,22 +68,19 @@ pub async fn add(
|
||||
}
|
||||
|
||||
let asset = Asset::from(asset);
|
||||
database::assets::upsert(&app_config.clickhouse_client, &asset).await;
|
||||
|
||||
broadcast_sender
|
||||
broadcast_bus_sender
|
||||
.send(BroadcastMessage::Asset((
|
||||
asset::BroadcastMessage::Added,
|
||||
state::asset::BroadcastMessage::Add,
|
||||
vec![asset.clone()],
|
||||
)))
|
||||
.unwrap();
|
||||
|
||||
info!("Added asset {}.", asset.symbol);
|
||||
Ok((StatusCode::CREATED, Json(asset)))
|
||||
}
|
||||
|
||||
pub async fn delete(
|
||||
Extension(app_config): Extension<Arc<Config>>,
|
||||
Extension(broadcast_sender): Extension<Sender<BroadcastMessage>>,
|
||||
Extension(broadcast_bus_sender): Extension<Sender<BroadcastMessage>>,
|
||||
Path(symbol): Path<String>,
|
||||
) -> Result<StatusCode, StatusCode> {
|
||||
let asset = database::assets::select_where_symbol(&app_config.clickhouse_client, &symbol)
|
||||
@@ -89,15 +88,12 @@ pub async fn delete(
|
||||
.ok_or(StatusCode::NOT_FOUND)
|
||||
.unwrap();
|
||||
|
||||
broadcast_sender
|
||||
broadcast_bus_sender
|
||||
.send(BroadcastMessage::Asset((
|
||||
asset::BroadcastMessage::Deleted,
|
||||
vec![asset.clone()],
|
||||
state::asset::BroadcastMessage::Delete,
|
||||
vec![asset],
|
||||
)))
|
||||
.unwrap();
|
||||
|
||||
database::assets::delete_where_symbol(&app_config.clickhouse_client, &symbol).await;
|
||||
|
||||
info!("Deleted asset {}.", symbol);
|
||||
Ok(StatusCode::NO_CONTENT)
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
use crate::{config::Config, types::BroadcastMessage};
|
||||
use crate::{config::Config, state::BroadcastMessage};
|
||||
use axum::{
|
||||
routing::{delete, get, post},
|
||||
serve, Extension, Router,
|
||||
|
Reference in New Issue
Block a user