async def delete_from_aggregates(self, aggregate_identifier: ResId): sql = f"delete from Aggregates where aggregateIdentifier = %s" return await self.do_upd_sql(sql, aggregate_identifier.id())
async def __select_aggregates(self, type_, deleted, limit=None) -> List[ResId]: lmit = f"LIMIT {limit}" if limit else "" delete = "and deleted is True" if deleted else "and deleted is not True" sql = f"select aggregateIdentifier from Aggregates where type = %s {delete} {lmit}" type__ = await self.do_sql(sql, [type_]) return [ResId.of_id(x["aggregateIdentifier"]) for x in type__]
async def select_aggregate(self, aggregate_identifier: ResId): sql = f"select * from Aggregates where aggregateIdentifier = %s" return await self.do_sql(sql, [aggregate_identifier.id()])
async def select_events(self, aggregate_identifier: ResId, limit=None): limits_str = f"LIMIT {limit}" if limit else "" sql = f"select * from MdbDomainEventEntry where aggregateIdentifier=%s order by id {limits_str}" return await self.do_sql(sql, [aggregate_identifier.id()])
async def select_any_event(self, aggregate_identifier: ResId): sql = f"select eventIdentifier from MdbDomainEventEntry where aggregateIdentifier=%s LIMIT 1" return await self.do_sql(sql, [aggregate_identifier.id()])
async def load_events_of_type(self, aggregate_identifier: ResId, payload_type): return await self.do_sql( "select * from MdbDomainEventEntry where payloadType=%s and aggregateIdentifier=%s order by id", [payload_type, aggregate_identifier.id()])
async def load_all_events(self, aggregate_identifier: ResId): return await self.do_sql( "select * from MdbDomainEventEntry where aggregateIdentifier=%s order by id", [aggregate_identifier.id()])
async def delete_snapshot(self, aggregate_identifier: ResId): sql = "delete from MdbSnapshotEventEntry where aggregateIdentifier = %s;" return await self.do_sql(sql, [aggregate_identifier.id()])
async def delete_event_with_payload_like(self, agg_id: ResId, payload_type, payload_like): sql = """delete from MdbDomainEventEntry where aggregateIdentifier=%s and payloadType=%s AND payload like %s """ return await self.do_sql(sql, [agg_id.id(), payload_type, payload_like])
async def delete_aggregate(self, agg_id: ResId): sql = """delete from MdbDomainEventEntry where aggregateIdentifier=%s""" return await self.do_upd_sql(sql, [agg_id.id()])
async def delete_event(self, agg_id: ResId, payload_type, id_: int): # demand an unusual amount of information :) sql = """delete from MdbDomainEventEntry where aggregateIdentifier=%s and payloadType=%s AND id=%s""" return await self.do_sql(sql, [agg_id.id(), payload_type, id_])
async def catchup_meo(self, last_seen_id) -> List[ResId]: res = await self.select_catchup("MasterEOAggregate", last_seen_id) res_ = [ResId.of_id(x["aggregateIdentifier"]) for x in res] print(f"{len(res_)} items in catchup") return res_