mirror of
https://github.com/basicswap/basicswap.git
synced 2024-12-22 19:49:20 +00:00
133 lines
5.7 KiB
Python
133 lines
5.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright (c) 2023-2024 The Basicswap Developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
from .db import (
|
|
Concepts,
|
|
)
|
|
|
|
|
|
def remove_expired_data(self, time_offset: int = 0):
|
|
now: int = self.getTime()
|
|
try:
|
|
cursor = self.openDB()
|
|
|
|
active_bids_insert: str = self.activeBidsQueryStr("", "b2")
|
|
query_str = f"""
|
|
SELECT o.offer_id FROM offers o
|
|
WHERE o.expire_at <= :expired_at AND 0 = (SELECT COUNT(*) FROM bids b2 WHERE b2.offer_id = o.offer_id AND {active_bids_insert})
|
|
"""
|
|
num_offers = 0
|
|
num_bids = 0
|
|
offer_rows = cursor.execute(
|
|
query_str, {"now": now, "expired_at": now - time_offset}
|
|
)
|
|
for offer_row in offer_rows:
|
|
num_offers += 1
|
|
bid_rows = cursor.execute(
|
|
"SELECT bids.bid_id FROM bids WHERE bids.offer_id = :offer_id",
|
|
{"offer_id": offer_row[0]},
|
|
)
|
|
for bid_row in bid_rows:
|
|
num_bids += 1
|
|
cursor.execute(
|
|
"DELETE FROM transactions WHERE transactions.bid_id = :bid_id",
|
|
{"bid_id": bid_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM eventlog WHERE eventlog.linked_type = :type_ind AND eventlog.linked_id = :bid_id",
|
|
{"type_ind": int(Concepts.BID), "bid_id": bid_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM automationlinks WHERE automationlinks.linked_type = :type_ind AND automationlinks.linked_id = :bid_id",
|
|
{"type_ind": int(Concepts.BID), "bid_id": bid_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM prefunded_transactions WHERE prefunded_transactions.linked_type = :type_ind AND prefunded_transactions.linked_id = :bid_id",
|
|
{"type_ind": int(Concepts.BID), "bid_id": bid_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM history WHERE history.concept_type = :type_ind AND history.concept_id = :bid_id",
|
|
{"type_ind": int(Concepts.BID), "bid_id": bid_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM xmr_swaps WHERE xmr_swaps.bid_id = :bid_id",
|
|
{"bid_id": bid_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM actions WHERE actions.linked_id = :bid_id",
|
|
{"bid_id": bid_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM addresspool WHERE addresspool.bid_id = :bid_id",
|
|
{"bid_id": bid_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM xmr_split_data WHERE xmr_split_data.bid_id = :bid_id",
|
|
{"bid_id": bid_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM bids WHERE bids.bid_id = :bid_id",
|
|
{"bid_id": bid_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM message_links WHERE linked_type = :type_ind AND linked_id = :linked_id",
|
|
{"type_ind": int(Concepts.BID), "linked_id": bid_row[0]},
|
|
)
|
|
|
|
cursor.execute(
|
|
"DELETE FROM eventlog WHERE eventlog.linked_type = :type_ind AND eventlog.linked_id = :offer_id",
|
|
{"type_ind": int(Concepts.OFFER), "offer_id": offer_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM automationlinks WHERE automationlinks.linked_type = :type_ind AND automationlinks.linked_id = :offer_id",
|
|
{"type_ind": int(Concepts.OFFER), "offer_id": offer_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM prefunded_transactions WHERE prefunded_transactions.linked_type = :type_ind AND prefunded_transactions.linked_id = :offer_id",
|
|
{"type_ind": int(Concepts.OFFER), "offer_id": offer_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM history WHERE history.concept_type = :type_ind AND history.concept_id = :offer_id",
|
|
{"type_ind": int(Concepts.OFFER), "offer_id": offer_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM xmr_offers WHERE xmr_offers.offer_id = :offer_id",
|
|
{"offer_id": offer_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM sentoffers WHERE sentoffers.offer_id = :offer_id",
|
|
{"offer_id": offer_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM actions WHERE actions.linked_id = :offer_id",
|
|
{"offer_id": offer_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM offers WHERE offers.offer_id = :offer_id",
|
|
{"offer_id": offer_row[0]},
|
|
)
|
|
cursor.execute(
|
|
"DELETE FROM message_links WHERE linked_type = :type_ind AND linked_id = :offer_id",
|
|
{"type_ind": int(Concepts.OFFER), "offer_id": offer_row[0]},
|
|
)
|
|
|
|
if num_offers > 0 or num_bids > 0:
|
|
self.log.info(
|
|
"Removed data for {} expired offer{} and {} bid{}.".format(
|
|
num_offers,
|
|
"s" if num_offers != 1 else "",
|
|
num_bids,
|
|
"s" if num_bids != 1 else "",
|
|
)
|
|
)
|
|
|
|
cursor.execute(
|
|
"DELETE FROM checkedblocks WHERE created_at <= :expired_at",
|
|
{"expired_at": now - time_offset},
|
|
)
|
|
|
|
finally:
|
|
self.closeDB(cursor)
|