import { eventHandler, getQuery } from 'h3' import { getDatabase } from '../../utils/database' export default eventHandler((event) => { const db = getDatabase() const query = getQuery(event) // Paramètres de pagination const page = parseInt(query.page as string) || 1 const limit = parseInt(query.limit as string) || 50 const offset = (page - 1) * limit // Filtres optionnels const boxId = query.boxId as string | undefined const side = query.side as string | undefined // Construction de la requête let sql = ` SELECT t.id, t.box_id, t.side, t.track_order, t.title, t.artist_id, t.start, t.link, t.cover_id, t.url, t.type, a.name as artist_name FROM tracks t LEFT JOIN artists a ON t.artist_id = a.id WHERE t.type = 'compilation' ` const params: any[] = [] if (boxId) { sql += ' AND t.box_id = ?' params.push(boxId) } if (side) { sql += ' AND t.side = ?' params.push(side) } sql += ' ORDER BY t.box_id, t.side, t.track_order' sql += ' LIMIT ? OFFSET ?' params.push(limit, offset) const tracks = db.prepare(sql).all(...params) // Compter le total pour la pagination let countSql = "SELECT COUNT(*) as total FROM tracks WHERE type = 'compilation'" const countParams: any[] = [] if (boxId) { countSql += ' AND box_id = ?' countParams.push(boxId) } if (side) { countSql += ' AND side = ?' countParams.push(side) } const { total } = db.prepare(countSql).get(...countParams) as { total: number } return { tracks: tracks.map((track: any) => ({ id: track.id, boxId: track.box_id, side: track.side, order: track.track_order, title: track.title, artist: track.artist_id, artistName: track.artist_name, start: track.start, link: track.link, coverId: track.cover_id, url: track.url, type: track.type })), pagination: { page, limit, total, totalPages: Math.ceil(total / limit) } } })