49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from sqlalchemy import (
|
|
Column,
|
|
Integer,
|
|
BigInteger,
|
|
String,
|
|
DateTime,
|
|
JSON,
|
|
UniqueConstraint,
|
|
)
|
|
|
|
from .base import AlchemyBase
|
|
|
|
|
|
class NodeEvent(AlchemyBase):
|
|
__tablename__ = 'node_events'
|
|
__table_args__ = (
|
|
UniqueConstraint('origin_public_key', 'seq', name='uq_node_events_origin_seq'),
|
|
UniqueConstraint('uid', name='uq_node_events_uid'),
|
|
)
|
|
|
|
id = Column(Integer, autoincrement=True, primary_key=True)
|
|
origin_public_key = Column(String(128), nullable=False)
|
|
origin_host = Column(String(256), nullable=True)
|
|
seq = Column(BigInteger, nullable=False)
|
|
uid = Column(String(64), nullable=False)
|
|
event_type = Column(String(64), nullable=False)
|
|
payload = Column(JSON, nullable=False, default=dict)
|
|
signature = Column(String(512), nullable=False)
|
|
created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
|
|
received_at = Column(DateTime, nullable=False, default=datetime.utcnow)
|
|
applied_at = Column(DateTime, nullable=True)
|
|
status = Column(String(32), nullable=False, default='recorded')
|
|
|
|
|
|
class NodeEventCursor(AlchemyBase):
|
|
__tablename__ = 'node_event_cursors'
|
|
__table_args__ = (
|
|
UniqueConstraint('source_public_key', name='uq_event_cursor_source'),
|
|
)
|
|
|
|
id = Column(Integer, autoincrement=True, primary_key=True)
|
|
source_public_key = Column(String(128), nullable=False)
|
|
last_seq = Column(BigInteger, nullable=False, default=0)
|
|
updated_at = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
source_public_host = Column(String(256), nullable=True)
|