cat_gateway/db/index/queries/registrations/
get_invalid.rs1use std::sync::Arc;
4
5use scylla::{
6 client::{pager::TypedRowStream, session::Session},
7 statement::prepared::PreparedStatement,
8 DeserializeRow, SerializeRow,
9};
10use tracing::error;
11
12use crate::{
13 db::{
14 index::{
15 queries::{PreparedQueries, PreparedSelectQuery},
16 session::CassandraSession,
17 },
18 types::DbSlot,
19 },
20 service::common::types::cardano::slot_no::SlotNo,
21};
22
23const GET_INVALID_REGISTRATIONS_FROM_STAKE_ADDR_QUERY: &str =
25 include_str!("../cql/get_invalid_registration_w_stake_addr.cql");
26
27#[derive(SerializeRow)]
29pub(crate) struct GetInvalidRegistrationParams {
30 pub stake_public_key: Vec<u8>,
32 slot_no: DbSlot,
34}
35
36impl GetInvalidRegistrationParams {
37 pub(crate) fn new(
39 stake_public_key: Vec<u8>,
40 slot_no: SlotNo,
41 ) -> GetInvalidRegistrationParams {
42 Self {
43 stake_public_key,
44 slot_no: u64::from(slot_no).into(),
45 }
46 }
47}
48
49#[derive(DeserializeRow)]
51pub(crate) struct GetInvalidRegistrationQuery {
52 pub problem_report: String,
54 pub stake_public_key: Vec<u8>,
56 pub vote_key: Vec<u8>,
58 pub payment_address: Vec<u8>,
60 pub is_payable: bool,
62 pub cip36: bool,
64}
65
66impl GetInvalidRegistrationQuery {
67 pub(crate) async fn prepare(session: Arc<Session>) -> anyhow::Result<PreparedStatement> {
69 PreparedQueries::prepare(
70 session,
71 GET_INVALID_REGISTRATIONS_FROM_STAKE_ADDR_QUERY,
72 scylla::statement::Consistency::All,
73 true,
74 )
75 .await
76 .inspect_err(|error| error!(error=%error, "Failed to prepare get invalid registration from stake address query."))
77 .map_err(|error| {
78 anyhow::anyhow!("{error}\n--\n{GET_INVALID_REGISTRATIONS_FROM_STAKE_ADDR_QUERY}")
79 })
80 }
81
82 pub(crate) async fn execute(
84 session: &CassandraSession,
85 params: GetInvalidRegistrationParams,
86 ) -> anyhow::Result<TypedRowStream<GetInvalidRegistrationQuery>> {
87 let iter = session
88 .execute_iter(
89 PreparedSelectQuery::InvalidRegistrationsFromStakeAddr,
90 params,
91 )
92 .await?
93 .rows_stream::<GetInvalidRegistrationQuery>()?;
94
95 Ok(iter)
96 }
97}