From 247dfd2ea1a733f24bb2f6bc05d7617786027465 Mon Sep 17 00:00:00 2001 From: dekabu Date: Sun, 6 Jul 2025 08:38:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20AP?= =?UTF-8?q?I=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=81=D1=82=D0=B8=D1=85=D0=BE=D0=B2=20VersePart?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db.js | 17 +++++++++++++++++ src/server.js | 37 ++++++++++++++++++++++++++++++++++--- www | 2 +- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/db.js b/src/db.js index 7e2e3ba..cb6f134 100644 --- a/src/db.js +++ b/src/db.js @@ -1,5 +1,7 @@ import { getConfig } from './config.js' import fs from 'fs' +import readline from 'readline' +import path from 'path' import { createHash } from 'crypto' const DB = getConfig().DB @@ -14,6 +16,20 @@ function getVerse() { return Verse } +async function getPreview(number) { + const rl = readline.createInterface({ + input: fs.createReadStream(path.join(DB, 'verse', String(number), 'text')), + crlfDelay: Infinity + }) + const lines = [] + for await (const line of rl) { + lines.push(line) + if (lines.length >= 4) + break + } + return lines.join('\n') +} + function getPeopleCount() { return Object.keys(People).length } @@ -92,6 +108,7 @@ export default { getVerse, getPeopleCount, getVerseCount, + getPreview, peopleNumberByLogin, peopleByLogin, checkPassword, diff --git a/src/server.js b/src/server.js index 010ee1f..2c8e056 100644 --- a/src/server.js +++ b/src/server.js @@ -72,11 +72,32 @@ const server = createServer(async (req, res) => { body += chunk.toString() }) req.on('end', () => { + let index + let data body = querystring.parse(body) switch (tokens[1]) { - case 'verse': - let data = {} - let index = Number(tokens[2]) + case 'people': + index = Number(tokens[2]) + if (isNaN(index)) { + data = People + res.setHeader('Content-Type', 'application/json') + res.end(JSON.stringify(data)) + } + else { + if (People[index]) { + data = People[index] + res.setHeader('Content-Type', 'application/json') + res.end(JSON.stringify(data)) + } + else { + res.statusCode = 404 + res.sendText('Нет человека с таким индексом!') + } + } + break + case 'versepart': + data = {} + index = Number(tokens[2]) if (isNaN(index)) index = 0 if (index < 0) { @@ -107,6 +128,16 @@ const server = createServer(async (req, res) => { res.end(JSON.stringify(data)) } break + case 'pre': + index = tokens[2] + if (Verse[index]) { + db.getPreview(tokens[2]).then(text => sendText(text)) + } + else { + res.statusCode = 404 + sendText('Не найдено!') + } + break case 'checklogin': if (db.peopleByLogin(tokens[2])) sendText('Логин занят') diff --git a/www b/www index c6cbc86..b7d4091 160000 --- a/www +++ b/www @@ -1 +1 @@ -Subproject commit c6cbc86b8a361f59d5f06dc2eb6581c21da51d4f +Subproject commit b7d40913c60c43e216f8d1f65f7ba6b64e215324