mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-15 05:45:19 +00:00
refac: channel_file and knowledge table migration
This commit is contained in:
parent
d1d42128e5
commit
79cfe29bb2
3 changed files with 83 additions and 1 deletions
|
|
@ -0,0 +1,49 @@
|
||||||
|
"""Update channel file and knowledge table
|
||||||
|
|
||||||
|
Revision ID: 81cc2ce44d79
|
||||||
|
Revises: 6283dc0e4d8d
|
||||||
|
Create Date: 2025-12-10 16:07:58.001282
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from typing import Sequence, Union
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
import open_webui.internal.db
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision: str = "81cc2ce44d79"
|
||||||
|
down_revision: Union[str, None] = "6283dc0e4d8d"
|
||||||
|
branch_labels: Union[str, Sequence[str], None] = None
|
||||||
|
depends_on: Union[str, Sequence[str], None] = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
# Add message_id column to channel_file table
|
||||||
|
with op.batch_alter_table("channel_file", schema=None) as batch_op:
|
||||||
|
batch_op.add_column(
|
||||||
|
sa.Column(
|
||||||
|
"message_id",
|
||||||
|
sa.Text(),
|
||||||
|
sa.ForeignKey(
|
||||||
|
"message.id", ondelete="CASCADE", name="fk_channel_file_message_id"
|
||||||
|
),
|
||||||
|
nullable=True,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add data column to knowledge table
|
||||||
|
with op.batch_alter_table("knowledge", schema=None) as batch_op:
|
||||||
|
batch_op.add_column(sa.Column("data", sa.JSON(), nullable=True))
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
# Remove message_id column from channel_file table
|
||||||
|
with op.batch_alter_table("channel_file", schema=None) as batch_op:
|
||||||
|
batch_op.drop_column("message_id")
|
||||||
|
|
||||||
|
# Remove data column from knowledge table
|
||||||
|
with op.batch_alter_table("knowledge", schema=None) as batch_op:
|
||||||
|
batch_op.drop_column("data")
|
||||||
|
|
@ -152,12 +152,15 @@ class ChannelFile(Base):
|
||||||
__tablename__ = "channel_file"
|
__tablename__ = "channel_file"
|
||||||
|
|
||||||
id = Column(Text, unique=True, primary_key=True)
|
id = Column(Text, unique=True, primary_key=True)
|
||||||
|
user_id = Column(Text, nullable=False)
|
||||||
|
|
||||||
channel_id = Column(
|
channel_id = Column(
|
||||||
Text, ForeignKey("channel.id", ondelete="CASCADE"), nullable=False
|
Text, ForeignKey("channel.id", ondelete="CASCADE"), nullable=False
|
||||||
)
|
)
|
||||||
|
message_id = Column(
|
||||||
|
Text, ForeignKey("message.id", ondelete="CASCADE"), nullable=True
|
||||||
|
)
|
||||||
file_id = Column(Text, ForeignKey("file.id", ondelete="CASCADE"), nullable=False)
|
file_id = Column(Text, ForeignKey("file.id", ondelete="CASCADE"), nullable=False)
|
||||||
user_id = Column(Text, nullable=False)
|
|
||||||
|
|
||||||
created_at = Column(BigInteger, nullable=False)
|
created_at = Column(BigInteger, nullable=False)
|
||||||
updated_at = Column(BigInteger, nullable=False)
|
updated_at = Column(BigInteger, nullable=False)
|
||||||
|
|
@ -862,6 +865,27 @@ class ChannelTable:
|
||||||
except Exception:
|
except Exception:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def set_file_message_id_in_channel_by_id(
|
||||||
|
self, channel_id: str, file_id: str, message_id: str
|
||||||
|
) -> bool:
|
||||||
|
try:
|
||||||
|
with get_db() as db:
|
||||||
|
channel_file = (
|
||||||
|
db.query(ChannelFile)
|
||||||
|
.filter_by(channel_id=channel_id, file_id=file_id)
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
if not channel_file:
|
||||||
|
return False
|
||||||
|
|
||||||
|
channel_file.message_id = message_id
|
||||||
|
channel_file.updated_at = int(time.time())
|
||||||
|
|
||||||
|
db.commit()
|
||||||
|
return True
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
|
|
||||||
def remove_file_from_channel_by_id(self, channel_id: str, file_id: str) -> bool:
|
def remove_file_from_channel_by_id(self, channel_id: str, file_id: str) -> bool:
|
||||||
try:
|
try:
|
||||||
with get_db() as db:
|
with get_db() as db:
|
||||||
|
|
|
||||||
|
|
@ -1093,6 +1093,15 @@ async def post_new_message(
|
||||||
|
|
||||||
try:
|
try:
|
||||||
message, channel = await new_message_handler(request, id, form_data, user)
|
message, channel = await new_message_handler(request, id, form_data, user)
|
||||||
|
try:
|
||||||
|
if files := message.data.get("files", []):
|
||||||
|
for file in files:
|
||||||
|
Channels.set_file_message_id_in_channel_by_id(
|
||||||
|
channel.id, file.get("id", ""), message.id
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
log.debug(e)
|
||||||
|
|
||||||
active_user_ids = get_user_ids_from_room(f"channel:{channel.id}")
|
active_user_ids = get_user_ids_from_room(f"channel:{channel.id}")
|
||||||
|
|
||||||
async def background_handler():
|
async def background_handler():
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue