first commit
This commit is contained in:
BIN
backend/app/models/__pycache__/database.cpython-312.pyc
Normal file
BIN
backend/app/models/__pycache__/database.cpython-312.pyc
Normal file
Binary file not shown.
BIN
backend/app/models/__pycache__/database.cpython-39.pyc
Normal file
BIN
backend/app/models/__pycache__/database.cpython-39.pyc
Normal file
Binary file not shown.
BIN
backend/app/models/__pycache__/models.cpython-312.pyc
Normal file
BIN
backend/app/models/__pycache__/models.cpython-312.pyc
Normal file
Binary file not shown.
BIN
backend/app/models/__pycache__/models.cpython-39.pyc
Normal file
BIN
backend/app/models/__pycache__/models.cpython-39.pyc
Normal file
Binary file not shown.
38
backend/app/models/database.py
Normal file
38
backend/app/models/database.py
Normal file
@@ -0,0 +1,38 @@
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy.pool import QueuePool
|
||||
|
||||
from app.config.settings import settings
|
||||
|
||||
# 创建数据库引擎
|
||||
engine = create_engine(
|
||||
settings.DATABASE_URL,
|
||||
poolclass=QueuePool,
|
||||
pool_pre_ping=True,
|
||||
pool_size=10,
|
||||
max_overflow=20,
|
||||
pool_recycle=3600, # 连接回收时间
|
||||
pool_timeout=30, # 连接超时时间
|
||||
echo=False # 关闭SQL日志
|
||||
)
|
||||
|
||||
# 创建会话工厂
|
||||
SessionLocal = sessionmaker(
|
||||
autocommit=False,
|
||||
autoflush=False,
|
||||
bind=engine,
|
||||
expire_on_commit=False # 提交后不自动过期对象
|
||||
)
|
||||
|
||||
# 创建基类
|
||||
Base = declarative_base()
|
||||
|
||||
|
||||
def get_db():
|
||||
"""获取数据库会话的依赖函数"""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
162
backend/app/models/models.py
Normal file
162
backend/app/models/models.py
Normal file
@@ -0,0 +1,162 @@
|
||||
from sqlalchemy import Column, Integer, String, Float, Text, Boolean, DateTime, ForeignKey, JSON
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql import func
|
||||
|
||||
from app.models.database import Base
|
||||
|
||||
|
||||
class Algorithm(Base):
|
||||
"""算法模型"""
|
||||
__tablename__ = "algorithms"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
name = Column(String, nullable=False, index=True)
|
||||
description = Column(Text, nullable=False)
|
||||
type = Column(String, nullable=False, index=True) # computer_vision, nlp, ml, edge_computing, medical, autonomous_driving等
|
||||
status = Column(String, default="active", index=True)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
# 关系
|
||||
versions = relationship("AlgorithmVersion", back_populates="algorithm", cascade="all, delete-orphan")
|
||||
calls = relationship("AlgorithmCall", back_populates="algorithm")
|
||||
|
||||
|
||||
class AlgorithmVersion(Base):
|
||||
"""算法版本模型"""
|
||||
__tablename__ = "algorithm_versions"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
algorithm_id = Column(String, ForeignKey("algorithms.id"), nullable=False, index=True)
|
||||
version = Column(String, nullable=False)
|
||||
url = Column(String, nullable=False) # 算法API地址
|
||||
params = Column(JSON, default=dict) # 算法参数配置
|
||||
input_schema = Column(JSON, default=dict) # 输入数据格式
|
||||
output_schema = Column(JSON, default=dict) # 输出数据格式
|
||||
code = Column(Text, default='') # Python算法代码
|
||||
model_name = Column(String, default='') # API训练后的模型名字
|
||||
model_file = Column(String, default='') # 模型文件路径
|
||||
api_doc = Column(Text, default='') # 模型的API用法文档
|
||||
is_default = Column(Boolean, default=False) # 是否为默认版本
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
# 关系
|
||||
algorithm = relationship("Algorithm", back_populates="versions")
|
||||
calls = relationship("AlgorithmCall", back_populates="version")
|
||||
|
||||
|
||||
class User(Base):
|
||||
"""用户模型"""
|
||||
__tablename__ = "users"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
username = Column(String, unique=True, nullable=False, index=True)
|
||||
email = Column(String, unique=True, nullable=False, index=True)
|
||||
password_hash = Column(String, nullable=False)
|
||||
role = Column(String, default="user", index=True) # admin, user, customer
|
||||
status = Column(String, default="active", index=True)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
# 关系
|
||||
api_keys = relationship("APIKey", back_populates="user", cascade="all, delete-orphan")
|
||||
calls = relationship("AlgorithmCall", back_populates="user")
|
||||
|
||||
|
||||
class APIKey(Base):
|
||||
"""API密钥模型"""
|
||||
__tablename__ = "api_keys"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
user_id = Column(String, ForeignKey("users.id"), nullable=False, index=True)
|
||||
key = Column(String, unique=True, nullable=False, index=True)
|
||||
name = Column(String, nullable=False)
|
||||
expires_at = Column(DateTime(timezone=True), nullable=False)
|
||||
status = Column(String, default="active", index=True)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
# 关系
|
||||
user = relationship("User", back_populates="api_keys")
|
||||
|
||||
|
||||
class AlgorithmCall(Base):
|
||||
"""算法调用记录模型"""
|
||||
__tablename__ = "algorithm_calls"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
user_id = Column(String, ForeignKey("users.id"), nullable=False, index=True)
|
||||
algorithm_id = Column(String, ForeignKey("algorithms.id"), nullable=False, index=True)
|
||||
version_id = Column(String, ForeignKey("algorithm_versions.id"), nullable=False, index=True)
|
||||
input_data = Column(JSON, nullable=False) # 输入数据
|
||||
params = Column(JSON, default=dict) # 调用参数
|
||||
output_data = Column(JSON, default=dict) # 输出数据
|
||||
status = Column(String, default="pending", index=True) # pending, running, success, failed
|
||||
response_time = Column(Float, nullable=True) # 响应时间(秒)
|
||||
error_message = Column(Text, nullable=True) # 错误信息
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
# 关系
|
||||
user = relationship("User", back_populates="calls")
|
||||
algorithm = relationship("Algorithm", back_populates="calls")
|
||||
version = relationship("AlgorithmVersion", back_populates="calls")
|
||||
|
||||
|
||||
class GiteaConfig(Base):
|
||||
"""Gitea配置模型"""
|
||||
__tablename__ = "gitea_configs"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
server_url = Column(String, nullable=False) # Gitea服务器URL
|
||||
access_token = Column(String, nullable=False) # 访问令牌
|
||||
default_owner = Column(String, nullable=False) # 默认组织/用户
|
||||
repo_prefix = Column(String, default="") # 仓库前缀
|
||||
status = Column(String, default="active") # 状态
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
|
||||
class AlgorithmRepository(Base):
|
||||
"""算法仓库模型"""
|
||||
__tablename__ = "algorithm_repositories"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
algorithm_id = Column(String, ForeignKey("algorithms.id"), nullable=True, index=True) # 关联的算法ID
|
||||
name = Column(String, nullable=False, index=True) # 仓库名称
|
||||
description = Column(Text, default="") # 仓库描述
|
||||
type = Column(String, default="code") # 仓库类型:code, model, hybrid
|
||||
repo_url = Column(String, nullable=False) # Git仓库URL
|
||||
branch = Column(String, default="main") # 分支名称
|
||||
local_path = Column(String, default="") # 本地存储路径
|
||||
status = Column(String, default="active", index=True) # 状态
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
# 关系
|
||||
algorithm = relationship("Algorithm", back_populates="repository", uselist=False)
|
||||
|
||||
|
||||
class AlgorithmService(Base):
|
||||
"""算法服务模型"""
|
||||
__tablename__ = "algorithm_services"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
service_id = Column(String, unique=True, nullable=False, index=True) # 服务ID
|
||||
name = Column(String, nullable=False, index=True) # 服务名称
|
||||
algorithm_name = Column(String, nullable=False) # 算法名称
|
||||
version = Column(String, nullable=False) # 版本
|
||||
host = Column(String, nullable=False) # 主机地址
|
||||
port = Column(Integer, nullable=False) # 端口
|
||||
api_url = Column(String, nullable=False) # API地址
|
||||
status = Column(String, default="stopped", index=True) # 状态:running, stopped, error, restarting
|
||||
config = Column(JSON, default=dict) # 服务配置
|
||||
start_time = Column(DateTime(timezone=True), nullable=True) # 启动时间
|
||||
last_heartbeat = Column(DateTime(timezone=True), nullable=True) # 最后心跳时间
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
|
||||
# 添加Algorithm模型的repository关系
|
||||
Algorithm.repository = relationship("AlgorithmRepository", back_populates="algorithm", uselist=False)
|
||||
Reference in New Issue
Block a user