flowmind-core-api / app /models.py
Caner Giden
Update models.py
a21addb unverified
Raw
History Blame Contribute Delete
5.55 kB
from datetime import datetime
from sqlalchemy import (
Column,
Integer,
String,
Boolean,
DateTime,
ForeignKey,
Text,
JSON,
)
from sqlalchemy.orm import relationship
from app.db import Base
# ============================================================
# USERS
# ============================================================
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
full_name = Column(String, nullable=True) # İsim (opsiyonel)
email = Column(String, unique=True, index=True, nullable=False)
password_hash = Column(String, nullable=False)
# Sadece basit durumlar için yeterli alanlar
is_active = Column(Boolean, default=True)
created_at = Column(DateTime, default=datetime.utcnow)
last_login = Column(DateTime, nullable=True)
workflows = relationship("Workflow", back_populates="owner")
chat_sessions = relationship("ChatSession", back_populates="user")
# ============================================================
# WORKFLOWS – Kullanıcıların oluşturduğu n8n benzeri akışlar
# ============================================================
class Workflow(Base):
__tablename__ = "workflows"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, nullable=False)
description = Column(Text, nullable=True)
graph_json = Column(JSON, nullable=False) # tüm node/edge yapısı
is_active = Column(Boolean, default=True)
owner_id = Column(Integer, ForeignKey("users.id"), nullable=True)
owner = relationship("User", back_populates="workflows")
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow)
# ============================================================
# WORKFLOW RUNS – Workflow çalıştırma geçmişi
# ============================================================
class WorkflowRun(Base):
__tablename__ = "workflow_runs"
id = Column(Integer, primary_key=True, index=True)
workflow_id = Column(Integer, ForeignKey("workflows.id"))
status = Column(String, default="running") # running | success | failed
input_data = Column(JSON, nullable=True)
output_data = Column(JSON, nullable=True)
error_message = Column(Text, nullable=True)
started_at = Column(DateTime, default=datetime.utcnow)
finished_at = Column(DateTime, nullable=True)
# ============================================================
# NODES – Her workflow içindeki tek tek node’lar
# ============================================================
class WorkflowNode(Base):
__tablename__ = "workflow_nodes"
id = Column(Integer, primary_key=True, index=True)
workflow_id = Column(Integer, ForeignKey("workflows.id"))
node_id = Column(String, nullable=False) # frontend'deki unique node key
type = Column(String, nullable=False) # ai, http, timer, condition...
config = Column(JSON, nullable=True) # node'un ayarları (prompt, url, headers)
position_x = Column(Integer, default=0)
position_y = Column(Integer, default=0)
# ============================================================
# INTEGRATION PROVIDERS — OpenAI, HF, Slack, Gmail vs.
# ============================================================
class IntegrationProvider(Base):
__tablename__ = "integration_providers"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, nullable=False) # "openai", "huggingface", "slack"
category = Column(String, nullable=True) # "llm", "storage", "messaging"
base_url = Column(String, nullable=True)
description = Column(Text, nullable=True)
# ============================================================
# USER CREDENTIALS – Kullanıcı kendi API keylerini girer
# ============================================================
class UserCredential(Base):
__tablename__ = "user_credentials"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=True)
provider_id = Column(Integer, ForeignKey("integration_providers.id"))
credential_json = Column(JSON, nullable=False) # {"api_key": "...", "org_id": "..."}
created_at = Column(DateTime, default=datetime.utcnow)
# ============================================================
# CHAT SESSION — Chat ara yüzü konuşmaları tutar
# ============================================================
class ChatSession(Base):
__tablename__ = "chat_sessions"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=True)
title = Column(String, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
user = relationship("User", back_populates="chat_sessions")
messages = relationship("ChatMessage", back_populates="session")
# ============================================================
# CHAT MESSAGE – Chat içerisindeki mesajlar
# ============================================================
class ChatMessage(Base):
__tablename__ = "chat_messages"
id = Column(Integer, primary_key=True, index=True)
session_id = Column(Integer, ForeignKey("chat_sessions.id"))
role = Column(String, nullable=False) # user | assistant | system
content = Column(Text, nullable=False)
timestamp = Column(DateTime, default=datetime.utcnow)
session = relationship("ChatSession", back_populates="messages")