|
|
@@ -1,11 +1,12 @@
|
|
|
use actix_web::{post, web, HttpResponse, HttpRequest};
|
|
|
use mongodb::Database;
|
|
|
+use bson::oid::ObjectId;
|
|
|
|
|
|
-use crate::models::transaction::Transaction;
|
|
|
+use crate::models::transaction::{Transaction, ResponseTransaction};
|
|
|
use crate::models::account::Account;
|
|
|
use crate::app_error::AppError;
|
|
|
use crate::auth::user_auth;
|
|
|
-use crate::dto::transaction::CreateInput;
|
|
|
+use crate::dto::transaction::{CreateInput, SearchInput};
|
|
|
|
|
|
#[post("/api/transaction")]
|
|
|
pub async fn create_route(
|
|
|
@@ -14,8 +15,8 @@ pub async fn create_route(
|
|
|
request: HttpRequest
|
|
|
) -> Result<HttpResponse, AppError> {
|
|
|
let user = user_auth(&db, &request).await?;
|
|
|
- let transaction_collection = db.collection::<Transaction>("transactions");
|
|
|
|
|
|
+ let transaction_collection = db.collection::<Transaction>("transactions");
|
|
|
let account_collection = db.collection::<Account>("accounts");
|
|
|
Account::user_owns(&account_collection, &user, &body.account).await?;
|
|
|
|
|
|
@@ -23,3 +24,30 @@ pub async fn create_route(
|
|
|
let transaction = Transaction::find_one(&transaction_collection, id).await?;
|
|
|
Ok(HttpResponse::Ok().json(transaction.response()))
|
|
|
}
|
|
|
+
|
|
|
+#[post("/api/transaction/search")]
|
|
|
+pub async fn get_many_route(
|
|
|
+ db: web::Data<Database>,
|
|
|
+ body: web::Json<SearchInput>,
|
|
|
+ request: HttpRequest
|
|
|
+) -> Result<HttpResponse, AppError> {
|
|
|
+ let user = user_auth(&db, &request).await?;
|
|
|
+
|
|
|
+ let transaction_collection = db.collection::<Transaction>("transactions");
|
|
|
+ let account_collection = db.collection::<Account>("accounts");
|
|
|
+ Account::user_owns(&account_collection, &user, &body.account).await?;
|
|
|
+
|
|
|
+ let account = ObjectId::parse_str(body.account.clone())?;
|
|
|
+ let transactions = Transaction::find(
|
|
|
+ &transaction_collection,
|
|
|
+ account,
|
|
|
+ body.from.clone(),
|
|
|
+ body.to.clone())
|
|
|
+ .await?;
|
|
|
+ let response_transactions: Vec<ResponseTransaction> = transactions
|
|
|
+ .into_iter()
|
|
|
+ .map(Transaction::response)
|
|
|
+ .collect();
|
|
|
+
|
|
|
+ Ok(HttpResponse::Ok().json(response_transactions))
|
|
|
+}
|