From c1768114de381e37e272e9faf7db8e95a93ff381 Mon Sep 17 00:00:00 2001
From: zhaoqingang <zhaoqg0118@163.com>
Date: 星期一, 11 十一月 2024 16:37:12 +0800
Subject: [PATCH] role group user..

---
 app/models/group_model.py |  119 +++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 99 insertions(+), 20 deletions(-)

diff --git a/app/models/group_model.py b/app/models/group_model.py
index ec03d7d..52e05a8 100644
--- a/app/models/group_model.py
+++ b/app/models/group_model.py
@@ -2,49 +2,128 @@
 from enum import IntEnum
 from typing import Optional
 
-from sqlalchemy import Column, Integer, String, DateTime, Enum, Index
+from sqlalchemy import Column, Integer, String, DateTime, Enum, Index, Table, ForeignKey
 from pydantic import BaseModel
+from sqlalchemy.orm import relationship, backref
+
 from app.models.base_model import Base
 
-class GroupStatus(IntEnum):
-    NO = 1
-    OFF = 0
+
+group_knowledge_table = Table('group_Knowledge', Base.metadata
+                           , Column('group_id', Integer, ForeignKey('group.id'))
+                           , Column('knowledge_id', String(32), ForeignKey('knowledgebase.id')))
+
+group_dialog_table = Table('group_dialogs', Base.metadata
+                           , Column('group_id', Integer, ForeignKey('group.id'))
+                           , Column('dialog_id', String(36), ForeignKey('dialogs.id')))
+
+group_agent_table = Table('group_agent', Base.metadata
+                           , Column('group_id', Integer, ForeignKey('group.id'))
+                           , Column('agent_id', String(36), ForeignKey('user_canvas.id')))
+
+group_llm_table = Table('group_llm', Base.metadata
+                           , Column('group_id', Integer, ForeignKey('group.id'))
+                           , Column('llm_id', String(36), ForeignKey('common_llm.id')))
+
+group_unified_agent_table = Table('group_unified_agent', Base.metadata
+                                    , Column('group_id', Integer, ForeignKey('group.id'))
+                                    ,Column('unified_agent_id', String(36), ForeignKey('unified_agent.id')))
 
 
-
-class GroupInfoModel(Base):
-    __tablename__ = "group_info"
-    group_id = Column(Integer, primary_key=True, index=True)
+class GroupModel(Base):
+    __tablename__ = "group"
+    id = Column(Integer, primary_key=True, index=True)
     group_name = Column(String(255), unique=True, nullable=False, index=True)
     group_description = Column(String(255))
-    group_status = Column(Integer, nullable=False, default=1)
+    status = Column(String(10), nullable=False, default="1")
     created_at = Column(DateTime, default=datetime.now())
     updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
 
 
+    knowledges = relationship('KnowledgeModel',
+                                 secondary=group_knowledge_table,
+                                 backref=backref('groups', lazy='dynamic'),
+                                 lazy="dynamic")
+
+    dialogs = relationship('DialogModel',
+                              secondary=group_dialog_table,
+                              backref=backref('groups', lazy='dynamic'),
+                              lazy="dynamic")
+
+    agents = relationship('CanvasModel',
+                             secondary=group_agent_table,
+                             backref=backref('groups', lazy='dynamic'),
+                             lazy="dynamic")
+
+    llms = relationship('CommonLlmModel',
+                           secondary=group_llm_table,
+                           backref=backref('groups', lazy='dynamic'),
+                           lazy="dynamic")
+
+    unified_agents = relationship('UnifiedAgentModel',
+                                     secondary=group_unified_agent_table,
+                                     backref=backref('roles', lazy='dynamic'),
+                                     lazy="dynamic")
     def to_dict(self):
         return {
-            'id': self.group_id,
+            'groupId': self.id,
             'name': self.group_name,
-            'group_description': self.group_description,
-            'group_status': self.group_status,
-            'created_at': self.created_at.strftime("%Y.%m.%d %H:%M")
+            'description': self.group_description,
+            'status': self.status,
+            'createTime': self.created_at.strftime("%Y-%m-%d %H:%M:%S")
         }
 
 
-class UserGroupModel(Base):
-    __tablename__ = "user_group"
-    id = Column(Integer, primary_key=True)
-    group_id = Column(Integer, nullable=False)
-    user_id = Column(Integer, nullable=False)
-    Index('ix_user_group_id', group_id, user_id, unique=True)
+    def get_id(self):
+        return str(self.ID)
+
+
+    def __repr__(self):
+        return '<Role name:%r description:%r iconCls:%r seq:%r>\n' \
+            % (self.NAME, self.DESCRIPTION, self.ICONCLS, self.SEQ)
+
+    def to_json(self):
+        json = {
+            'roleId': self.id,
+            'createTime': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
+            'updateTime': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
+            'groupName': self.group_name,
+            'remark': self.group_description,
+            'status': self.status,
+        }
+        if len(self.knowledges.all()) > 0:
+            json['knowledges'] = [knowledge.to_json() for knowledge in self.knowledges]
+
+        if len(self.dialogs.all()) > 0:
+            json['dialogs'] = [dialog.to_json() for dialog in self.dialogs]
+
+        if len(self.agents.all()) > 0:
+            json['agents'] = [agent.to_json() for agent in self.agents]
+
+        if len(self.llms.all()) > 0:
+            json['llms'] = [llm.to_json() for llm in self.llms]
+
+        json['users'] = [user.to_dict() for user in self.users]
+
+        if hasattr(self, 'flag'):
+            json['flag'] = self.flag
+
+        return json
+
+
+# class UserGroupModel(Base):
+#     __tablename__ = "user_group"
+#     id = Column(Integer, primary_key=True)
+#     group_id = Column(Integer, nullable=False)
+#     user_id = Column(Integer, nullable=False)
+#     Index('ix_user_group_id', group_id, user_id, unique=True)
 
 
 class GroupData(BaseModel):
     id: Optional[int] = None
     group_name: Optional[str] = ""
     group_description: Optional[str] = ""
-    group_status: Optional[int] = None
+    group_status: Optional[str] = ""
 
 class GroupUsers(BaseModel):
     id: int

--
Gitblit v1.8.0