119 lines
5.6 KiB
JavaScript
119 lines
5.6 KiB
JavaScript
const { fetchPagedRows } = require('./utils');
|
|
|
|
async function fetchAdminData(pool) {
|
|
const [playlists] = await pool.query('SELECT id, name, fade_between_slides, skip_unavailable_rtmp, created_at, modified_at, created_by, modified_by FROM playlists ORDER BY id DESC');
|
|
const [canvasSizes] = await pool.query('SELECT id, name, width, height, created_at, modified_at, created_by, modified_by FROM canvas_sizes ORDER BY width ASC, height ASC, name ASC');
|
|
const [templates] = await pool.query(`
|
|
SELECT st.id, st.name, st.canvas_size_id, st.background_image_path, st.background_color, st.created_at, st.modified_at,
|
|
cs.name AS canvas_size_name, cs.width AS canvas_size_width, cs.height AS canvas_size_height
|
|
FROM slide_templates st
|
|
LEFT JOIN canvas_sizes cs ON cs.id = st.canvas_size_id
|
|
ORDER BY st.id DESC
|
|
`);
|
|
const [templateRegions] = await pool.query('SELECT id, template_id, region_key, region_type, label, font_family, lock_ratio, x, y, width, height, z_index, created_at, modified_at, created_by, modified_by FROM slide_template_regions ORDER BY template_id ASC, z_index ASC, id ASC');
|
|
const [slides] = await pool.query(`
|
|
SELECT s.id, s.title, s.body, s.template_id, s.content_json, s.media_path, s.media_type, s.thumbnail_path, s.created_at, s.modified_at, s.created_by, s.modified_by, st.name AS template_name, cs.width AS canvas_width, cs.height AS canvas_height
|
|
FROM slides s
|
|
LEFT JOIN slide_templates st ON st.id = s.template_id
|
|
LEFT JOIN canvas_sizes cs ON cs.id = st.canvas_size_id
|
|
ORDER BY s.id DESC
|
|
`);
|
|
const [screens] = await pool.query(`
|
|
SELECT s.id, s.name, s.slug, s.playlist_id, s.created_at, s.modified_at, s.created_by, s.modified_by, p.name AS playlist_name
|
|
FROM screens s
|
|
LEFT JOIN playlists p ON p.id = s.playlist_id
|
|
ORDER BY s.id DESC
|
|
`);
|
|
const [playlistSlides] = await pool.query(`
|
|
SELECT ps.id, ps.playlist_id, ps.position, ps.duration_seconds, ps.schedule_mode, ps.schedule_start_datetime, ps.schedule_end_datetime, ps.schedule_start_time, ps.schedule_end_time, ps.schedule_days_json, sl.id AS slide_id, sl.title, sl.media_path, sl.media_type, sl.thumbnail_path, cs.width AS canvas_width, cs.height AS canvas_height
|
|
FROM playlist_slides ps
|
|
JOIN slides sl ON sl.id = ps.slide_id
|
|
LEFT JOIN slide_templates st ON st.id = sl.template_id
|
|
LEFT JOIN canvas_sizes cs ON cs.id = st.canvas_size_id
|
|
ORDER BY ps.playlist_id ASC, ps.position ASC, ps.id ASC
|
|
`);
|
|
return { playlists, canvasSizes, templates, templateRegions, slides, screens, playlistSlides };
|
|
}
|
|
|
|
async function fetchPlaylistsPage(pool, page, pageSize) {
|
|
const paged = await fetchPagedRows(pool, {
|
|
selectSql: `SELECT p.id, p.name, p.fade_between_slides, p.skip_unavailable_rtmp, p.created_at, p.modified_at, p.created_by, p.modified_by,
|
|
(SELECT COUNT(*) FROM playlist_slides ps WHERE ps.playlist_id = p.id) AS slide_count
|
|
FROM playlists p
|
|
ORDER BY p.id DESC`,
|
|
countSql: 'SELECT COUNT(*) AS count FROM playlists',
|
|
page: page,
|
|
pageSize: pageSize
|
|
});
|
|
|
|
return Object.assign({ playlists: paged.rows }, paged);
|
|
}
|
|
|
|
async function fetchSlidesPage(pool, page, pageSize) {
|
|
const paged = await fetchPagedRows(pool, {
|
|
selectSql: `SELECT s.id, s.title, s.body, s.template_id, s.content_json, s.media_path, s.media_type, s.thumbnail_path, s.created_at, s.modified_at, s.created_by, s.modified_by, st.name AS template_name, cs.width AS canvas_width, cs.height AS canvas_height
|
|
FROM slides s
|
|
LEFT JOIN slide_templates st ON st.id = s.template_id
|
|
LEFT JOIN canvas_sizes cs ON cs.id = st.canvas_size_id
|
|
ORDER BY s.id DESC`,
|
|
countSql: 'SELECT COUNT(*) AS count FROM slides',
|
|
page: page,
|
|
pageSize: pageSize
|
|
});
|
|
|
|
return Object.assign({ slides: paged.rows }, paged);
|
|
}
|
|
|
|
async function fetchTemplatesPage(pool, page, pageSize) {
|
|
const paged = await fetchPagedRows(pool, {
|
|
selectSql: `SELECT st.id, st.name, st.canvas_size_id, st.background_image_path, st.background_color, st.created_at, st.modified_at,
|
|
cs.name AS canvas_size_name, cs.width AS canvas_size_width, cs.height AS canvas_size_height,
|
|
(SELECT COUNT(*) FROM slide_template_regions str WHERE str.template_id = st.id) AS region_count
|
|
FROM slide_templates st
|
|
LEFT JOIN canvas_sizes cs ON cs.id = st.canvas_size_id
|
|
ORDER BY st.id DESC`,
|
|
countSql: 'SELECT COUNT(*) AS count FROM slide_templates',
|
|
page: page,
|
|
pageSize: pageSize
|
|
});
|
|
|
|
return Object.assign({ templates: paged.rows }, paged);
|
|
}
|
|
|
|
async function fetchCanvasSizesPage(pool, page, pageSize) {
|
|
const paged = await fetchPagedRows(pool, {
|
|
selectSql: `SELECT id, name, width, height, created_at, modified_at, created_by, modified_by,
|
|
(SELECT COUNT(*) FROM slide_templates st WHERE st.canvas_size_id = canvas_sizes.id) AS template_count
|
|
FROM canvas_sizes
|
|
ORDER BY width ASC, height ASC, name ASC`,
|
|
countSql: 'SELECT COUNT(*) AS count FROM canvas_sizes',
|
|
page: page,
|
|
pageSize: pageSize
|
|
});
|
|
|
|
return Object.assign({ canvasSizes: paged.rows }, paged);
|
|
}
|
|
|
|
async function fetchScreensPage(pool, page, pageSize) {
|
|
const paged = await fetchPagedRows(pool, {
|
|
selectSql: `SELECT s.id, s.name, s.slug, s.playlist_id, s.created_at, s.modified_at, s.created_by, s.modified_by, p.name AS playlist_name
|
|
FROM screens s
|
|
LEFT JOIN playlists p ON p.id = s.playlist_id
|
|
ORDER BY s.id DESC`,
|
|
countSql: 'SELECT COUNT(*) AS count FROM screens',
|
|
page: page,
|
|
pageSize: pageSize
|
|
});
|
|
|
|
return Object.assign({ screens: paged.rows }, paged);
|
|
}
|
|
|
|
module.exports = {
|
|
fetchAdminData,
|
|
fetchPlaylistsPage,
|
|
fetchSlidesPage,
|
|
fetchTemplatesPage,
|
|
fetchCanvasSizesPage,
|
|
fetchScreensPage
|
|
};
|