from datetime import datetime
from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, Boolean, JSON
from sqlalchemy.orm import relationship
from ..database import Base
class PromptTemplate(Base):
__tablename__ = 'prompt_templates'
id = Column(Integer, primary_key=True, index=True)
slug = Column(String, unique=True, index=True, nullable=False)
title = Column(String, nullable=False)
content = Column(Text, nullable=False)
version = Column(Integer, default=1)
owner_id = Column(String, ForeignKey('users.id'), nullable=False)
group_id = Column(String, ForeignKey('groups.id'), nullable=True)
is_public = Column(Boolean, default=False)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
owner = relationship("User")
group = relationship("Group")
def __repr__(self):
return f"<PromptTemplate(slug='{self.slug}', version={self.version})>"
class Skill(Base):
__tablename__ = 'skills'
id = Column(Integer, primary_key=True, index=True)
name = Column(String, unique=True, index=True, nullable=False)
description = Column(String, nullable=True)
skill_type = Column(String, default="local", nullable=False)
config = Column(JSON, default={}, nullable=True)
system_prompt = Column(Text, nullable=True)
is_enabled = Column(Boolean, default=True)
features = Column(JSON, default=["chat"], nullable=True)
owner_id = Column(String, ForeignKey('users.id'), nullable=False)
is_system = Column(Boolean, default=False)
preview_markdown = Column(Text, nullable=True)
extra_metadata = Column(JSON, default={}, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
owner = relationship("User")
def __repr__(self):
return f"<Skill(name='{self.name}', type='{self.skill_type}')>"
class SkillGroupAccess(Base):
__tablename__ = 'skill_group_access'
id = Column(Integer, primary_key=True, index=True)
skill_id = Column(Integer, ForeignKey('skills.id'), nullable=False)
group_id = Column(String, ForeignKey('groups.id'), nullable=False)
granted_by = Column(String, ForeignKey('users.id'), nullable=False)
granted_at = Column(DateTime, default=datetime.utcnow)
skill = relationship("Skill")
group = relationship("Group")
class MCPServer(Base):
__tablename__ = 'mcp_servers'
id = Column(Integer, primary_key=True, index=True)
name = Column(String, nullable=False)
url = Column(String, nullable=False)
auth_config = Column(JSON, default={}, nullable=True)
owner_id = Column(String, ForeignKey('users.id'), nullable=False)
group_id = Column(String, ForeignKey('groups.id'), nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
owner = relationship("User")
group = relationship("Group")
def __repr__(self):
return f"<MCPServer(name='{self.name}', url='{self.url}')>"
class AssetPermission(Base):
__tablename__ = 'asset_permissions'
id = Column(Integer, primary_key=True, index=True)
resource_type = Column(String, nullable=False, index=True)
resource_id = Column(Integer, nullable=False, index=True)
user_id = Column(String, ForeignKey('users.id'), nullable=True)
group_id = Column(String, ForeignKey('groups.id'), nullable=True)
access_level = Column(String, default="execute", nullable=False)
created_at = Column(DateTime, default=datetime.utcnow)
user = relationship("User")
group = relationship("Group")
def __repr__(self):
return f"<AssetPermission(type='{self.resource_type}', id={self.resource_id}, level='{self.access_level}')>"