commit c60fde3321312f668d3488cece8f3f9a499f38cb Author: ethan.chen Date: Fri Jun 13 13:56:26 2025 +0800 init: 初始化 diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..c4eb3fe --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "denoland.vscode-deno" + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a2bb77c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "deno.enablePaths": [ + "./" + ], + "editor.inlayHints.enabled": "off" +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d29ae32 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +``` +deno task start +``` diff --git a/db/index.ts b/db/index.ts new file mode 100644 index 0000000..dc4314c --- /dev/null +++ b/db/index.ts @@ -0,0 +1,21 @@ +/* + * @Date: 2025-06-12 16:48:44 + * @LastEditors: 陈子健 + * @LastEditTime: 2025-06-12 17:31:37 + * @FilePath: /my-score/honoback/db/index.ts + */ +import { DatabaseSync } from "node:sqlite" +import { join, dirname } from 'node:path' +import { fileURLToPath } from 'node:url' +import { readFileSync } from 'node:fs' + +const __dirname = dirname(fileURLToPath(import.meta.url)) + +// 初始化数据库连接 +const db = new DatabaseSync(join(__dirname, 'media.db')) + +// 执行schema.sql中的SQL语句 +const schema = readFileSync(join(__dirname, 'schema.sql'), 'utf-8') +db.exec(schema) + +export { db } \ No newline at end of file diff --git a/db/media.db b/db/media.db new file mode 100644 index 0000000..c83228f Binary files /dev/null and b/db/media.db differ diff --git a/deno.json b/deno.json new file mode 100644 index 0000000..f83753c --- /dev/null +++ b/deno.json @@ -0,0 +1,12 @@ +{ + "imports": { + "hono": "jsr:@hono/hono@^4.7.11" + }, + "tasks": { + "start": "deno run --allow-net --allow-read --allow-write --watch main.ts" + }, + "compilerOptions": { + "jsx": "precompile", + "jsxImportSource": "hono/jsx" + } +} \ No newline at end of file diff --git a/deno.lock b/deno.lock new file mode 100644 index 0000000..72a9f4a --- /dev/null +++ b/deno.lock @@ -0,0 +1,121 @@ +{ + "version": "5", + "specifiers": { + "jsr:@hono/hono@^4.7.11": "4.7.11", + "npm:@types/node@*": "22.15.15" + }, + "jsr": { + "@hono/hono@4.7.11": { + "integrity": "52b9395e4f2448fbaf82a6bd7925d15e59f4055037e74d6c2f657f3618b11193" + } + }, + "npm": { + "@types/node@22.15.15": { + "integrity": "sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==", + "dependencies": [ + "undici-types" + ] + }, + "undici-types@6.21.0": { + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + } + }, + "redirects": { + "https://deno.land/std/path/mod.ts": "https://deno.land/std@0.224.0/path/mod.ts" + }, + "remote": { + "https://deno.land/std@0.224.0/assert/assert.ts": "09d30564c09de846855b7b071e62b5974b001bb72a4b797958fe0660e7849834", + "https://deno.land/std@0.224.0/assert/assertion_error.ts": "ba8752bd27ebc51f723702fac2f54d3e94447598f54264a6653d6413738a8917", + "https://deno.land/std@0.224.0/path/_common/assert_path.ts": "dbdd757a465b690b2cc72fc5fb7698c51507dec6bfafce4ca500c46b76ff7bd8", + "https://deno.land/std@0.224.0/path/_common/basename.ts": "569744855bc8445f3a56087fd2aed56bdad39da971a8d92b138c9913aecc5fa2", + "https://deno.land/std@0.224.0/path/_common/common.ts": "ef73c2860694775fe8ffcbcdd387f9f97c7a656febf0daa8c73b56f4d8a7bd4c", + "https://deno.land/std@0.224.0/path/_common/constants.ts": "dc5f8057159f4b48cd304eb3027e42f1148cf4df1fb4240774d3492b5d12ac0c", + "https://deno.land/std@0.224.0/path/_common/dirname.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", + "https://deno.land/std@0.224.0/path/_common/format.ts": "92500e91ea5de21c97f5fe91e178bae62af524b72d5fcd246d6d60ae4bcada8b", + "https://deno.land/std@0.224.0/path/_common/from_file_url.ts": "d672bdeebc11bf80e99bf266f886c70963107bdd31134c4e249eef51133ceccf", + "https://deno.land/std@0.224.0/path/_common/glob_to_reg_exp.ts": "6cac16d5c2dc23af7d66348a7ce430e5de4e70b0eede074bdbcf4903f4374d8d", + "https://deno.land/std@0.224.0/path/_common/normalize.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", + "https://deno.land/std@0.224.0/path/_common/normalize_string.ts": "33edef773c2a8e242761f731adeb2bd6d683e9c69e4e3d0092985bede74f4ac3", + "https://deno.land/std@0.224.0/path/_common/relative.ts": "faa2753d9b32320ed4ada0733261e3357c186e5705678d9dd08b97527deae607", + "https://deno.land/std@0.224.0/path/_common/strip_trailing_separators.ts": "7024a93447efcdcfeaa9339a98fa63ef9d53de363f1fbe9858970f1bba02655a", + "https://deno.land/std@0.224.0/path/_common/to_file_url.ts": "7f76adbc83ece1bba173e6e98a27c647712cab773d3f8cbe0398b74afc817883", + "https://deno.land/std@0.224.0/path/_interface.ts": "8dfeb930ca4a772c458a8c7bbe1e33216fe91c253411338ad80c5b6fa93ddba0", + "https://deno.land/std@0.224.0/path/_os.ts": "8fb9b90fb6b753bd8c77cfd8a33c2ff6c5f5bc185f50de8ca4ac6a05710b2c15", + "https://deno.land/std@0.224.0/path/basename.ts": "7ee495c2d1ee516ffff48fb9a93267ba928b5a3486b550be73071bc14f8cc63e", + "https://deno.land/std@0.224.0/path/common.ts": "03e52e22882402c986fe97ca3b5bb4263c2aa811c515ce84584b23bac4cc2643", + "https://deno.land/std@0.224.0/path/constants.ts": "0c206169ca104938ede9da48ac952de288f23343304a1c3cb6ec7625e7325f36", + "https://deno.land/std@0.224.0/path/dirname.ts": "85bd955bf31d62c9aafdd7ff561c4b5fb587d11a9a5a45e2b01aedffa4238a7c", + "https://deno.land/std@0.224.0/path/extname.ts": "593303db8ae8c865cbd9ceec6e55d4b9ac5410c1e276bfd3131916591b954441", + "https://deno.land/std@0.224.0/path/format.ts": "6ce1779b0980296cf2bc20d66436b12792102b831fd281ab9eb08fa8a3e6f6ac", + "https://deno.land/std@0.224.0/path/from_file_url.ts": "911833ae4fd10a1c84f6271f36151ab785955849117dc48c6e43b929504ee069", + "https://deno.land/std@0.224.0/path/glob_to_regexp.ts": "7f30f0a21439cadfdae1be1bf370880b415e676097fda584a63ce319053b5972", + "https://deno.land/std@0.224.0/path/is_absolute.ts": "4791afc8bfd0c87f0526eaa616b0d16e7b3ab6a65b62942e50eac68de4ef67d7", + "https://deno.land/std@0.224.0/path/is_glob.ts": "a65f6195d3058c3050ab905705891b412ff942a292bcbaa1a807a74439a14141", + "https://deno.land/std@0.224.0/path/join.ts": "ae2ec5ca44c7e84a235fd532e4a0116bfb1f2368b394db1c4fb75e3c0f26a33a", + "https://deno.land/std@0.224.0/path/join_globs.ts": "5b3bf248b93247194f94fa6947b612ab9d3abd571ca8386cf7789038545e54a0", + "https://deno.land/std@0.224.0/path/mod.ts": "f6bd79cb08be0e604201bc9de41ac9248582699d1b2ee0ab6bc9190d472cf9cd", + "https://deno.land/std@0.224.0/path/normalize.ts": "4155743ccceeed319b350c1e62e931600272fad8ad00c417b91df093867a8352", + "https://deno.land/std@0.224.0/path/normalize_glob.ts": "cc89a77a7d3b1d01053b9dcd59462b75482b11e9068ae6c754b5cf5d794b374f", + "https://deno.land/std@0.224.0/path/parse.ts": "77ad91dcb235a66c6f504df83087ce2a5471e67d79c402014f6e847389108d5a", + "https://deno.land/std@0.224.0/path/posix/_util.ts": "1e3937da30f080bfc99fe45d7ed23c47dd8585c5e473b2d771380d3a6937cf9d", + "https://deno.land/std@0.224.0/path/posix/basename.ts": "d2fa5fbbb1c5a3ab8b9326458a8d4ceac77580961b3739cd5bfd1d3541a3e5f0", + "https://deno.land/std@0.224.0/path/posix/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", + "https://deno.land/std@0.224.0/path/posix/constants.ts": "93481efb98cdffa4c719c22a0182b994e5a6aed3047e1962f6c2c75b7592bef1", + "https://deno.land/std@0.224.0/path/posix/dirname.ts": "76cd348ffe92345711409f88d4d8561d8645353ac215c8e9c80140069bf42f00", + "https://deno.land/std@0.224.0/path/posix/extname.ts": "e398c1d9d1908d3756a7ed94199fcd169e79466dd88feffd2f47ce0abf9d61d2", + "https://deno.land/std@0.224.0/path/posix/format.ts": "185e9ee2091a42dd39e2a3b8e4925370ee8407572cee1ae52838aed96310c5c1", + "https://deno.land/std@0.224.0/path/posix/from_file_url.ts": "951aee3a2c46fd0ed488899d024c6352b59154c70552e90885ed0c2ab699bc40", + "https://deno.land/std@0.224.0/path/posix/glob_to_regexp.ts": "76f012fcdb22c04b633f536c0b9644d100861bea36e9da56a94b9c589a742e8f", + "https://deno.land/std@0.224.0/path/posix/is_absolute.ts": "cebe561ad0ae294f0ce0365a1879dcfca8abd872821519b4fcc8d8967f888ede", + "https://deno.land/std@0.224.0/path/posix/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", + "https://deno.land/std@0.224.0/path/posix/join.ts": "7fc2cb3716aa1b863e990baf30b101d768db479e70b7313b4866a088db016f63", + "https://deno.land/std@0.224.0/path/posix/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", + "https://deno.land/std@0.224.0/path/posix/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", + "https://deno.land/std@0.224.0/path/posix/normalize.ts": "baeb49816a8299f90a0237d214cef46f00ba3e95c0d2ceb74205a6a584b58a91", + "https://deno.land/std@0.224.0/path/posix/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", + "https://deno.land/std@0.224.0/path/posix/parse.ts": "09dfad0cae530f93627202f28c1befa78ea6e751f92f478ca2cc3b56be2cbb6a", + "https://deno.land/std@0.224.0/path/posix/relative.ts": "3907d6eda41f0ff723d336125a1ad4349112cd4d48f693859980314d5b9da31c", + "https://deno.land/std@0.224.0/path/posix/resolve.ts": "08b699cfeee10cb6857ccab38fa4b2ec703b0ea33e8e69964f29d02a2d5257cf", + "https://deno.land/std@0.224.0/path/posix/to_file_url.ts": "7aa752ba66a35049e0e4a4be5a0a31ac6b645257d2e031142abb1854de250aaf", + "https://deno.land/std@0.224.0/path/posix/to_namespaced_path.ts": "28b216b3c76f892a4dca9734ff1cc0045d135532bfd9c435ae4858bfa5a2ebf0", + "https://deno.land/std@0.224.0/path/relative.ts": "ab739d727180ed8727e34ed71d976912461d98e2b76de3d3de834c1066667add", + "https://deno.land/std@0.224.0/path/resolve.ts": "a6f977bdb4272e79d8d0ed4333e3d71367cc3926acf15ac271f1d059c8494d8d", + "https://deno.land/std@0.224.0/path/to_file_url.ts": "88f049b769bce411e2d2db5bd9e6fd9a185a5fbd6b9f5ad8f52bef517c4ece1b", + "https://deno.land/std@0.224.0/path/to_namespaced_path.ts": "b706a4103b104cfadc09600a5f838c2ba94dbcdb642344557122dda444526e40", + "https://deno.land/std@0.224.0/path/windows/_util.ts": "d5f47363e5293fced22c984550d5e70e98e266cc3f31769e1710511803d04808", + "https://deno.land/std@0.224.0/path/windows/basename.ts": "6bbc57bac9df2cec43288c8c5334919418d784243a00bc10de67d392ab36d660", + "https://deno.land/std@0.224.0/path/windows/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", + "https://deno.land/std@0.224.0/path/windows/constants.ts": "5afaac0a1f67b68b0a380a4ef391bf59feb55856aa8c60dfc01bd3b6abb813f5", + "https://deno.land/std@0.224.0/path/windows/dirname.ts": "33e421be5a5558a1346a48e74c330b8e560be7424ed7684ea03c12c21b627bc9", + "https://deno.land/std@0.224.0/path/windows/extname.ts": "165a61b00d781257fda1e9606a48c78b06815385e7d703232548dbfc95346bef", + "https://deno.land/std@0.224.0/path/windows/format.ts": "bbb5ecf379305b472b1082cd2fdc010e44a0020030414974d6029be9ad52aeb6", + "https://deno.land/std@0.224.0/path/windows/from_file_url.ts": "ced2d587b6dff18f963f269d745c4a599cf82b0c4007356bd957cb4cb52efc01", + "https://deno.land/std@0.224.0/path/windows/glob_to_regexp.ts": "e45f1f89bf3fc36f94ab7b3b9d0026729829fabc486c77f414caebef3b7304f8", + "https://deno.land/std@0.224.0/path/windows/is_absolute.ts": "4a8f6853f8598cf91a835f41abed42112cebab09478b072e4beb00ec81f8ca8a", + "https://deno.land/std@0.224.0/path/windows/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", + "https://deno.land/std@0.224.0/path/windows/join.ts": "8d03530ab89195185103b7da9dfc6327af13eabdcd44c7c63e42e27808f50ecf", + "https://deno.land/std@0.224.0/path/windows/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", + "https://deno.land/std@0.224.0/path/windows/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", + "https://deno.land/std@0.224.0/path/windows/normalize.ts": "78126170ab917f0ca355a9af9e65ad6bfa5be14d574c5fb09bb1920f52577780", + "https://deno.land/std@0.224.0/path/windows/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", + "https://deno.land/std@0.224.0/path/windows/parse.ts": "08804327b0484d18ab4d6781742bf374976de662f8642e62a67e93346e759707", + "https://deno.land/std@0.224.0/path/windows/relative.ts": "3e1abc7977ee6cc0db2730d1f9cb38be87b0ce4806759d271a70e4997fc638d7", + "https://deno.land/std@0.224.0/path/windows/resolve.ts": "8dae1dadfed9d46ff46cc337c9525c0c7d959fb400a6308f34595c45bdca1972", + "https://deno.land/std@0.224.0/path/windows/to_file_url.ts": "40e560ee4854fe5a3d4d12976cef2f4e8914125c81b11f1108e127934ced502e", + "https://deno.land/std@0.224.0/path/windows/to_namespaced_path.ts": "4ffa4fb6fae321448d5fe810b3ca741d84df4d7897e61ee29be961a6aac89a4c", + "https://deno.land/x/sqlite@v3.8/build/sqlite.js": "72f63689fffcb9bb5ae10b1e8f7db09ea845cdf713e0e3a9693d8416a28f92a6", + "https://deno.land/x/sqlite@v3.8/build/vfs.js": "08533cc78fb29b9d9bd62f6bb93e5ef333407013fed185776808f11223ba0e70", + "https://deno.land/x/sqlite@v3.8/mod.ts": "e09fc79d8065fe222578114b109b1fd60077bff1bb75448532077f784f4d6a83", + "https://deno.land/x/sqlite@v3.8/src/constants.ts": "90f3be047ec0a89bcb5d6fc30db121685fc82cb00b1c476124ff47a4b0472aa9", + "https://deno.land/x/sqlite@v3.8/src/db.ts": "7d3251021756fa80f382c3952217c7446c5c8c1642b63511da0938fe33562663", + "https://deno.land/x/sqlite@v3.8/src/error.ts": "f7a15cb00d7c3797da1aefee3cf86d23e0ae92e73f0ba3165496c3816ab9503a", + "https://deno.land/x/sqlite@v3.8/src/function.ts": "e4c83b8ec64bf88bafad2407376b0c6a3b54e777593c70336fb40d43a79865f2", + "https://deno.land/x/sqlite@v3.8/src/query.ts": "d58abda928f6582d77bad685ecf551b1be8a15e8e38403e293ec38522e030cad", + "https://deno.land/x/sqlite@v3.8/src/wasm.ts": "e79d0baa6e42423257fb3c7cc98091c54399254867e0f34a09b5bdef37bd9487" + }, + "workspace": { + "dependencies": [ + "jsr:@hono/hono@^4.7.11" + ] + } +} diff --git a/main.ts b/main.ts new file mode 100644 index 0000000..07f9eae --- /dev/null +++ b/main.ts @@ -0,0 +1,40 @@ +/* + * @Date: 2025-06-02 19:52:12 + * @LastEditors: 陈子健 + * @LastEditTime: 2025-06-13 13:52:21 + * @FilePath: /my-score/honoback/main.ts + */ +import { Hono } from 'hono' +import { jwt } from 'hono/jwt' +import type { JwtVariables } from 'hono/jwt' +import user from './routes/user.ts' +import media from './routes/media.ts' + +const app = new Hono<{ Variables: JwtVariables }>() + +const AUTH_SECRET = 'it-is-a-secret' + +// 添加请求日志中间件 +app.use('*', async (c, next) => { + console.log(`${c.req.method} ${c.req.url}`) + await next() +}) + +// 注册用户路由 +app.route('/api/user', user) + +// 注册媒体路由 +app.route('/api/media', media) + +// 需要认证的路由 +app.use('/api/test/*', jwt({ + secret: AUTH_SECRET, +})) + +// 添加404处理 +app.notFound((c) => { + console.log('404 Not Found:', c.req.method, c.req.url) + return c.json({ code: 404, message: 'Not Found' }, 404) +}) + +Deno.serve(app.fetch) diff --git a/media.db b/media.db new file mode 100644 index 0000000..16a64c8 Binary files /dev/null and b/media.db differ diff --git a/routes/media.ts b/routes/media.ts new file mode 100644 index 0000000..d680d5b --- /dev/null +++ b/routes/media.ts @@ -0,0 +1,151 @@ +import { Hono } from 'hono' +import { db } from '../db/index.ts' +import type { JwtVariables } from 'hono/jwt' + +const media = new Hono<{ Variables: JwtVariables }>() + +// 获取所有媒体记录 +media.get('/list', async (c) => { + try { + const mediaList = await db.prepare('SELECT * FROM media').all() + return c.json({ + code: 0, + data: mediaList, + message: 'Success' + }) + } catch (error: any) { + return c.json({ code: 1, data: {}, message: error.message }, 500) + } +}) + +// 创建新的媒体记录 +media.post('/create', async (c) => { + try { + const data = await c.req.json() + const { title, type, rating, notes, platform, date } = data + + const result = await db.prepare(` + INSERT INTO media (title, type, rating, notes, platform, date, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, datetime('now'), datetime('now')) + `).run(title, type, rating, notes, platform, date) + + const newMedia = await db.prepare('SELECT * FROM media WHERE id = ?').get(result.lastInsertRowid) + + return c.json({ + code: 0, + data: newMedia, + message: 'Created successfully' + }, 201) + } catch (error: any) { + return c.json({ code: 2, data: {}, message: error.message }, 500) + } +}) + +// 更新媒体记录 +media.put('/updateById/:id', async (c) => { + try { + const id = c.req.param('id') + const data = await c.req.json() + const { title, type, rating, notes, platform, date } = data + + await db.prepare(` + UPDATE media + SET title = ?, type = ?, rating = ?, notes = ?, platform = ?, date = ?, updated_at = datetime('now') + WHERE id = ? + `).run(title, type, rating, notes, platform, date, id) + + const updatedMedia = await db.prepare('SELECT * FROM media WHERE id = ?').get(id) + + if (!updatedMedia) { + return c.json({ code: 1, data: {}, message: 'Media not found' }, 404) + } + + return c.json({ + code: 0, + data: updatedMedia, + message: 'Updated successfully' + }) + } catch (error: any) { + return c.json({ code: 2, data: {}, message: error.message }, 500) + } +}) + +// 删除媒体记录 +media.delete('/deleteById/:id', async (c) => { + try { + const id = c.req.param('id') + await db.prepare('DELETE FROM media WHERE id = ?').run(id) + return c.json({ code: 0, data: {}, message: 'Deleted successfully' }) + } catch (error: any) { + return c.json({ code: 2, data: {}, message: error.message }, 500) + } +}) + +// 分页查询媒体记录 +media.get('/page', async (c) => { + try { + const type = c.req.query('type') + const currentPage = parseInt(c.req.query('currentPage') || '1') + const pageSize = parseInt(c.req.query('pageSize') || '10') + const title = c.req.query('title') || '' + const startDate = c.req.query('startDate') + const endDate = c.req.query('endDate') + const sortBy = c.req.query('sortBy') || 'date' + const sortType = c.req.query('sortType') || 'desc' + + if (!type) { + return c.json({ code: 1, data: {}, message: 'Type is required' }, 400) + } + + let query = 'SELECT * FROM media WHERE type = ?' + const params = [type] + + if (title) { + query += ' AND title LIKE ?' + params.push(`%${title}%`) + } + if (startDate) { + query += ' AND date >= ?' + params.push(startDate) + } + if (endDate) { + query += ' AND date <= ?' + params.push(endDate) + } + + // 添加排序 + if (sortBy === 'date') { + query += ` ORDER BY date ${sortType.toUpperCase()}` + } else if (sortBy === 'score') { + query += ` ORDER BY rating ${sortType.toUpperCase()}` + } + + // 添加分页 + const offset = (currentPage - 1) * pageSize + query += ' LIMIT ? OFFSET ?' + params.push(pageSize.toString(), offset.toString()) + + // 获取总数 + const countQuery = query.replace('SELECT *', 'SELECT COUNT(*) as total') + const totalResult = await db.prepare(countQuery).get(...params.slice(0, -2)) + const total = totalResult?.total || 0 + + // 获取分页数据 + const mediaList = await db.prepare(query).all(...params) + + return c.json({ + code: 0, + data: { + list: mediaList, + total, + currentPage, + pageSize + }, + message: 'Success' + }) + } catch (error: any) { + return c.json({ code: 1, data: {}, message: error.message }, 500) + } +}) + +export default media diff --git a/routes/user.ts b/routes/user.ts new file mode 100644 index 0000000..0763c8f --- /dev/null +++ b/routes/user.ts @@ -0,0 +1,40 @@ +/* + * @Date: 2025-06-11 17:57:58 + * @LastEditors: 陈子健 + * @LastEditTime: 2025-06-13 13:50:14 + * @FilePath: /my-score/honoback/routes/user.ts + */ +import { Hono } from 'hono' +import { sign } from 'hono/jwt' +import type { JwtVariables } from 'hono/jwt' +import { db } from '../db/index.ts' + +const user = new Hono<{ Variables: JwtVariables }>() + +const AUTH_SECRET = 'it-is-a-secret' + +// 登录路由 +user.post('/login', async (c) => { + console.log(c.req.json(), 111) + const { username, password } = await c.req.json() + + // 从数据库验证用户 + const user = await db.prepare('SELECT * FROM users WHERE username = ? AND password = ?') + .get(username, password) + + if (user) { + const token = await sign({ username: user.username }, AUTH_SECRET) + return c.json({ + code: 200, + data: { token }, + message: '登录成功' + }) + } + + return c.json({ + code: 401, + message: '用户名或密码错误' + }, 401) +}) + +export default user