73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
# [DEF:GitModels:Module]
|
|
# @SEMANTICS: git, models, sqlalchemy, database, schema
|
|
# @PURPOSE: Git-specific SQLAlchemy models for configuration and repository tracking.
|
|
# @LAYER: Model
|
|
# @RELATION: specs/011-git-integration-dashboard/data-model.md
|
|
|
|
import enum
|
|
from datetime import datetime
|
|
from sqlalchemy import Column, String, Integer, DateTime, Enum, ForeignKey, Boolean
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
import uuid
|
|
from src.core.database import Base
|
|
|
|
class GitProvider(str, enum.Enum):
|
|
GITHUB = "GITHUB"
|
|
GITLAB = "GITLAB"
|
|
GITEA = "GITEA"
|
|
|
|
class GitStatus(str, enum.Enum):
|
|
CONNECTED = "CONNECTED"
|
|
FAILED = "FAILED"
|
|
UNKNOWN = "UNKNOWN"
|
|
|
|
class SyncStatus(str, enum.Enum):
|
|
CLEAN = "CLEAN"
|
|
DIRTY = "DIRTY"
|
|
CONFLICT = "CONFLICT"
|
|
|
|
class GitServerConfig(Base):
|
|
"""
|
|
[DEF:GitServerConfig:Class]
|
|
Configuration for a Git server connection.
|
|
"""
|
|
__tablename__ = "git_server_configs"
|
|
|
|
id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
|
|
name = Column(String(255), nullable=False)
|
|
provider = Column(Enum(GitProvider), nullable=False)
|
|
url = Column(String(255), nullable=False)
|
|
pat = Column(String(255), nullable=False) # PERSONAL ACCESS TOKEN
|
|
default_repository = Column(String(255), nullable=True)
|
|
status = Column(Enum(GitStatus), default=GitStatus.UNKNOWN)
|
|
last_validated = Column(DateTime, default=datetime.utcnow)
|
|
|
|
class GitRepository(Base):
|
|
"""
|
|
[DEF:GitRepository:Class]
|
|
Tracking for a local Git repository linked to a dashboard.
|
|
"""
|
|
__tablename__ = "git_repositories"
|
|
|
|
id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
|
|
dashboard_id = Column(Integer, nullable=False, unique=True)
|
|
config_id = Column(String(36), ForeignKey("git_server_configs.id"), nullable=False)
|
|
remote_url = Column(String(255), nullable=False)
|
|
local_path = Column(String(255), nullable=False)
|
|
current_branch = Column(String(255), default="main")
|
|
sync_status = Column(Enum(SyncStatus), default=SyncStatus.CLEAN)
|
|
|
|
class DeploymentEnvironment(Base):
|
|
"""
|
|
[DEF:DeploymentEnvironment:Class]
|
|
Target Superset environments for dashboard deployment.
|
|
"""
|
|
__tablename__ = "deployment_environments"
|
|
|
|
id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
|
|
name = Column(String(255), nullable=False)
|
|
superset_url = Column(String(255), nullable=False)
|
|
superset_token = Column(String(255), nullable=False)
|
|
is_active = Column(Boolean, default=True)
|
|
|
|
# [/DEF:GitModels:Module] |