feat: Status-Pipeline (reviewed), Audio-Verknüpfung+Coverage, EP-Fortschritt, Wort-Generierung
- reviewed-Status für objects/questions/statements/pairs (Constraints) - feed: nur fertige Inhalte (published + Bild + Audio-Gate), audio_url - pairs: Publish-Gating (draft→published = 409) - audios: source_table/source_id/source_field/language + Unique-Index; generate-for, generate-batch, GET /coverage; voices.js (Voice je Sprache) - auth: POST /auth/progress, /auth/me mit total_ep/streak/level; users_public EP-Spalten + user_pair_progress.earned_points - claude: POST /generate-words; words POST akzeptiert status Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -45,11 +45,13 @@ router.get('/', async (req, res, next) => {
|
||||
// POST /api/words
|
||||
router.post('/', async (req, res, next) => {
|
||||
try {
|
||||
const { titel_de, titel_en, titel_sv, difficulty_level } = req.body;
|
||||
const { titel_de, titel_en, titel_sv, difficulty_level, status } = req.body;
|
||||
if (status && !STATUSES.includes(status))
|
||||
return res.status(400).json({ error: `status must be one of: ${STATUSES.join(', ')}` });
|
||||
const result = await query(
|
||||
`INSERT INTO words (titel_de, titel_en, titel_sv, difficulty_level, requested_at)
|
||||
VALUES ($1, $2, $3, $4, NOW()) RETURNING *`,
|
||||
[titel_de || null, titel_en || null, titel_sv || null, difficulty_level || null]
|
||||
`INSERT INTO words (titel_de, titel_en, titel_sv, difficulty_level, status, requested_at)
|
||||
VALUES ($1, $2, $3, $4, COALESCE($5, 'requested'), NOW()) RETURNING *`,
|
||||
[titel_de || null, titel_en || null, titel_sv || null, difficulty_level || null, status || null]
|
||||
);
|
||||
res.status(201).json({ ...result.rows[0], picture_ids: [], category_ids: [] });
|
||||
} catch (err) { next(err); }
|
||||
|
||||
Reference in New Issue
Block a user