feat: migrate folder table

Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com>
This commit is contained in:
Timothy Jaeryang Baek 2025-07-13 00:51:58 +04:00
parent 847a78a276
commit 5b14d15b00
3 changed files with 43 additions and 7 deletions

View file

@ -0,0 +1,23 @@
"""Update folder table data
Revision ID: d31026856c01
Revises: 9f0c9cd09105
Create Date: 2025-07-13 03:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
revision = "d31026856c01"
down_revision = "9f0c9cd09105"
branch_labels = None
depends_on = None
def upgrade():
op.add_column("folder", sa.Column("data", sa.JSON(), nullable=True))
def downgrade():
op.drop_column("folder", "data")

View file

@ -29,6 +29,7 @@ class Folder(Base):
name = Column(Text) name = Column(Text)
items = Column(JSON, nullable=True) items = Column(JSON, nullable=True)
meta = Column(JSON, nullable=True) meta = Column(JSON, nullable=True)
data = Column(JSON, nullable=True)
is_expanded = Column(Boolean, default=False) is_expanded = Column(Boolean, default=False)
created_at = Column(BigInteger) created_at = Column(BigInteger)
updated_at = Column(BigInteger) updated_at = Column(BigInteger)
@ -41,6 +42,7 @@ class FolderModel(BaseModel):
name: str name: str
items: Optional[dict] = None items: Optional[dict] = None
meta: Optional[dict] = None meta: Optional[dict] = None
data: Optional[dict] = None
is_expanded: bool = False is_expanded: bool = False
created_at: int created_at: int
updated_at: int updated_at: int
@ -55,6 +57,7 @@ class FolderModel(BaseModel):
class FolderForm(BaseModel): class FolderForm(BaseModel):
name: str name: str
data: Optional[dict] = None
model_config = ConfigDict(extra="allow") model_config = ConfigDict(extra="allow")
@ -187,8 +190,8 @@ class FolderTable:
log.error(f"update_folder: {e}") log.error(f"update_folder: {e}")
return return
def update_folder_name_by_id_and_user_id( def update_folder_by_id_and_user_id(
self, id: str, user_id: str, name: str self, id: str, user_id: str, form_data: FolderForm
) -> Optional[FolderModel]: ) -> Optional[FolderModel]:
try: try:
with get_db() as db: with get_db() as db:
@ -197,16 +200,28 @@ class FolderTable:
if not folder: if not folder:
return None return None
form_data = form_data.model_dump(exclude_unset=True)
existing_folder = ( existing_folder = (
db.query(Folder) db.query(Folder)
.filter_by(name=name, parent_id=folder.parent_id, user_id=user_id) .filter_by(
name=form_data.get("name"),
parent_id=folder.parent_id,
user_id=user_id,
)
.first() .first()
) )
if existing_folder: if existing_folder:
return None return None
folder.name = name folder.name = form_data.get("name", folder.name)
if "data" in form_data:
folder.data = {
**folder.data,
**form_data["data"],
}
folder.updated_at = int(time.time()) folder.updated_at = int(time.time())
db.commit() db.commit()

View file

@ -127,9 +127,7 @@ async def update_folder_name_by_id(
) )
try: try:
folder = Folders.update_folder_name_by_id_and_user_id( folder = Folders.update_folder_by_id_and_user_id(id, user.id, form_data)
id, user.id, form_data.name
)
return folder return folder
except Exception as e: except Exception as e: