feat: 모든 페이지에서 최신순 정렬 적용

📅 Sorting Order Improvements:
- 모든 이슈 목록에서 최신 항목이 위로 오도록 정렬 순서 통일
- report_date 기준 내림차순(DESC) 정렬로 일관성 확보

🔧 Backend API Updates:
- GET /api/issues/: order_by(Issue.report_date.desc()) 추가
- GET /api/issues/admin/all: order_by(Issue.report_date.desc()) 추가
- GET /api/reports/issues: order_by(Issue.report_date.desc()) 변경

🎨 Frontend Sorting Updates:
- issues-inbox.html: created_at → report_date 기준 정렬
- issues-management.html: created_at → report_date 기준 정렬
- issues-archive.html: updated_at/created_at → report_date 기준 정렬
- 폐기함 'completed' 정렬: disposed_at 우선, 없으면 report_date 사용

📋 Consistency Improvements:
- 수신함, 관리함, 폐기함 모든 페이지에서 동일한 정렬 기준 적용
- 백엔드 API와 프론트엔드 정렬 로직 일치
- 사용자 경험 향상: 최신 이슈를 먼저 확인 가능

🚀 User Experience:
- 최신 부적합 사항을 즉시 확인 가능
- 시간순 정렬로 업무 우선순위 파악 용이
- 일관된 정렬 순서로 사용자 혼란 방지

Expected Result:
 모든 이슈 목록에서 최신 항목이 맨 위에 표시
 백엔드 API와 프론트엔드 정렬 로직 일치
 수신함/관리함/폐기함 정렬 순서 통일
 사용자가 최신 이슈를 우선적으로 확인 가능
This commit is contained in:
Hyungi Ahn
2025-10-25 14:01:44 +09:00
parent 492c31c248
commit 8996f5b432
8 changed files with 15 additions and 13 deletions

View File

@@ -65,7 +65,8 @@ async def read_issues(
if status:
query = query.filter(Issue.status == status)
issues = query.offset(skip).limit(limit).all()
# 최신순 정렬 (report_date 기준)
issues = query.order_by(Issue.report_date.desc()).offset(skip).limit(limit).all()
return issues
@router.get("/admin/all", response_model=List[schemas.Issue])
@@ -93,7 +94,8 @@ async def read_all_issues_admin(
if status:
query = query.filter(Issue.status == status)
issues = query.offset(skip).limit(limit).all()
# 최신순 정렬 (report_date 기준)
issues = query.order_by(Issue.report_date.desc()).offset(skip).limit(limit).all()
return issues
@router.get("/{issue_id}", response_model=schemas.Issue)

View File

@@ -92,7 +92,7 @@ async def get_report_issues(
if current_user.role == UserRole.user:
query = query.filter(Issue.reporter_id == current_user.id)
issues = query.order_by(Issue.report_date).all()
issues = query.order_by(Issue.report_date.desc()).all()
return [{
"id": issue.id,

View File

@@ -395,15 +395,15 @@
filteredIssues.sort((a, b) => {
switch (sortOrder) {
case 'newest':
return new Date(b.updated_at || b.created_at) - new Date(a.updated_at || a.created_at);
return new Date(b.report_date) - new Date(a.report_date);
case 'oldest':
return new Date(a.updated_at || a.created_at) - new Date(b.updated_at || b.created_at);
return new Date(a.report_date) - new Date(b.report_date);
case 'completed':
return new Date(b.updated_at || b.created_at) - new Date(a.updated_at || a.created_at);
return new Date(b.disposed_at || b.report_date) - new Date(a.disposed_at || a.report_date);
case 'category':
return (a.category || '').localeCompare(b.category || '');
default:
return new Date(b.updated_at || b.created_at) - new Date(a.updated_at || a.created_at);
return new Date(b.report_date) - new Date(a.report_date);
}
});
}

View File

@@ -703,14 +703,14 @@
filteredIssues.sort((a, b) => {
switch (sortOrder) {
case 'newest':
return new Date(b.created_at) - new Date(a.created_at);
return new Date(b.report_date) - new Date(a.report_date);
case 'oldest':
return new Date(a.created_at) - new Date(b.created_at);
return new Date(a.report_date) - new Date(b.report_date);
case 'priority':
const priorityOrder = { 'high': 3, 'medium': 2, 'low': 1 };
return (priorityOrder[b.priority] || 1) - (priorityOrder[a.priority] || 1);
default:
return new Date(b.created_at) - new Date(a.created_at);
return new Date(b.report_date) - new Date(a.report_date);
}
});
}

View File

@@ -406,14 +406,14 @@
const priorityOrder = { 'high': 3, 'medium': 2, 'low': 1 };
return (priorityOrder[b.priority] || 1) - (priorityOrder[a.priority] || 1);
case 'newest':
return new Date(b.created_at) - new Date(a.created_at);
return new Date(b.report_date) - new Date(a.report_date);
case 'oldest':
return new Date(a.created_at) - new Date(b.created_at);
return new Date(a.report_date) - new Date(b.report_date);
case 'status':
const statusOrder = { 'new': 4, 'processing': 3, 'pending': 2, 'completed': 1 };
return (statusOrder[b.status] || 0) - (statusOrder[a.status] || 0);
default:
return new Date(b.created_at) - new Date(a.created_at);
return new Date(b.report_date) - new Date(a.report_date);
}
});
}