62 lines
1.3 KiB
TypeScript
62 lines
1.3 KiB
TypeScript
import { eventHandler } from 'h3'
|
|
import { getDatabase } from '../utils/database'
|
|
|
|
export default eventHandler(() => {
|
|
const db = getDatabase()
|
|
|
|
// Récupérer les boxes
|
|
const boxes = db
|
|
.prepare(
|
|
`
|
|
SELECT id, type, name, description, state, duration, active_side, color1, color2
|
|
FROM boxes
|
|
ORDER BY id
|
|
`
|
|
)
|
|
.all()
|
|
|
|
// Récupérer les sides pour chaque box
|
|
const sides = db
|
|
.prepare(
|
|
`
|
|
SELECT box_id, side, name, description, duration, color1, color2
|
|
FROM sides
|
|
`
|
|
)
|
|
.all()
|
|
|
|
// Grouper les sides par box_id
|
|
const sidesByBoxId: Record<string, any> = {}
|
|
for (const side of sides) {
|
|
if (!sidesByBoxId[side.box_id]) {
|
|
sidesByBoxId[side.box_id] = {}
|
|
}
|
|
sidesByBoxId[side.box_id][side.side] = {
|
|
name: side.name,
|
|
description: side.description,
|
|
duration: side.duration,
|
|
color1: side.color1,
|
|
color2: side.color2
|
|
}
|
|
}
|
|
|
|
// Formater les résultats
|
|
return boxes.map((box: any) => ({
|
|
id: box.id,
|
|
type: box.type,
|
|
name: box.name,
|
|
description: box.description,
|
|
state: box.state,
|
|
duration: box.duration,
|
|
activeSide: box.active_side,
|
|
...(box.type === 'compilation'
|
|
? {
|
|
sides: sidesByBoxId[box.id] || {}
|
|
}
|
|
: {
|
|
color1: box.color1,
|
|
color2: box.color2
|
|
})
|
|
}))
|
|
})
|