From 1ab17242f77efd352926960bef573ac37da8e8e6 Mon Sep 17 00:00:00 2001 From: Kenryu Shibata Date: Tue, 5 Nov 2024 01:01:07 +0900 Subject: [PATCH] added unwrapped json for gallery-image/list and news/list, integerated news-list api into news api --- src-manager/README.md | 11 +++--- src-manager/api/gallery-image.js | 30 ++++++++++++---- src-manager/api/index.js | 4 +-- src-manager/api/news-list.js | 47 ------------------------- src-manager/api/news.js | 60 +++++++++++++++++++++++++++++--- src-manager/package-lock.json | 14 ++++---- src-manager/pages/index.html | 2 +- 7 files changed, 95 insertions(+), 73 deletions(-) delete mode 100644 src-manager/api/news-list.js diff --git a/src-manager/README.md b/src-manager/README.md index b09668e..bd242d5 100644 --- a/src-manager/README.md +++ b/src-manager/README.md @@ -41,16 +41,17 @@ npm run dev # JSファイル変更時に自動リロードが入る開発サー ## API(RESTful) * `/api/news` - * GET: Unix時間で特定されたニュースの情報を取得する - `?target=` + * GET(`/`): Unix時間で特定されたニュースの情報を取得する - `?target=` + * GET(`/list`): HTML/HTMX形式で全ニュースの情報を取得する + * GET(`/list-unwrapped`): JSON形式で全ニュースの情報を取得する * POST: 新しいニュースを作成する * PUT: ニュースの内容を更新する * DELETE: Unix時間で特定されたニュースを削除する - `?target=` -* `/api/news-list` - * GET: 全ニュースの情報を取得する * `/api/gallery-image` * GET(`/`): IDで指定された画像へのパスと説明文を取得する - `?target=` - * GET(`/list`): 全画像の情報を取得する + * GET(`/list`): HTML/HTMX形式で全画像の情報を取得する + * GET(`/list-unwrapped`): JSON形式で全画像の情報を取得する * POST: 新しい画像の情報を追加する * PUT: 画像の情報を更新する - * DELETE: IDで指定された画像の情報を削除する - `?target=` \ No newline at end of file + * DELETE: IDで指定された画像の情報を削除する - `?target=` diff --git a/src-manager/api/gallery-image.js b/src-manager/api/gallery-image.js index fe0e1b0..0f72f82 100644 --- a/src-manager/api/gallery-image.js +++ b/src-manager/api/gallery-image.js @@ -19,12 +19,9 @@ galleryImageAPI.get('/list', async (request, response) => { for (const entry of rows) { ret = ret + "\n"; for (const data in entry) { - ret = ret + `${entry[data]}\n`; + ret = ret + `\t${entry[data]}\n`; } - ret = ret + `\n - \n - \n - \n\n`; + ret = ret + `\t\n\t\t\n\t\t\n\t\n\n`; } return ret; }); @@ -34,6 +31,23 @@ galleryImageAPI.get('/list', async (request, response) => { } catch (err) { console.error(err); database.close(); + response.status(500).send(err); + } +}); + +galleryImageAPI.get('/list-unwrapped', async (request, response) => { + const database = new sqlite3.Database(databasePath); + const sqlQuery = "SELECT * FROM gallery"; + + try { + const result = await asyncDatabaseRead(database, sqlQuery, (rows) => { return rows; }); + + database.close(); + response.send(result); + } catch (err) { + console.error(err); + database.close(); + response.status(500).send(err); } }); @@ -56,6 +70,7 @@ galleryImageAPI.get('/', async (request, response) => { } catch (err) { console.error(err); database.close(); + response.status(500).send(err); } }); @@ -72,6 +87,7 @@ galleryImageAPI.post('/', async (request, response) => { console.log("Image added successfully."); }); } catch (err) { + console.error(err); response.status(500).send(err); } @@ -99,6 +115,7 @@ galleryImageAPI.put('/', async (request, response) => { console.log("Image updated successfully."); }); } catch (err) { + console.error(err); response.status(500).send(err); } @@ -123,6 +140,7 @@ galleryImageAPI.delete('/', async (request, response) => { console.log("Image deleted successfully."); }); } catch (err) { + console.error(err); response.status(500).send(err); } @@ -130,4 +148,4 @@ galleryImageAPI.delete('/', async (request, response) => { response.status(200).send(); }); -export default galleryImageAPI; \ No newline at end of file +export default galleryImageAPI; diff --git a/src-manager/api/index.js b/src-manager/api/index.js index 6ed8597..fe33880 100644 --- a/src-manager/api/index.js +++ b/src-manager/api/index.js @@ -1,13 +1,11 @@ import express from 'express'; import newsAPI from './news.js'; -import newsListAPI from './news-list.js'; import galleryImageAPI from './gallery-image.js'; const router = express.Router(); router.use('/news', newsAPI); -router.use('/news-list', newsListAPI); router.use('/gallery-image', galleryImageAPI); -export default router; \ No newline at end of file +export default router; diff --git a/src-manager/api/news-list.js b/src-manager/api/news-list.js deleted file mode 100644 index fb3ef2a..0000000 --- a/src-manager/api/news-list.js +++ /dev/null @@ -1,47 +0,0 @@ -import express from 'express'; -import sqlite3 from 'sqlite3'; -import path from 'path'; -import { fileURLToPath } from 'url'; -import { asyncDatabaseRead } from '../utils/asyncDatabase.js'; - -const newsListAPI = express.Router(); -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const databasePath = path.join(__dirname, "../../assets/databases/news.db"); - -newsListAPI.get('/', async (request, response) => { - const database = new sqlite3.Database(databasePath); - const sqlQuery = `SELECT * FROM news ORDER BY date DESC;`; - try { - const result = await asyncDatabaseRead(database, sqlQuery, (rows) => { - let ret = ""; - for (const entry of rows) { - ret = ret + "\n"; - for (const data in entry) { - if (data == "article" || data == "coverImagePath" || data == "linkPath") continue; - if (data == "entryType") { - ret = ret + `${entry[data] == 0 ? "Article" : "Tweet"}\n`; - continue; - } - if (data == "date") { - ret = ret + `${new Date(entry[data]).toLocaleString()}\n`; - continue; - } - ret = ret + `${entry[data]}\n`; - } - ret = ret + `\n - \n - \n - \n\n`; - } - return ret - }); - database.close(); - response.send(result); - } catch (err) { - console.error(err); - database.close(); - } -}); - -export default newsListAPI; \ No newline at end of file diff --git a/src-manager/api/news.js b/src-manager/api/news.js index 3507124..9b8b8a0 100644 --- a/src-manager/api/news.js +++ b/src-manager/api/news.js @@ -15,6 +15,7 @@ newsAPI.get('/', async (request, response) => { const target = Number(request.query.target); if (isNaN(target)) { + console.error("Query is not number"); response.status(500).send("Query is not number"); return; } @@ -33,7 +34,7 @@ newsAPI.get('/', async (request, response) => { newsAPI.post('/', async (request, response) => { const database = new sqlite3.Database(databasePath); - + const currentDate = new Date(); const currentUnixTime = currentDate.valueOf(); const entryType = request.body.entryType; @@ -41,14 +42,15 @@ newsAPI.post('/', async (request, response) => { const article = request.body.article; const linkPath = entryType == 0 ? `/news/${request.body.linkPath}` : ""; const coverImagePath = request.body.coverImagePath; - + const sqlQuery = `INSERT INTO news (date, entryType, cardContent, article, linkPath, coverImagePath) VALUES (${currentUnixTime}, ${entryType}, "${cardContent}", "${article}", "${linkPath}", "${coverImagePath}");`; - + try { await asyncDatabaseWrite(database, sqlQuery, () => { console.log("News added successfully."); }); } catch (err) { + console.error(err); response.status(500).send(err); } database.close(); @@ -66,6 +68,7 @@ newsAPI.put('/', async (request, response) => { const coverImagePath = request.body.coverImagePath; if (isNaN(target)) { + console.error('Target is not number'); response.status(500).send('Target is not number'); return; } @@ -77,6 +80,7 @@ newsAPI.put('/', async (request, response) => { console.log("News updated successfully."); }); } catch (err) { + console.error(err); response.status(500).send(err); } @@ -90,6 +94,7 @@ newsAPI.delete('/', async (request, response) => { const target = Number(request.query.target); if (isNaN(target)) { + console.error('No Entry Found!'); response.status(404).send('No Entry Found!'); return; } @@ -101,6 +106,7 @@ newsAPI.delete('/', async (request, response) => { console.log("News deleted successfully."); }); } catch (err) { + console.error(err); response.status(500).send(err); } @@ -109,4 +115,50 @@ newsAPI.delete('/', async (request, response) => { response.status(200).send(); }); -export default newsAPI; \ No newline at end of file +newsAPI.get('/list', async (request, response) => { + const database = new sqlite3.Database(databasePath); + const sqlQuery = `SELECT id, date, entryType, cardContent FROM news ORDER BY date DESC;`; + try { + const result = await asyncDatabaseRead(database, sqlQuery, (rows) => { + let ret = ""; + for (const entry of rows) { + ret = ret + "\n"; + for (const data in entry) { + if (data == "entryType") { + ret = ret + `\t${entry[data] == 0 ? "Article" : "Tweet"}\n`; + continue; + } + if (data == "date") { + ret = ret + `\t${new Date(entry[data]).toLocaleString()}\n`; + continue; + } + ret = ret + `\t${entry[data]}\n`; + } + ret = ret + `\t\n\t\t\n\t\t\n\t\n\n`; + } + return ret + }); + database.close(); + response.send(result); + } catch (err) { + console.error(err); + database.close(); + } +}); + +newsAPI.get('/list-unwrapped', async (request, response) => { + const database = new sqlite3.Database(databasePath); + const sqlQuery = `SELECT id, date, entryType, cardContent FROM news ORDER BY date DESC;`; + + try { + const result = await asyncDatabaseRead(database, sqlQuery, (rows) => { return rows; }); + + database.close(); + response.send(result); + } catch (err) { + console.error(err); + database.close(); + } +}); + +export default newsAPI; diff --git a/src-manager/package-lock.json b/src-manager/package-lock.json index 9ca8517..af8f780 100644 --- a/src-manager/package-lock.json +++ b/src-manager/package-lock.json @@ -38,13 +38,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.9.tgz", - "integrity": "sha512-aI3jjAAO1fh7vY/pBGsn1i9LDbRP43+asrRlkPuTXW5yHXtd1NgTEMudbBoDDxrf1daEEfPJqR+JBMakzrR4Dg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -54,9 +54,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.9.tgz", - "integrity": "sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/src-manager/pages/index.html b/src-manager/pages/index.html index f330a55..f8a4fee 100644 --- a/src-manager/pages/index.html +++ b/src-manager/pages/index.html @@ -34,7 +34,7 @@

News

- +