fix: logging, warnings, and soft-delete consistency
- Fix duplicate logging in multi-worker mode with file lock for cleanup scheduler - Add Pydantic V2 model_config to suppress protected_namespaces warning - Suppress PaddlePaddle ccache warnings - Fix admin.py using non-existent User.username (now uses email) - Fix get_user_stats to exclude soft-deleted tasks from statistics - Fix create_task to exclude soft-deleted tasks from user limit check - Change LOG_LEVEL default to INFO 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -41,9 +41,11 @@ class TaskService:
|
||||
# Generate unique task ID
|
||||
task_id = str(uuid.uuid4())
|
||||
|
||||
# Check user's task limit
|
||||
# Check user's task limit (excluding soft-deleted tasks)
|
||||
if settings.max_tasks_per_user > 0:
|
||||
user_task_count = db.query(Task).filter(Task.user_id == user_id).count()
|
||||
user_task_count = db.query(Task).filter(
|
||||
and_(Task.user_id == user_id, Task.deleted_at.is_(None))
|
||||
).count()
|
||||
if user_task_count >= settings.max_tasks_per_user:
|
||||
# Auto-delete oldest completed tasks to make room
|
||||
self._cleanup_old_tasks(db, user_id, limit=10)
|
||||
@@ -359,7 +361,7 @@ class TaskService:
|
||||
|
||||
def get_user_stats(self, db: Session, user_id: int) -> dict:
|
||||
"""
|
||||
Get statistics for a user's tasks
|
||||
Get statistics for a user's tasks (excluding soft-deleted tasks)
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
@@ -368,29 +370,32 @@ class TaskService:
|
||||
Returns:
|
||||
Dictionary with task statistics
|
||||
"""
|
||||
total = db.query(Task).filter(Task.user_id == user_id).count()
|
||||
# Base filter: user's non-deleted tasks
|
||||
base_filter = and_(Task.user_id == user_id, Task.deleted_at.is_(None))
|
||||
|
||||
total = db.query(Task).filter(base_filter).count()
|
||||
|
||||
pending = (
|
||||
db.query(Task)
|
||||
.filter(and_(Task.user_id == user_id, Task.status == TaskStatus.PENDING))
|
||||
.filter(and_(base_filter, Task.status == TaskStatus.PENDING))
|
||||
.count()
|
||||
)
|
||||
|
||||
processing = (
|
||||
db.query(Task)
|
||||
.filter(and_(Task.user_id == user_id, Task.status == TaskStatus.PROCESSING))
|
||||
.filter(and_(base_filter, Task.status == TaskStatus.PROCESSING))
|
||||
.count()
|
||||
)
|
||||
|
||||
completed = (
|
||||
db.query(Task)
|
||||
.filter(and_(Task.user_id == user_id, Task.status == TaskStatus.COMPLETED))
|
||||
.filter(and_(base_filter, Task.status == TaskStatus.COMPLETED))
|
||||
.count()
|
||||
)
|
||||
|
||||
failed = (
|
||||
db.query(Task)
|
||||
.filter(and_(Task.user_id == user_id, Task.status == TaskStatus.FAILED))
|
||||
.filter(and_(base_filter, Task.status == TaskStatus.FAILED))
|
||||
.count()
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user