postgres default fix

This commit is contained in:
user 2025-08-23 13:15:10 +03:00
parent b28e561a5f
commit 82758fb11a
12 changed files with 42 additions and 37 deletions

View File

@ -8,7 +8,7 @@ class ServiceConfigValue(AlchemyBase):
id = Column(Integer, autoincrement=True, primary_key=True) id = Column(Integer, autoincrement=True, primary_key=True)
key = Column(String(128), nullable=False, unique=True) key = Column(String(128), nullable=False, unique=True)
packed_value = Column(JSON, nullable=False, default={}) packed_value = Column(JSON, nullable=False, default=dict)
@property @property
def value(self): def value(self):

View File

@ -1,5 +1,6 @@
from sqlalchemy import Column, Integer, String, DateTime, JSON, Boolean from sqlalchemy import Column, Integer, String, DateTime, JSON, Boolean
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from datetime import datetime
from app.core._defaults import DEFAULT_ASSET_INITOBJ from app.core._defaults import DEFAULT_ASSET_INITOBJ
from app.core.models.base import AlchemyBase from app.core.models.base import AlchemyBase
@ -15,10 +16,10 @@ class Asset(AlchemyBase):
network = Column(String(32), nullable=True) network = Column(String(32), nullable=True)
address = Column(String(1024), nullable=True) address = Column(String(1024), nullable=True)
meta = Column(JSON, nullable=False, default={}) meta = Column(JSON, nullable=False, default=dict)
rates = Column(JSON, nullable=False, default={}) rates = Column(JSON, nullable=False, default=dict)
created = Column(DateTime, nullable=False, default=0) created = Column(DateTime, nullable=False, default=datetime.utcnow)
is_active = Column(Boolean, nullable=False, default=True) is_active = Column(Boolean, nullable=False, default=True)
balances = relationship('UserBalance', back_populates='asset') balances = relationship('UserBalance', back_populates='asset')

View File

@ -3,6 +3,7 @@ from sqlalchemy import Column, BigInteger, Integer, String, ForeignKey, DateTime
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from app.core.models.base import AlchemyBase from app.core.models.base import AlchemyBase
from app.core.models.content.indexation_mixins import UserContentIndexationMixin from app.core.models.content.indexation_mixins import UserContentIndexationMixin
from datetime import datetime
class UserContent(AlchemyBase, UserContentIndexationMixin): class UserContent(AlchemyBase, UserContentIndexationMixin):
@ -14,12 +15,12 @@ class UserContent(AlchemyBase, UserContentIndexationMixin):
owner_address = Column(String(1024), nullable=True) owner_address = Column(String(1024), nullable=True)
code_hash = Column(String(128), nullable=True) code_hash = Column(String(128), nullable=True)
data_hash = Column(String(128), nullable=True) data_hash = Column(String(128), nullable=True)
updated = Column(DateTime, nullable=False, default=0) updated = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
content_id = Column(Integer, ForeignKey('node_storage.id'), nullable=True) content_id = Column(Integer, ForeignKey('node_storage.id'), nullable=True)
created = Column(DateTime, nullable=False, default=0) created = Column(DateTime, nullable=False, default=datetime.utcnow)
meta = Column(JSON, nullable=False, default={}) meta = Column(JSON, nullable=False, default=dict)
user_id = Column(Integer, ForeignKey('users.id'), nullable=False) user_id = Column(Integer, ForeignKey('users.id'), nullable=False)
wallet_connection_id = Column(Integer, ForeignKey('wallet_connections.id'), nullable=True) wallet_connection_id = Column(Integer, ForeignKey('wallet_connections.id'), nullable=True)
status = Column(String(64), nullable=False, default='active') # 'transaction_requested' status = Column(String(64), nullable=False, default='active') # 'transaction_requested'
@ -41,9 +42,8 @@ class UserAction(AlchemyBase):
to_address = Column(String(1024), nullable=True) to_address = Column(String(1024), nullable=True)
from_address = Column(String(1024), nullable=True) from_address = Column(String(1024), nullable=True)
status = Column(String(128), nullable=True) status = Column(String(128), nullable=True)
meta = Column(JSON, nullable=False, default={}) meta = Column(JSON, nullable=False, default=dict)
created = Column(DateTime, nullable=False, default=0) created = Column(DateTime, nullable=False, default=datetime.utcnow)
user = relationship('User', uselist=False, foreign_keys=[user_id]) user = relationship('User', uselist=False, foreign_keys=[user_id])
content = relationship('StoredContent', uselist=False, foreign_keys=[content_id]) content = relationship('StoredContent', uselist=False, foreign_keys=[content_id])

View File

@ -1,5 +1,6 @@
from base58 import b58decode from base58 import b58decode
from sqlalchemy import Column, Integer, String, DateTime, JSON from sqlalchemy import Column, Integer, String, DateTime, JSON
from datetime import datetime
from .base import AlchemyBase from .base import AlchemyBase
@ -15,12 +16,12 @@ class KnownKey(AlchemyBase):
public_key_hash = Column(String(64), nullable=False, unique=True) # base58 public_key_hash = Column(String(64), nullable=False, unique=True) # base58
algo = Column(String(32), nullable=True, default=None) algo = Column(String(32), nullable=True, default=None)
meta = Column(JSON, nullable=False, default={}) meta = Column(JSON, nullable=False, default=dict)
# { # {
# "I_user_id": TRUSTED_USER_ID, # "I_user_id": TRUSTED_USER_ID,
# } # }
created = Column(DateTime, nullable=False, default=0) created = Column(DateTime, nullable=False, default=datetime.utcnow)
# stored_content = relationship('StoredContent', back_populates='key') # stored_content = relationship('StoredContent', back_populates='key')

View File

@ -12,9 +12,9 @@ class KnownNode(AlchemyBase):
public_key = Column(String(256), nullable=False) public_key = Column(String(256), nullable=False)
codebase_hash = Column(String(512), nullable=True) # Node software version codebase_hash = Column(String(512), nullable=True) # Node software version
reputation = Column(Integer, nullable=False, default=0) reputation = Column(Integer, nullable=False, default=0)
last_sync = Column(DateTime, nullable=False, default=datetime.now) last_sync = Column(DateTime, nullable=False, default=datetime.utcnow)
meta = Column(JSON, nullable=False, default={}) meta = Column(JSON, nullable=False, default=dict)
located_at = Column(DateTime, nullable=False, default=datetime.now) located_at = Column(DateTime, nullable=False, default=datetime.utcnow)
class KnownNodeIncident(AlchemyBase): class KnownNodeIncident(AlchemyBase):
@ -28,7 +28,7 @@ class KnownNodeIncident(AlchemyBase):
severity = Column(Integer, nullable=False, default=1) # Severity level (1-low to 5-critical) severity = Column(Integer, nullable=False, default=1) # Severity level (1-low to 5-critical)
resolved = Column(Boolean, nullable=False, default=False) # Whether the incident has been resolved resolved = Column(Boolean, nullable=False, default=False) # Whether the incident has been resolved
resolved_at = Column(DateTime, nullable=True) # Timestamp when the incident was resolved resolved_at = Column(DateTime, nullable=True) # Timestamp when the incident was resolved
meta = Column(JSON, nullable=False, default={}) # Additional metadata if needed meta = Column(JSON, nullable=False, default=dict) # Additional metadata if needed
class RemoteContentIndex(AlchemyBase): class RemoteContentIndex(AlchemyBase):
@ -41,7 +41,6 @@ class RemoteContentIndex(AlchemyBase):
decrypted_hash = Column(String(128), nullable=True) # Decrypted content hash, available once permission is granted decrypted_hash = Column(String(128), nullable=True) # Decrypted content hash, available once permission is granted
ton_address = Column(String(128), nullable=True) # TON network address for the content ton_address = Column(String(128), nullable=True) # TON network address for the content
onchain_index = Column(Integer, nullable=True) # Onchain index or reference on a blockchain onchain_index = Column(Integer, nullable=True) # Onchain index or reference on a blockchain
meta = Column(JSON, nullable=False, default={}) # Additional metadata for flexible content description meta = Column(JSON, nullable=False, default=dict) # Additional metadata for flexible content description
last_updated = Column(DateTime, nullable=False, default=datetime.utcnow) # Timestamp of the last update last_updated = Column(DateTime, nullable=False, default=datetime.utcnow) # Timestamp of the last update
created_at = Column(DateTime, nullable=False, default=datetime.utcnow) # Record creation timestamp created_at = Column(DateTime, nullable=False, default=datetime.utcnow) # Record creation timestamp

View File

@ -25,7 +25,8 @@ class StoredContent(AlchemyBase, AudioContentMixin):
status = Column(String(32), nullable=True) status = Column(String(32), nullable=True)
filename = Column(String(1024), nullable=False) filename = Column(String(1024), nullable=False)
meta = Column(JSON, nullable=False, default={}) # Use a factory for JSON default to avoid shared mutable dict
meta = Column(JSON, nullable=False, default=dict)
user_id = Column(Integer, ForeignKey('users.id'), nullable=True) user_id = Column(Integer, ForeignKey('users.id'), nullable=True)
owner_address = Column(String(1024), nullable=True) owner_address = Column(String(1024), nullable=True)
@ -35,9 +36,11 @@ class StoredContent(AlchemyBase, AudioContentMixin):
telegram_cid = Column(String(1024), nullable=True) telegram_cid = Column(String(1024), nullable=True)
codebase_version = Column(Integer, nullable=True) codebase_version = Column(Integer, nullable=True)
created = Column(DateTime, nullable=False, default=0) # Use proper datetime defaults; updated also auto-updates on change
updated = Column(DateTime, nullable=False, default=0) created = Column(DateTime, nullable=False, default=datetime.utcnow)
disabled = Column(DateTime, nullable=False, default=0) updated = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
# Timestamp of when content was disabled; None means active
disabled = Column(DateTime, nullable=True, default=None)
disabled_by = Column(Integer, ForeignKey('users.id'), nullable=True, default=None) disabled_by = Column(Integer, ForeignKey('users.id'), nullable=True, default=None)
encrypted = Column(Boolean, nullable=False, default=False) encrypted = Column(Boolean, nullable=False, default=False)

View File

@ -13,4 +13,4 @@ class PromoAction(AlchemyBase):
action_type = Column(String(64), nullable=False) # Type of action, e.g., 'referral', 'discount' action_type = Column(String(64), nullable=False) # Type of action, e.g., 'referral', 'discount'
action_ref = Column(String(512), nullable=False) # Reference to the action, e.g., promo code action_ref = Column(String(512), nullable=False) # Reference to the action, e.g., promo code
created = Column(DateTime, nullable=False, default=datetime.now) created = Column(DateTime, nullable=False, default=datetime.utcnow)

View File

@ -15,11 +15,11 @@ class BlockchainTask(AlchemyBase):
epoch = Column(Integer, nullable=True) epoch = Column(Integer, nullable=True)
seqno = Column(Integer, nullable=True) seqno = Column(Integer, nullable=True)
created = Column(DateTime, nullable=False, default=datetime.now) created = Column(DateTime, nullable=False, default=datetime.utcnow)
updated = Column(DateTime, nullable=False, default=datetime.now) updated = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
user_id = Column(Integer, ForeignKey('users.id'), nullable=True) user_id = Column(Integer, ForeignKey('users.id'), nullable=True)
meta = Column(JSON, nullable=False, default={}) meta = Column(JSON, nullable=False, default=dict)
status = Column(String(256), nullable=False) status = Column(String(256), nullable=False)
transaction_hash = Column(String(1024), nullable=True) transaction_hash = Column(String(1024), nullable=True)

View File

@ -13,8 +13,8 @@ class UserBalance(AlchemyBase):
asset_id = Column(Integer, ForeignKey('assets.id'), nullable=False) asset_id = Column(Integer, ForeignKey('assets.id'), nullable=False)
balance = Column(Float, nullable=False, default=0) balance = Column(Float, nullable=False, default=0)
updated = Column(DateTime, nullable=False, default=0) updated = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
created = Column(DateTime, nullable=False, default=0) created = Column(DateTime, nullable=False, default=datetime.utcnow)
user = relationship('User', uselist=False, foreign_keys=[user_id], back_populates='balances') user = relationship('User', uselist=False, foreign_keys=[user_id], back_populates='balances')
asset = relationship('Asset', uselist=False, foreign_keys=[asset_id], back_populates='balances') asset = relationship('Asset', uselist=False, foreign_keys=[asset_id], back_populates='balances')
@ -32,7 +32,7 @@ class InternalTransaction(AlchemyBase):
spent_transaction_id = Column(Integer, ForeignKey('internal_transactions.id'), nullable=True) spent_transaction_id = Column(Integer, ForeignKey('internal_transactions.id'), nullable=True)
type = Column(String(256), nullable=False, default="NOT_SPECIFIED") type = Column(String(256), nullable=False, default="NOT_SPECIFIED")
created = Column(DateTime, nullable=False, default=0) created = Column(DateTime, nullable=False, default=datetime.utcnow)
user = relationship('User', uselist=False, back_populates='internal_transactions', foreign_keys=[user_id]) user = relationship('User', uselist=False, back_populates='internal_transactions', foreign_keys=[user_id])
asset = relationship('Asset', uselist=False, foreign_keys=[asset_id]) asset = relationship('Asset', uselist=False, foreign_keys=[asset_id])

View File

@ -18,7 +18,7 @@ class User(AlchemyBase, DisplayMixin, TranslationCore, AuthenticationMixin_V1, W
username = Column(String(512), nullable=True) username = Column(String(512), nullable=True)
lang_code = Column(String(8), nullable=False, default="en") lang_code = Column(String(8), nullable=False, default="en")
meta = Column(JSON, nullable=False, default={}) meta = Column(JSON, nullable=False, default=dict)
last_use = Column(DateTime, nullable=False, default=datetime.utcnow) last_use = Column(DateTime, nullable=False, default=datetime.utcnow)
updated = Column(DateTime, nullable=False, default=datetime.utcnow) updated = Column(DateTime, nullable=False, default=datetime.utcnow)
@ -32,4 +32,3 @@ class User(AlchemyBase, DisplayMixin, TranslationCore, AuthenticationMixin_V1, W
def __str__(self): def __str__(self):
return f"User, {self.id}_{self.telegram_id} | Username: {self.username} " + '\\' return f"User, {self.id}_{self.telegram_id} | Username: {self.username} " + '\\'

View File

@ -2,6 +2,7 @@
from sqlalchemy import Column, BigInteger, Integer, String, ForeignKey, DateTime, JSON, Boolean from sqlalchemy import Column, BigInteger, Integer, String, ForeignKey, DateTime, JSON, Boolean
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from .base import AlchemyBase from .base import AlchemyBase
from datetime import datetime
class UserActivity(AlchemyBase): class UserActivity(AlchemyBase):
@ -9,10 +10,10 @@ class UserActivity(AlchemyBase):
id = Column(Integer, autoincrement=True, primary_key=True) id = Column(Integer, autoincrement=True, primary_key=True)
type = Column(String(64), nullable=False) type = Column(String(64), nullable=False)
meta = Column(JSON, nullable=False, default={}) meta = Column(JSON, nullable=False, default=dict)
user_id = Column(Integer, ForeignKey('users.id'), nullable=True) user_id = Column(Integer, ForeignKey('users.id'), nullable=True)
user_ip = Column(String(64), nullable=True) user_ip = Column(String(64), nullable=True)
created = Column(DateTime, nullable=False, default=0) created = Column(DateTime, nullable=False, default=datetime.utcnow)
user = relationship('User', uselist=False, foreign_keys=[user_id]) user = relationship('User', uselist=False, foreign_keys=[user_id])

View File

@ -1,5 +1,6 @@
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, JSON, Boolean from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, JSON, Boolean
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from datetime import datetime
from .base import AlchemyBase from .base import AlchemyBase
@ -15,11 +16,11 @@ class WalletConnection(AlchemyBase):
wallet_address = Column(String(1024), nullable=False) wallet_address = Column(String(1024), nullable=False)
keys = Column(JSON, nullable=False, default={}) keys = Column(JSON, nullable=False, default=dict)
meta = Column(JSON, nullable=False, default={}) meta = Column(JSON, nullable=False, default=dict)
created = Column(DateTime, nullable=False, default=0) created = Column(DateTime, nullable=False, default=datetime.utcnow)
updated = Column(DateTime, nullable=False, default=0) updated = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
invalidated = Column(Boolean, nullable=False, default=True) invalidated = Column(Boolean, nullable=False, default=True)
without_pk = Column(Boolean, nullable=False, default=False) without_pk = Column(Boolean, nullable=False, default=False)