added PageTop component, markdown styles, white background on logo svg, and documentation comments

This commit is contained in:
2024-09-26 23:59:47 +09:00
parent a55bd18ebc
commit e1cac6ff05
34 changed files with 3345 additions and 2113 deletions

65
server/api/getArticle.ts Normal file
View File

@@ -0,0 +1,65 @@
/**
* Getting article from database.
* @module api/getArticle
*/
import sqlite3 from "sqlite3";
import path from "path";
import { fileURLToPath } from "url";
import { asyncDatabaseRead } from "~/utils/asyncDatabase";
import type { ArticleInfo } from "~/utils/news";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
/**
* Handler of getArticle event. Entry is selected by linkPath
* @name getArticleEventHandler
* @param {H3Event<EventHandlerRequest>} event
* @returns {ArticleInfo} - object that contains information and content of article
* @function
*/
const getArticleEventHandler = defineEventHandler(async (event: any) => {
const database = new sqlite3.Database(
path.join(__dirname, "../../assets/databases/news.db")
);
let res: ArticleInfo = {
date: 0,
cardContent: "",
article: "",
linkPath: "",
coverImagePath: "",
};
const target = "/news/" + getQuery(event).name;
const sql = `SELECT date, cardContent, article, linkPath, coverImagePath FROM news WHERE linkPath = "${target}" AND entryType = 0;`;
try {
const entry: ArticleInfo = await asyncDatabaseRead<ArticleInfo>(
database,
sql,
(rows) => {
return rows[0];
}
);
res = {
date: entry.date,
cardContent: entry.cardContent,
article: entry.article,
linkPath: entry.linkPath,
coverImagePath: entry.coverImagePath,
};
} catch (err: any) {
throw createError({
statusCode: 500,
statusMessage: err.message,
});
}
database.close();
return res;
});
export default getArticleEventHandler;

50
server/api/getNewsList.ts Normal file
View File

@@ -0,0 +1,50 @@
/**
* Getting list of articles from database.
* @module api/getArticleList
*/
import sqlite3 from "sqlite3";
import path from "path";
import { fileURLToPath } from "url";
import { asyncDatabaseRead } from "~/utils/asyncDatabase";
import type { NewsEntry } from "~/utils/news";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
/**
* Handler of getArticleList event
* @name getArticleListEventHandler
* @param {H3Event<EventHandlerRequest>} event
* @returns {Array<NewsEntry>} list of news
* @function
*/
const getArticleListEventHandler = defineEventHandler(async (event: any) => {
const database = new sqlite3.Database(
path.join(__dirname, "../../assets/databases/news.db")
);
const sql = `SELECT date, entryType, cardContent, linkPath, coverImagePath FROM news ORDER BY date DESC;`;
let res: Array<NewsEntry> = new Array<NewsEntry>(0);
try {
res = await asyncDatabaseRead<Array<NewsEntry>>(
database,
sql,
(rows) => {
return rows;
}
);
} catch (err: any) {
throw createError({
statusCode: 500,
statusMessage: err.message,
});
}
database.close();
return res;
});
export default getArticleListEventHandler;

View File

@@ -1,18 +1,18 @@
/**
* Getting Unix time when the API was called.
* Getting Unix time when the API was called.
* @module api/getTime
* @exports defineEventHandler(getTimeEventHandler) */
*/
/**
* Handler of getTime event
* @name getTimeEventHandler
* @param {H3Event<EventHandlerRequest>} event
* @returns {number} - Unix time
* @returns {number} Unix time
* @function
*/
const getTimeEventHandler = (event: any) => {
const getTimeEventHandler = defineEventHandler((event: any) => {
const now = new Date();
return now.valueOf();
};
});
export default defineEventHandler(getTimeEventHandler);
export default getTimeEventHandler;