add autocomplete input for student selection in journal filters, link creation, and links admin

This commit is contained in:
dev
2026-09-05 20:26:21 +03:00
parent ee0a18e4cd
commit 7a72cb4547
5 changed files with 66 additions and 22 deletions
+10 -8
View File
@@ -239,25 +239,25 @@ app.get('/api/links', requireAdmin, async (_, res) => {
});
app.post('/api/links', requireAdmin, async (req, res) => {
const { name, group_id, date_from, date_to } = req.body;
const { name, group_id, student_name, date_from, date_to } = req.body;
if (!name?.trim()) return res.status(400).json({ error: 'Название обязательно' });
const token = crypto.randomBytes(20).toString('hex');
const { rows } = await pool.query(
`INSERT INTO share_links (token, name, group_id, date_from, date_to)
VALUES ($1, $2, $3, $4, $5) RETURNING *`,
[token, name.trim(), group_id || null, date_from || null, date_to || null]
`INSERT INTO share_links (token, name, group_id, student_name, date_from, date_to)
VALUES ($1, $2, $3, $4, $5, $6) RETURNING *`,
[token, name.trim(), group_id || null, student_name || null, date_from || null, date_to || null]
);
res.status(201).json(normDates(rows[0]));
});
app.put('/api/links/:id', requireAdmin, async (req, res) => {
const { name, group_id, date_from, date_to } = req.body;
const { name, group_id, student_name, date_from, date_to } = req.body;
if (!name?.trim()) return res.status(400).json({ error: 'Название обязательно' });
const { rows } = await pool.query(
`UPDATE share_links SET
name = $1, group_id = $2, date_from = $3, date_to = $4
WHERE id = $5 RETURNING *`,
[name.trim(), group_id || null, date_from || null, date_to || null, req.params.id]
name = $1, group_id = $2, student_name = $3, date_from = $4, date_to = $5
WHERE id = $6 RETURNING *`,
[name.trim(), group_id || null, student_name || null, date_from || null, date_to || null, req.params.id]
);
if (!rows.length) return res.status(404).json({ error: 'Не найдено' });
res.json(normDates(rows[0]));
@@ -280,6 +280,7 @@ app.get('/api/share/:token', async (req, res) => {
const conditions = [];
const params = [];
if (l.group_id) { params.push(l.group_id); conditions.push(`e.group_id = $${params.length}`); }
if (l.student_name) { params.push(l.student_name); conditions.push(`e.student_name = $${params.length}`); }
if (l.date_from) { params.push(l.date_from); conditions.push(`e.created_at >= $${params.length}::date`); }
if (l.date_to) { params.push(l.date_to); conditions.push(`e.created_at < ($${params.length}::date + interval '1 day')`); }
const where = conditions.length ? ' WHERE ' + conditions.join(' AND ') : '';
@@ -291,6 +292,7 @@ app.get('/api/share/:token', async (req, res) => {
res.json({
name: l.name,
group_name: l.group_name,
student_name: l.student_name,
group_id: l.group_id,
date_from: l.date_from,
date_to: l.date_to,