cat_gateway/db/index/queries/rbac/
get_rbac_registrations.rs1use std::sync::Arc;
4
5use scylla::{
6 prepared_statement::PreparedStatement, statement::Consistency,
7 transport::iterator::TypedRowStream, DeserializeRow, SerializeRow, Session,
8};
9use tracing::error;
10
11use crate::db::{
12 index::{
13 queries::{PreparedQueries, PreparedSelectQuery},
14 session::CassandraSession,
15 },
16 types::{DbCatalystId, DbSlot, DbTransactionId, DbTxnIndex, DbUuidV4},
17};
18
19const QUERY: &str = include_str!("../cql/get_rbac_registrations_catalyst_id.cql");
21
22#[derive(SerializeRow)]
24pub(crate) struct QueryParams {
25 pub catalyst_id: DbCatalystId,
27}
28
29#[allow(dead_code)]
31#[derive(DeserializeRow)]
32pub(crate) struct Query {
33 pub txn_id: DbTransactionId,
35 pub slot_no: DbSlot,
37 pub txn_index: DbTxnIndex,
39 pub prv_txn_id: Option<DbTransactionId>,
41 pub purpose: DbUuidV4,
43}
44
45impl Query {
46 pub(crate) async fn prepare(session: Arc<Session>) -> anyhow::Result<PreparedStatement> {
48 PreparedQueries::prepare(session, QUERY, Consistency::All, true)
49 .await
50 .inspect_err(
51 |e| error!(error=%e, "Failed to prepare get RBAC registrations by Catalyst ID query"),
52 )
53 }
54
55 pub(crate) async fn execute(
57 session: &CassandraSession, params: QueryParams,
58 ) -> anyhow::Result<TypedRowStream<Query>> {
59 session
60 .execute_iter(PreparedSelectQuery::RbacRegistrationsByCatalystId, params)
61 .await?
62 .rows_stream::<Query>()
63 .map_err(Into::into)
64 }
65}