fix: Add missing commas in function calls and improve code formatting
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
"""Playlist repository for database operations."""
|
||||
|
||||
from enum import Enum
|
||||
|
||||
from sqlalchemy import func, update
|
||||
from sqlalchemy.orm import selectinload
|
||||
from sqlmodel import col, select
|
||||
from sqlmodel import select
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
|
||||
from app.core.logging import get_logger
|
||||
@@ -18,7 +19,7 @@ logger = get_logger(__name__)
|
||||
|
||||
class PlaylistSortField(str, Enum):
|
||||
"""Playlist sort field enumeration."""
|
||||
|
||||
|
||||
NAME = "name"
|
||||
GENRE = "genre"
|
||||
CREATED_AT = "created_at"
|
||||
@@ -29,7 +30,7 @@ class PlaylistSortField(str, Enum):
|
||||
|
||||
class SortOrder(str, Enum):
|
||||
"""Sort order enumeration."""
|
||||
|
||||
|
||||
ASC = "asc"
|
||||
DESC = "desc"
|
||||
|
||||
@@ -154,7 +155,7 @@ class PlaylistRepository(BaseRepository[Playlist]):
|
||||
# Use a two-step approach to avoid unique constraint violations:
|
||||
# 1. Move all affected positions to negative temporary positions
|
||||
# 2. Then move them to their final positions
|
||||
|
||||
|
||||
# Step 1: Move to temporary negative positions
|
||||
update_to_negative = (
|
||||
update(PlaylistSound)
|
||||
@@ -166,8 +167,8 @@ class PlaylistRepository(BaseRepository[Playlist]):
|
||||
)
|
||||
await self.session.exec(update_to_negative)
|
||||
await self.session.commit()
|
||||
|
||||
# Step 2: Move from temporary negative positions to final positions
|
||||
|
||||
# Step 2: Move from temporary negative positions to final positions
|
||||
update_to_final = (
|
||||
update(PlaylistSound)
|
||||
.where(
|
||||
@@ -337,15 +338,15 @@ class PlaylistRepository(BaseRepository[Playlist]):
|
||||
.join(Sound, PlaylistSound.sound_id == Sound.id, isouter=True)
|
||||
.group_by(Playlist.id, User.name)
|
||||
)
|
||||
|
||||
|
||||
# Apply filters
|
||||
if search_query and search_query.strip():
|
||||
search_pattern = f"%{search_query.strip().lower()}%"
|
||||
subquery = subquery.where(func.lower(Playlist.name).like(search_pattern))
|
||||
|
||||
|
||||
if user_id is not None:
|
||||
subquery = subquery.where(Playlist.user_id == user_id)
|
||||
|
||||
|
||||
# Apply sorting
|
||||
if sort_by == PlaylistSortField.SOUND_COUNT:
|
||||
if sort_order == SortOrder.DESC:
|
||||
@@ -360,7 +361,7 @@ class PlaylistRepository(BaseRepository[Playlist]):
|
||||
else:
|
||||
# Default sorting by name
|
||||
subquery = subquery.order_by(Playlist.name.asc())
|
||||
|
||||
|
||||
else:
|
||||
# Simple query without stats-based sorting
|
||||
subquery = (
|
||||
@@ -385,15 +386,15 @@ class PlaylistRepository(BaseRepository[Playlist]):
|
||||
.join(Sound, PlaylistSound.sound_id == Sound.id, isouter=True)
|
||||
.group_by(Playlist.id, User.name)
|
||||
)
|
||||
|
||||
|
||||
# Apply filters
|
||||
if search_query and search_query.strip():
|
||||
search_pattern = f"%{search_query.strip().lower()}%"
|
||||
subquery = subquery.where(func.lower(Playlist.name).like(search_pattern))
|
||||
|
||||
|
||||
if user_id is not None:
|
||||
subquery = subquery.where(Playlist.user_id == user_id)
|
||||
|
||||
|
||||
# Apply sorting
|
||||
if sort_by:
|
||||
if sort_by == PlaylistSortField.NAME:
|
||||
@@ -406,7 +407,7 @@ class PlaylistRepository(BaseRepository[Playlist]):
|
||||
sort_column = Playlist.updated_at
|
||||
else:
|
||||
sort_column = Playlist.name
|
||||
|
||||
|
||||
if sort_order == SortOrder.DESC:
|
||||
subquery = subquery.order_by(sort_column.desc())
|
||||
else:
|
||||
@@ -414,16 +415,16 @@ class PlaylistRepository(BaseRepository[Playlist]):
|
||||
else:
|
||||
# Default sorting by name ascending
|
||||
subquery = subquery.order_by(Playlist.name.asc())
|
||||
|
||||
|
||||
# Apply pagination
|
||||
if offset > 0:
|
||||
subquery = subquery.offset(offset)
|
||||
if limit is not None:
|
||||
subquery = subquery.limit(limit)
|
||||
|
||||
|
||||
result = await self.session.exec(subquery)
|
||||
rows = result.all()
|
||||
|
||||
|
||||
# Convert to dictionary format
|
||||
playlists = []
|
||||
for row in rows:
|
||||
@@ -442,11 +443,11 @@ class PlaylistRepository(BaseRepository[Playlist]):
|
||||
"sound_count": row.sound_count or 0,
|
||||
"total_duration": row.total_duration or 0,
|
||||
})
|
||||
|
||||
|
||||
return playlists
|
||||
except Exception:
|
||||
logger.exception(
|
||||
"Failed to search and sort playlists: query=%s, sort_by=%s, sort_order=%s",
|
||||
search_query, sort_by, sort_order
|
||||
search_query, sort_by, sort_order,
|
||||
)
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user