use ic_cdk::{query, update};
use crate::application::dtos::account_messages::*;
use crate::application::services::account_service::AccountService;
use crate::infrastructure::repositories::account_repository_impl::AccountRepositoryImpl;
use crate::infrastructure::repositories::signer_repository_impl::SignerRepositoryImpl;
use crate::utils::config::KEY_ID;
fn get_repositories() -> (AccountRepositoryImpl, SignerRepositoryImpl) {
let account_repository = AccountRepositoryImpl::global();
let signer_repository = SignerRepositoryImpl::global();
(account_repository, signer_repository)
}
#[update]
pub async fn create_account(
request: CreateAccountRequest,
) -> Result<CreateAccountResponse, String> {
let (account_repository, signer_repository) = get_repositories();
let service = AccountService::new(account_repository, signer_repository);
let owner = ic_cdk::api::caller();
service.create_account(request, owner).await
}
#[update]
pub fn unlock_account(request: UnlockAccountRequest) -> Result<UnlockAccountResponse, String> {
let (account_repository, signer_repository) = get_repositories();
let service = AccountService::new(account_repository, signer_repository);
service.unlock_account(request)
}
#[update]
pub fn transfer_account(
request: TransferAccountRequest,
) -> Result<TransferAccountResponse, String> {
let (account_repository, signer_repository) = get_repositories();
let service = AccountService::new(account_repository, signer_repository);
service.transfer_account(request)
}
#[update]
pub fn activate_account(
request: ActivateAccountRequest,
) -> Result<ActivateAccountResponse, String> {
let (account_repository, signer_repository) = get_repositories();
let service = AccountService::new(account_repository, signer_repository);
service.activate_account(request)
}
#[query]
pub fn get_account(request: GetAccountRequest) -> Result<GetAccountResponse, String> {
let (account_repository, signer_repository) = get_repositories();
let service = AccountService::new(account_repository, signer_repository);
service.get_account(request)
}
#[update]
pub async fn sign(request: SignRequest) -> Result<SignResponse, String> {
let (account_repository, signer_repository) = get_repositories();
let service = AccountService::new(account_repository, signer_repository);
service.sign(request).await
}
#[update]
pub async fn sign_eip1559_transaction(
request: SignEip1559TransactionRequest,
) -> Result<SignEip1559TransactionResponse, String> {
let (account_repository, signer_repository) = get_repositories();
let service = AccountService::new(account_repository, signer_repository);
service.sign_eip1559_transaction(request).await
}
#[query]
pub fn generate_address(
request: GenerateAddressRequest,
) -> Result<GenerateAddressResponse, String> {
let (account_repository, signer_repository) = get_repositories();
let service = AccountService::new(account_repository, signer_repository);
service.generate_address(request)
}
#[query]
pub fn get_key_id() -> String {
KEY_ID.to_string()
}
ic_cdk::export_candid!();