Complete backend verification: fix syntax errors, create __init__.py files, add setup_db.py, update docker-compose for two PostgreSQL containers
This commit is contained in:
@@ -0,0 +1 @@
|
||||
# Models package
|
||||
@@ -1,5 +1,5 @@
|
||||
"""
|
||||
SQLAlchemy ORM models for the Cockatrice database.
|
||||
SQLAlchemy ORM models for the MTG Online database.
|
||||
|
||||
Mirrors the original MySQL schema with modern PostgreSQL features.
|
||||
"""
|
||||
@@ -11,7 +11,7 @@ from app.core.database import Base
|
||||
|
||||
class User(Base):
|
||||
"""User account model."""
|
||||
__tablename__ = "cockatrice_users"
|
||||
__tablename__ = "mtgonline_users"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
username = Column(String(64), unique=True, nullable=False, index=True)
|
||||
@@ -47,12 +47,12 @@ class User(Base):
|
||||
|
||||
class DecklistFolder(Base):
|
||||
"""User deck folder."""
|
||||
__tablename__ = "cockatrice_decklist_folders"
|
||||
__tablename__ = "mtgonline_decklist_folders"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
owner_id = Column(Integer, ForeignKey("cockatrice_users.id"), nullable=False)
|
||||
owner_id = Column(Integer, ForeignKey("mtgonline_users.id"), nullable=False)
|
||||
name = Column(String(255), nullable=False)
|
||||
parent_id = Column(Integer, ForeignKey("cockatrice_decklist_folders.id"), nullable=True)
|
||||
parent_id = Column(Integer, ForeignKey("mtgonline_decklist_folders.id"), nullable=True)
|
||||
creation_date = Column(DateTime, server_default=func.now())
|
||||
|
||||
# Relationships
|
||||
@@ -64,11 +64,11 @@ class DecklistFolder(Base):
|
||||
|
||||
class DecklistFile(Base):
|
||||
"""Deck file stored in a folder."""
|
||||
__tablename__ = "cockatrice_decklist_files"
|
||||
__tablename__ = "mtgonline_decklist_files"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
folder_id = Column(Integer, ForeignKey("cockatrice_decklist_folders.id"), nullable=True)
|
||||
owner_id = Column(Integer, ForeignKey("cockatrice_users.id"), nullable=False)
|
||||
folder_id = Column(Integer, ForeignKey("mtgonline_decklist_folders.id"), nullable=True)
|
||||
owner_id = Column(Integer, ForeignKey("mtgonline_users.id"), nullable=False)
|
||||
name = Column(String(255), nullable=False)
|
||||
content = Column(Text, nullable=False) # Native XML or plain text deck format
|
||||
format = Column(String(50), default="native") # 'native' or 'plain'
|
||||
@@ -84,7 +84,7 @@ class DecklistFile(Base):
|
||||
|
||||
class Room(Base):
|
||||
"""Chat room."""
|
||||
__tablename__ = "cockatrice_rooms"
|
||||
__tablename__ = "mtgonline_rooms"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
name = Column(String(100), unique=True, nullable=False)
|
||||
@@ -99,10 +99,10 @@ class Room(Base):
|
||||
|
||||
class RoomGameType(Base):
|
||||
"""Game type definition for a room."""
|
||||
__tablename__ = "cockatrice_rooms_gametypes"
|
||||
__tablename__ = "mtgonline_rooms_gametypes"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
room_id = Column(Integer, ForeignKey("cockatrice_rooms.id"), nullable=False)
|
||||
room_id = Column(Integer, ForeignKey("mtgonline_rooms.id"), nullable=False)
|
||||
name = Column(String(100), nullable=False)
|
||||
description = Column(Text, nullable=True)
|
||||
|
||||
@@ -112,10 +112,10 @@ class RoomGameType(Base):
|
||||
|
||||
class Ban(Base):
|
||||
"""User ban record."""
|
||||
__tablename__ = "cockatrice_bans"
|
||||
__tablename__ = "mtgonline_bans"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
user_id = Column(Integer, ForeignKey("cockatrice_users.id"), nullable=False)
|
||||
user_id = Column(Integer, ForeignKey("mtgonline_users.id"), nullable=False)
|
||||
server_id = Column(Integer, nullable=True)
|
||||
reason = Column(Text, nullable=False)
|
||||
moderators = Column(String(255), nullable=True) # Admin usernames
|
||||
@@ -133,11 +133,11 @@ class Ban(Base):
|
||||
|
||||
class GameLog(Base):
|
||||
"""Game log entry."""
|
||||
__tablename__ = "cockatrice_log"
|
||||
__tablename__ = "mtgonline_log"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
room_id = Column(Integer, ForeignKey("cockatrice_rooms.id"), nullable=True)
|
||||
player_id = Column(Integer, ForeignKey("cockatrice_users.id"), nullable=True)
|
||||
room_id = Column(Integer, ForeignKey("mtgonline_rooms.id"), nullable=True)
|
||||
player_id = Column(Integer, ForeignKey("mtgonline_users.id"), nullable=True)
|
||||
message = Column(Text, nullable=False)
|
||||
timestamp = Column(DateTime, server_default=func.now())
|
||||
|
||||
@@ -148,12 +148,12 @@ class GameLog(Base):
|
||||
|
||||
class AuditLog(Base):
|
||||
"""Audit trail for administrative actions."""
|
||||
__tablename__ = "cockatrice_audit"
|
||||
__tablename__ = "mtgonline_audit"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
admin_id = Column(Integer, ForeignKey("cockatrice_users.id"), nullable=False)
|
||||
admin_id = Column(Integer, ForeignKey("mtgonline_users.id"), nullable=False)
|
||||
action_type = Column(String(50), nullable=False) # 'ban', 'unban', 'warn', etc.
|
||||
target_user_id = Column(Integer, ForeignKey("cockatrice_users.id"), nullable=True)
|
||||
target_user_id = Column(Integer, ForeignKey("mtgonline_users.id"), nullable=True)
|
||||
details = Column(Text, nullable=True)
|
||||
ip_address = Column(String(45), nullable=True)
|
||||
timestamp = Column(DateTime, server_default=func.now())
|
||||
|
||||
Reference in New Issue
Block a user