読み込み中
豆知識
Date: February 2, 2026
Priority: High
Affects: GET /api/bank-statements
The current /api/bank-statements endpoint returns data sorted by transaction_date ASC (oldest first) without any sorting options. This causes critical UX issues:
page_size=100, newly imported transactions are invisible (beyond page 1)| Parameter | Type | Values | Default | Description |
|---|---|---|---|---|
sort_by |
string | transaction_date, created_at |
transaction_date |
Field to sort results by |
sort_order |
string | asc, desc |
desc |
Sort direction |
endpoint: GET /api/bank-statements
existing_parameters:
- page_size: number (default: 100)
- page_number: number (default: 1)
- start_date: number (YYYYMMDD format)
- end_date: number (YYYYMMDD format)
- include_linked_counts: boolean
new_parameters:
- name: sort_by
type: string
enum: [transaction_date, created_at]
default: transaction_date
description: Field to sort results by
- name: sort_order
type: string
enum: [asc, desc]
default: desc
description: Sort direction (desc = newest first)
# Newest transactions first (recommended default)
GET /api/bank-statements?page_size=50&page_number=1&sort_order=desc
# Oldest transactions first (for reports)
GET /api/bank-statements?page_size=50&page_number=1&sort_order=asc
# Sort by import time
GET /api/bank-statements?page_size=50&sort_by=created_at&sort_order=desc
No changes to response format. Pagination metadata remains:
{
"success": true,
"data": {
"items": [...],
"pagination": {
"currentPage": 1,
"pageSize": 50,
"totalItems": 1300,
"totalPages": 26,
"hasNext": true,
"hasPrevious": false
}
}
}
Current query (pseudocode):
SELECT * FROM bank_statements
WHERE user_id = ?
AND transaction_date BETWEEN ? AND ?
ORDER BY transaction_date ASC -- Current default
LIMIT ? OFFSET ?
Proposed query:
SELECT * FROM bank_statements
WHERE user_id = ?
AND transaction_date BETWEEN ? AND ?
ORDER BY
CASE WHEN :sort_by = 'created_at' THEN created_at ELSE transaction_date END
CASE WHEN :sort_order = 'asc' THEN ASC ELSE DESC END
LIMIT ? OFFSET ?
sort_by must be one of: transaction_date, created_atsort_order must be one of: asc, desc{
"success": false,
"message": "Invalid sort_order value. Must be 'asc' or 'desc'",
"code": "ERR_VALIDATION"
}
Once implemented, frontend will:
sort_order=desc for all bank statement queriesuseInfiniteQuery with proper pagination// src/features/bank-statement/types.ts
export type BankStatementQueryParams = GetAllParams & {
start_date?: number
end_date?: number
include_linked_counts?: boolean
sort_by?: "transaction_date" | "created_at"
sort_order?: "asc" | "desc"
}
sort_order=asc returns oldest firstIf issues arise:
ORDER BY transaction_date ASC読み込み中
豆知識