Can import data from FinancesManager

This commit is contained in:
2025-05-02 16:37:30 +02:00
parent f220451e6e
commit ee43de1c82
6 changed files with 155 additions and 0 deletions

View File

@ -0,0 +1,40 @@
use crate::controllers::HttpResult;
use crate::converters::finances_manager_converter::FinancesManagerFile;
use crate::extractors::auth_extractor::AuthExtractor;
use crate::extractors::file_extractor::FileExtractor;
use crate::models::accounts::AccountType;
use crate::services::accounts_service::UpdateAccountQuery;
use crate::services::movements_service::UpdateMovementQuery;
use crate::services::{accounts_service, movements_service};
use actix_web::HttpResponse;
/// Import data from a [FinancesManager](https://gitlab.com/pierre42100/cpp-financesmanager) file
pub async fn import_financesmanager(auth: AuthExtractor, file: FileExtractor) -> HttpResult {
let file = FinancesManagerFile::parse(&String::from_utf8_lossy(&file.buff))?;
// Create each account & push the movements independently
for file_account in file.accounts {
let account = accounts_service::create(
auth.user_id(),
&UpdateAccountQuery {
name: file_account.name,
r#type: AccountType::Cash,
},
)
.await?;
for file_movement in file_account.movements {
movements_service::create(&UpdateMovementQuery {
account_id: account.id(),
time: file_movement.time,
label: file_movement.label,
file_id: None,
amount: file_movement.amount,
checked: false,
})
.await?;
}
}
Ok(HttpResponse::Accepted().finish())
}