Skip to content

Commit 714dfd3

Browse files
committed
Update SignedEntityStore adapters
To fit with new SignedEntityType.
1 parent 810ba7d commit 714dfd3

File tree

1 file changed

+45
-25
lines changed

1 file changed

+45
-25
lines changed

mithril-aggregator/src/database/provider/signed_entity.rs

Lines changed: 45 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ impl From<Snapshot> for SignedEntityRecord {
4040
let entity = serde_json::to_string(&other).unwrap();
4141
SignedEntityRecord {
4242
signed_entity_id: other.digest,
43-
signed_entity_type: SignedEntityType::CardanoImmutableFilesFull,
43+
signed_entity_type: SignedEntityType::CardanoImmutableFilesFull(other.beacon),
4444
certificate_id: other.certificate_hash,
4545
entity,
4646
created_at: other.created_at,
@@ -62,21 +62,20 @@ impl SqLiteEntity for SignedEntityRecord {
6262
let signed_entity_id = row.get::<String, _>(0);
6363
let signed_entity_type_id_int = row.get::<i64, _>(1);
6464
let certificate_id = row.get::<String, _>(2);
65-
let entity_str = row.get::<String, _>(3);
66-
let created_at = row.get::<String, _>(4);
65+
let beacon_str = row.get::<String, _>(3);
66+
let entity_str = row.get::<String, _>(4);
67+
let created_at = row.get::<String, _>(5);
6768

6869
let signed_entity_record = Self {
6970
signed_entity_id,
70-
signed_entity_type: SignedEntityType::from_repr(
71+
signed_entity_type: SignedEntityType::hydrate(
7172
signed_entity_type_id_int.try_into().map_err(|e| {
7273
HydrationError::InvalidData(format!(
7374
"Could not cast i64 ({signed_entity_type_id_int}) to u64. Error: '{e}'"
7475
))
7576
})?,
76-
)
77-
.ok_or(HydrationError::InconsistentType(format!(
78-
"Could not convert ({signed_entity_type_id_int}) to SignedEntityType"
79-
)))?,
77+
&beacon_str,
78+
)?,
8079
certificate_id,
8180
entity: entity_str,
8281
created_at,
@@ -98,6 +97,7 @@ impl SqLiteEntity for SignedEntityRecord {
9897
"integer",
9998
),
10099
("certificate_id", "{:signed_entity:}.certificate_id", "text"),
100+
("beacon", "{:signed_entity:}.beacon", "text"),
101101
("entity", "{:signed_entity:}.entity", "text"),
102102
("created_at", "{:signed_entity:}.created_at", "text"),
103103
])
@@ -129,7 +129,7 @@ impl<'client> SignedEntityRecordProvider<'client> {
129129
&self,
130130
signed_entity_type: SignedEntityType,
131131
) -> Result<WhereCondition, StdError> {
132-
let signed_entity_type_id: i64 = i64::try_from(signed_entity_type as usize)?;
132+
let signed_entity_type_id: i64 = signed_entity_type.index() as i64;
133133

134134
Ok(WhereCondition::new(
135135
"signed_entity_type_id = ?*",
@@ -197,11 +197,12 @@ impl<'conn> InsertSignedEntityRecordProvider<'conn> {
197197

198198
fn get_insert_condition(&self, signed_entity_record: SignedEntityRecord) -> WhereCondition {
199199
WhereCondition::new(
200-
"(signed_entity_id, signed_entity_type_id, certificate_id, entity, created_at) values (?*, ?*, ?*, ?*, ?*)",
200+
"(signed_entity_id, signed_entity_type_id, certificate_id, beacon, entity, created_at) values (?*, ?*, ?*, ?*, ?*, ?*)",
201201
vec![
202202
Value::String(signed_entity_record.signed_entity_id),
203-
Value::Integer(i64::try_from(signed_entity_record.signed_entity_type as usize).unwrap()),
203+
Value::Integer(signed_entity_record.signed_entity_type.index() as i64),
204204
Value::String(signed_entity_record.certificate_id),
205+
Value::String(signed_entity_record.signed_entity_type.get_json_beacon().unwrap()),
205206
Value::String(signed_entity_record.entity),
206207
Value::String(signed_entity_record.created_at),
207208
],
@@ -318,7 +319,7 @@ impl StoreAdapter for SignedEntityStoreAdapter {
318319

319320
#[cfg(test)]
320321
mod tests {
321-
use mithril_common::test_utils::fake_data;
322+
use mithril_common::{entities::Beacon, test_utils::fake_data};
322323

323324
use crate::database::migration::get_migrations;
324325

@@ -332,7 +333,9 @@ mod tests {
332333
let entity = serde_json::to_string(&snapshot).unwrap();
333334
SignedEntityRecord {
334335
signed_entity_id: snapshot.digest,
335-
signed_entity_type: SignedEntityType::CardanoImmutableFilesFull,
336+
signed_entity_type: SignedEntityType::CardanoImmutableFilesFull(
337+
snapshot.beacon,
338+
),
336339
certificate_id: snapshot.certificate_hash,
337340
entity,
338341
created_at: snapshot.created_at,
@@ -370,16 +373,26 @@ mod tests {
370373
.bind(1, signed_entity_record.signed_entity_id.as_str())
371374
.unwrap();
372375
statement
373-
.bind(2, signed_entity_record.signed_entity_type as i64)
376+
.bind(2, signed_entity_record.signed_entity_type.index() as i64)
374377
.unwrap();
375378
statement
376379
.bind(3, signed_entity_record.certificate_id.as_str())
377380
.unwrap();
378381
statement
379-
.bind(4, signed_entity_record.entity.as_str())
382+
.bind(
383+
4,
384+
signed_entity_record
385+
.signed_entity_type
386+
.get_json_beacon()
387+
.unwrap()
388+
.as_str(),
389+
)
390+
.unwrap();
391+
statement
392+
.bind(5, signed_entity_record.entity.as_str())
380393
.unwrap();
381394
statement
382-
.bind(5, signed_entity_record.created_at.as_str())
395+
.bind(6, signed_entity_record.created_at.as_str())
383396
.unwrap();
384397

385398
statement.next().unwrap();
@@ -405,7 +418,7 @@ mod tests {
405418
let aliases = SourceAlias::new(&[("{:signed_entity:}", "se")]);
406419

407420
assert_eq!(
408-
"se.signed_entity_id as signed_entity_id, se.signed_entity_type_id as signed_entity_type_id, se.certificate_id as certificate_id, se.entity as entity, se.created_at as created_at"
421+
"se.signed_entity_id as signed_entity_id, se.signed_entity_type_id as signed_entity_type_id, se.certificate_id as certificate_id, se.beacon as beacon, se.entity as entity, se.created_at as created_at"
409422
.to_string(),
410423
projection.expand(aliases)
411424
);
@@ -422,7 +435,7 @@ mod tests {
422435

423436
assert_eq!("signed_entity_type_id = ?1".to_string(), filter);
424437
assert_eq!(
425-
vec![Value::Integer(SignedEntityType::dummy() as i64)],
438+
vec![Value::Integer(SignedEntityType::dummy().index() as i64)],
426439
values
427440
);
428441
}
@@ -451,16 +464,20 @@ mod tests {
451464
let (values, params) = condition.expand();
452465

453466
assert_eq!(
454-
"(signed_entity_id, signed_entity_type_id, certificate_id, entity, created_at) values (?1, ?2, ?3, ?4, ?5)".to_string(),
467+
"(signed_entity_id, signed_entity_type_id, certificate_id, beacon, entity, created_at) values (?1, ?2, ?3, ?4, ?5, ?6)".to_string(),
455468
values
456469
);
457470
assert_eq!(
458471
vec![
459472
Value::String(signed_entity_record.signed_entity_id),
460-
Value::Integer(
461-
i64::try_from(signed_entity_record.signed_entity_type as usize).unwrap()
462-
),
473+
Value::Integer(signed_entity_record.signed_entity_type.index() as i64),
463474
Value::String(signed_entity_record.certificate_id),
475+
Value::String(
476+
signed_entity_record
477+
.signed_entity_type
478+
.get_json_beacon()
479+
.unwrap()
480+
),
464481
Value::String(signed_entity_record.entity),
465482
Value::String(signed_entity_record.created_at),
466483
],
@@ -485,14 +502,17 @@ mod tests {
485502
assert_eq!(vec![first_signed_entity_type], signed_entity_records);
486503

487504
let signed_entity_records: Vec<SignedEntityRecord> = provider
488-
.get_by_signed_entity_type(SignedEntityType::CardanoImmutableFilesFull)
505+
.get_by_signed_entity_type(SignedEntityType::CardanoImmutableFilesFull(
506+
Beacon::default(),
507+
))
489508
.unwrap()
490509
.collect();
491510
let expected_signed_entity_records: Vec<SignedEntityRecord> = signed_entity_records
492511
.iter()
493512
.filter_map(|se| {
494-
(se.signed_entity_type == SignedEntityType::CardanoImmutableFilesFull)
495-
.then_some(se.to_owned())
513+
(se.signed_entity_type.index()
514+
== SignedEntityType::CardanoImmutableFilesFull(Beacon::default()).index())
515+
.then_some(se.to_owned())
496516
})
497517
.collect();
498518
assert_eq!(expected_signed_entity_records, signed_entity_records);

0 commit comments

Comments
 (0)