import { Router } from "express"; import { apiStat } from "../lib.js"; import { initDb } from "../db.js"; import { randomBytes } from 'node:crypto'; let db = await initDb(); const router = Router(); const minChar = 1; const maxChar = 2048; router.post('/', async (req, res, next) => { let { username } = res.auth; let { post, type, id, edit } = req.body; if (!username) { apiStat(res, next, 'Log in to chat with the community.') return; } if (!post || !id || !type) { apiStat(res, next, 'Fields are missing.') return; } if (post.length < minChar || post.length > maxChar) { apiStat(res, next, `Post length isn't ${minChar} to ${maxChar} characters.`) return; } let token = randomBytes(8).toString('hex'); if (req.file && req.file.path) { post += `\nfile::${req.file.path}`; } if (edit == 'edit') { await db.run('UPDATE comment SET content = ? WHERE username = ? AND id = ?', [ post, username, id ]); return; } await db.run('INSERT INTO comment (username, date, content, id) VALUES (?,?,?,?)', [ username, (+new Date), post, token ]); await db.run('INSERT INTO feeder (parentType, parentId , childType , childId , sortId ) VALUES(?,?,?,?,?)', [ type, id, 'comment', token, (+new Date) ]); if (type == 'users') { await db.run('INSERT INTO messages (username, date, content, link, status) VALUES(?,?,?,?,?)', [ id, (+new Date), `A user responded to your wall.`, `/walls/get/users/${id}/0`, 'unread' ]); } else if (type == 'comment') { let commenter = await db.all('SELECT * FROM comment WHERE id = ?', [ id ]); if (commenter[0]) { await db.run('INSERT INTO messages (username, date, content, link, status) VALUES(?,?,?,?,?)', [ commenter[0].username, (+new Date), `A user responded to your post.`, `/walls/get/comment/${id}/0`, 'unread' ]); } } apiStat(res, next, `Comment submitted.`, '/comment/' + token) }) export default router;