feat: implement sorting functionality for movie management and add sections API for recent comments and trending movies

This commit is contained in:
ngthanhvu
2026-07-29 23:10:40 -04:00
parent 1c92c0d50b
commit 00036a7cc2
4 changed files with 527 additions and 10 deletions
+19 -2
View File
@@ -1,5 +1,5 @@
import { movies } from '../../database/schema'
import { desc, eq, like, and, sql } from 'drizzle-orm'
import { desc, eq, like, and, sql, asc } from 'drizzle-orm'
export default defineEventHandler(async (event) => {
const db = useDb()
@@ -11,6 +11,8 @@ export default defineEventHandler(async (event) => {
const status = typeof query.status === 'string' ? query.status : ''
const source = typeof query.source === 'string' ? query.source : ''
const type = typeof query.type === 'string' ? query.type : ''
const sortBy = typeof query.sortBy === 'string' ? query.sortBy : ''
const sortOrder = typeof query.sortOrder === 'string' ? query.sortOrder : 'desc'
const conditions: any[] = []
@@ -22,12 +24,27 @@ export default defineEventHandler(async (event) => {
const whereClause = conditions.length > 0 ? and(...conditions) : undefined
const allowedSortColumns: Record<string, any> = {
name: movies.name,
views: movies.views,
apiUpdatedAt: movies.apiUpdatedAt,
active: movies.active,
}
const orderBy: any[] = []
if (sortBy && allowedSortColumns[sortBy]) {
const column = allowedSortColumns[sortBy]
orderBy.push(sortOrder === 'asc' ? asc(column) : desc(column))
} else {
orderBy.push(desc(movies.apiUpdatedAt), desc(movies.year), desc(movies.syncedAt))
}
const [items, countResult] = await Promise.all([
db
.select()
.from(movies)
.where(whereClause)
.orderBy(desc(movies.apiUpdatedAt), desc(movies.year), desc(movies.syncedAt))
.orderBy(...orderBy)
.limit(limit)
.offset(offset),
db