use diesel::SqliteConnection;
use miden_node_proto::BlockProofRequest;
use miden_protocol::block::SignedBlock;
use miden_protocol::note::Nullifier;
use super::DatabaseError;
use crate::db::NoteRecord;
mod transactions;
pub use transactions::*;
mod block_headers;
pub use block_headers::*;
mod accounts;
pub use accounts::*;
mod nullifiers;
pub use nullifiers::NullifiersPage;
pub(crate) use nullifiers::*;
mod notes;
pub(crate) use notes::*;
pub(crate) fn apply_block(
conn: &mut SqliteConnection,
block: &SignedBlock,
notes: &[(NoteRecord, Option<Nullifier>)],
proving_inputs: Option<BlockProofRequest>,
) -> Result<usize, DatabaseError> {
let mut count = 0;
count += insert_block_header(conn, block.header(), block.signature(), proving_inputs)?;
count += upsert_accounts(conn, block.body().updated_accounts(), block.header().block_num())?;
count += insert_scripts(conn, notes.iter().map(|(note, _)| note))?;
count += insert_notes(conn, notes)?;
count += insert_transactions(conn, block.header().block_num(), block.body().transactions())?;
count += insert_nullifiers_for_block(
conn,
block.body().created_nullifiers(),
block.header().block_num(),
)?;
Ok(count)
}