chore: add .gitignore, remove VSCode settings, and optimize database queries
This commit is contained in:
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
.vscode
|
||||||
|
.DS_Store
|
||||||
|
**/*.db
|
||||||
5
.vscode/extensions.json
vendored
5
.vscode/extensions.json
vendored
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"recommendations": [
|
|
||||||
"denoland.vscode-deno"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
6
.vscode/settings.json
vendored
6
.vscode/settings.json
vendored
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"deno.enablePaths": [
|
|
||||||
"./"
|
|
||||||
],
|
|
||||||
"editor.inlayHints.enabled": "off"
|
|
||||||
}
|
|
||||||
@@ -1,21 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
* @Date: 2025-06-12 16:48:44
|
* @Date: 2025-06-12 16:48:44
|
||||||
* @LastEditors: 陈子健
|
* @LastEditors: 陈子健
|
||||||
* @LastEditTime: 2025-06-12 17:31:37
|
* @LastEditTime: 2025-06-13 14:23:03
|
||||||
* @FilePath: /my-score/honoback/db/index.ts
|
* @FilePath: /my-score/honoback/db/index.ts
|
||||||
*/
|
*/
|
||||||
import { DatabaseSync } from "node:sqlite"
|
import { DatabaseSync } from "node:sqlite"
|
||||||
import { join, dirname } from 'node:path'
|
import { join, dirname } from 'node:path'
|
||||||
import { fileURLToPath } from 'node:url'
|
import { fileURLToPath } from 'node:url'
|
||||||
import { readFileSync } from 'node:fs'
|
|
||||||
|
|
||||||
const __dirname = dirname(fileURLToPath(import.meta.url))
|
const __dirname = dirname(fileURLToPath(import.meta.url))
|
||||||
|
|
||||||
// 初始化数据库连接
|
// 初始化数据库连接
|
||||||
const db = new DatabaseSync(join(__dirname, 'media.db'))
|
const db = new DatabaseSync(join(__dirname, 'media.db'))
|
||||||
|
|
||||||
// 执行schema.sql中的SQL语句
|
export { db }
|
||||||
const schema = readFileSync(join(__dirname, 'schema.sql'), 'utf-8')
|
|
||||||
db.exec(schema)
|
|
||||||
|
|
||||||
export { db }
|
|
||||||
|
|||||||
BIN
db/media.db
BIN
db/media.db
Binary file not shown.
@@ -5,9 +5,9 @@ import type { JwtVariables } from 'hono/jwt'
|
|||||||
const media = new Hono<{ Variables: JwtVariables }>()
|
const media = new Hono<{ Variables: JwtVariables }>()
|
||||||
|
|
||||||
// 获取所有媒体记录
|
// 获取所有媒体记录
|
||||||
media.get('/list', async (c) => {
|
media.get('/list', (c) => {
|
||||||
try {
|
try {
|
||||||
const mediaList = await db.prepare('SELECT * FROM media').all()
|
const mediaList = db.prepare('SELECT * FROM media').all()
|
||||||
return c.json({
|
return c.json({
|
||||||
code: 0,
|
code: 0,
|
||||||
data: mediaList,
|
data: mediaList,
|
||||||
@@ -24,12 +24,12 @@ media.post('/create', async (c) => {
|
|||||||
const data = await c.req.json()
|
const data = await c.req.json()
|
||||||
const { title, type, rating, notes, platform, date } = data
|
const { title, type, rating, notes, platform, date } = data
|
||||||
|
|
||||||
const result = await db.prepare(`
|
const result = db.prepare(`
|
||||||
INSERT INTO media (title, type, rating, notes, platform, date, created_at, updated_at)
|
INSERT INTO media (title, type, rating, notes, platform, date, created_at, updated_at)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))
|
VALUES (?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))
|
||||||
`).run(title, type, rating, notes, platform, date)
|
`).run(title, type, rating, notes, platform, date)
|
||||||
|
|
||||||
const newMedia = await db.prepare('SELECT * FROM media WHERE id = ?').get(result.lastInsertRowid)
|
const newMedia = db.prepare('SELECT * FROM media WHERE id = ?').get(result.lastInsertRowid)
|
||||||
|
|
||||||
return c.json({
|
return c.json({
|
||||||
code: 0,
|
code: 0,
|
||||||
@@ -48,13 +48,13 @@ media.put('/updateById/:id', async (c) => {
|
|||||||
const data = await c.req.json()
|
const data = await c.req.json()
|
||||||
const { title, type, rating, notes, platform, date } = data
|
const { title, type, rating, notes, platform, date } = data
|
||||||
|
|
||||||
await db.prepare(`
|
db.prepare(`
|
||||||
UPDATE media
|
UPDATE media
|
||||||
SET title = ?, type = ?, rating = ?, notes = ?, platform = ?, date = ?, updated_at = datetime('now')
|
SET title = ?, type = ?, rating = ?, notes = ?, platform = ?, date = ?, updated_at = datetime('now')
|
||||||
WHERE id = ?
|
WHERE id = ?
|
||||||
`).run(title, type, rating, notes, platform, date, id)
|
`).run(title, type, rating, notes, platform, date, id)
|
||||||
|
|
||||||
const updatedMedia = await db.prepare('SELECT * FROM media WHERE id = ?').get(id)
|
const updatedMedia = db.prepare('SELECT * FROM media WHERE id = ?').get(id)
|
||||||
|
|
||||||
if (!updatedMedia) {
|
if (!updatedMedia) {
|
||||||
return c.json({ code: 1, data: {}, message: 'Media not found' }, 404)
|
return c.json({ code: 1, data: {}, message: 'Media not found' }, 404)
|
||||||
@@ -74,7 +74,7 @@ media.put('/updateById/:id', async (c) => {
|
|||||||
media.delete('/deleteById/:id', async (c) => {
|
media.delete('/deleteById/:id', async (c) => {
|
||||||
try {
|
try {
|
||||||
const id = c.req.param('id')
|
const id = c.req.param('id')
|
||||||
await db.prepare('DELETE FROM media WHERE id = ?').run(id)
|
db.prepare('DELETE FROM media WHERE id = ?').run(id)
|
||||||
return c.json({ code: 0, data: {}, message: 'Deleted successfully' })
|
return c.json({ code: 0, data: {}, message: 'Deleted successfully' })
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
return c.json({ code: 2, data: {}, message: error.message }, 500)
|
return c.json({ code: 2, data: {}, message: error.message }, 500)
|
||||||
@@ -126,12 +126,15 @@ media.get('/page', async (c) => {
|
|||||||
params.push(pageSize.toString(), offset.toString())
|
params.push(pageSize.toString(), offset.toString())
|
||||||
|
|
||||||
// 获取总数
|
// 获取总数
|
||||||
const countQuery = query.replace('SELECT *', 'SELECT COUNT(*) as total')
|
const countQuery = query
|
||||||
const totalResult = await db.prepare(countQuery).get(...params.slice(0, -2))
|
.replace('SELECT *', 'SELECT COUNT(*) as total')
|
||||||
|
.replace(/ORDER BY.*$/, '') // 移除 ORDER BY 子句
|
||||||
|
.replace(/LIMIT.*$/, '') // 移除 LIMIT 和 OFFSET 子句
|
||||||
|
const totalResult = db.prepare(countQuery).get(...params.slice(0, -2))
|
||||||
const total = totalResult?.total || 0
|
const total = totalResult?.total || 0
|
||||||
|
|
||||||
// 获取分页数据
|
// 获取分页数据
|
||||||
const mediaList = await db.prepare(query).all(...params)
|
const mediaList = db.prepare(query).all(...params)
|
||||||
|
|
||||||
return c.json({
|
return c.json({
|
||||||
code: 0,
|
code: 0,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* @Date: 2025-06-11 17:57:58
|
* @Date: 2025-06-11 17:57:58
|
||||||
* @LastEditors: 陈子健
|
* @LastEditors: 陈子健
|
||||||
* @LastEditTime: 2025-06-13 13:50:14
|
* @LastEditTime: 2025-06-13 14:23:37
|
||||||
* @FilePath: /my-score/honoback/routes/user.ts
|
* @FilePath: /my-score/honoback/routes/user.ts
|
||||||
*/
|
*/
|
||||||
import { Hono } from 'hono'
|
import { Hono } from 'hono'
|
||||||
@@ -19,7 +19,7 @@ user.post('/login', async (c) => {
|
|||||||
const { username, password } = await c.req.json()
|
const { username, password } = await c.req.json()
|
||||||
|
|
||||||
// 从数据库验证用户
|
// 从数据库验证用户
|
||||||
const user = await db.prepare('SELECT * FROM users WHERE username = ? AND password = ?')
|
const user = db.prepare('SELECT * FROM users WHERE username = ? AND password = ?')
|
||||||
.get(username, password)
|
.get(username, password)
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
|
|||||||
Reference in New Issue
Block a user