routes_date_notes.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import { Hono } from 'hono'
  2. import type { Variables, WithAuth } from "./middlewares.ts";
  3. export function createDateNotesRoutes(withAuth: WithAuth) {
  4. const dateNotesRoutes = new Hono<{ Variables: Variables }>()
  5. // 创建日期笔记
  6. dateNotesRoutes.post('/', withAuth, async (c) => {
  7. try {
  8. const apiClient = c.get('apiClient')
  9. const { date, title, content } = await c.req.json()
  10. if (!date || !title || !content) {
  11. return c.json({ error: '缺少必要参数' }, 400)
  12. }
  13. const user = c.get('user')
  14. if (!user) return c.json({ error: '未授权访问' }, 401)
  15. const [noteId] = await apiClient.database.table('date_notes').insert({
  16. date,
  17. title,
  18. content,
  19. user_id: user.id,
  20. created_at: apiClient.database.fn.now(),
  21. updated_at: apiClient.database.fn.now()
  22. })
  23. return c.json({
  24. message: '日期笔记创建成功',
  25. data: { id: noteId }
  26. }, 201)
  27. } catch (error) {
  28. console.error('创建日期笔记失败:', error)
  29. return c.json({ error: '创建日期笔记失败' }, 500)
  30. }
  31. })
  32. // 获取日期笔记列表(支持日期范围查询)
  33. dateNotesRoutes.get('/', withAuth, async (c) => {
  34. try {
  35. const apiClient = c.get('apiClient')
  36. const page = Number(c.req.query('page')) || 1
  37. const pageSize = Number(c.req.query('pageSize')) || 20
  38. const startDate = c.req.query('startDate')
  39. const endDate = c.req.query('endDate')
  40. const user = c.get('user')
  41. if (!user) return c.json({ error: '未授权访问' }, 401)
  42. const query = apiClient.database.table('date_notes')
  43. .where('user_id', user.id)
  44. .orderBy('date', 'desc')
  45. .limit(pageSize)
  46. .offset((page - 1) * pageSize)
  47. // 日期范围查询
  48. if (startDate) query.where('date', '>=', startDate)
  49. if (endDate) query.where('date', '<=', endDate)
  50. const countQuery = query.clone()
  51. const notes = await query
  52. // 获取总数用于分页
  53. const total = await countQuery.count()
  54. const totalCount = Number(total)
  55. const totalPages = Math.ceil(totalCount / pageSize)
  56. return c.json({
  57. data: notes,
  58. pagination: {
  59. total: totalCount,
  60. current: page,
  61. pageSize,
  62. totalPages
  63. }
  64. })
  65. } catch (error) {
  66. console.error('获取日期笔记列表失败:', error)
  67. return c.json({ error: '获取日期笔记列表失败' }, 500)
  68. }
  69. })
  70. // 获取单个日期笔记详情
  71. dateNotesRoutes.get('/:id', withAuth, async (c) => {
  72. try {
  73. const apiClient = c.get('apiClient')
  74. const noteId = c.req.param('id')
  75. const user = c.get('user')
  76. if (!user) return c.json({ error: '未授权访问' }, 401)
  77. const note = await apiClient.database.table('date_notes')
  78. .where('id', noteId)
  79. .where('user_id', user.id)
  80. .first()
  81. if (!note) {
  82. return c.json({ error: '日期笔记不存在或无权访问' }, 404)
  83. }
  84. return c.json({
  85. message: '获取日期笔记成功',
  86. data: note
  87. })
  88. } catch (error) {
  89. console.error('获取日期笔记详情失败:', error)
  90. return c.json({ error: '获取日期笔记详情失败' }, 500)
  91. }
  92. })
  93. // 更新日期笔记
  94. dateNotesRoutes.put('/:id', withAuth, async (c) => {
  95. try {
  96. const apiClient = c.get('apiClient')
  97. const { date, title, content } = await c.req.json()
  98. if (!date || !title || !content) {
  99. return c.json({ error: '缺少必要参数' }, 400)
  100. }
  101. const user = c.get('user')
  102. if (!user) return c.json({ error: '未授权访问' }, 401)
  103. const noteId = c.req.param('id')
  104. await apiClient.database.table('date_notes')
  105. .where('id', noteId)
  106. .where('user_id', user.id)
  107. .update({
  108. date,
  109. title,
  110. content,
  111. updated_at: apiClient.database.fn.now()
  112. })
  113. return c.json({ message: '日期笔记更新成功' })
  114. } catch (error) {
  115. console.error('更新日期笔记失败:', error)
  116. return c.json({ error: '更新日期笔记失败' }, 500)
  117. }
  118. })
  119. // 删除日期笔记
  120. dateNotesRoutes.delete('/:id', withAuth, async (c) => {
  121. try {
  122. const apiClient = c.get('apiClient')
  123. const user = c.get('user')
  124. if (!user) return c.json({ error: '未授权访问' }, 401)
  125. const noteId = c.req.param('id')
  126. await apiClient.database.table('date_notes')
  127. .where('id', noteId)
  128. .where('user_id', user.id)
  129. .delete()
  130. return c.json({ message: '日期笔记已删除' })
  131. } catch (error) {
  132. console.error('删除日期笔记失败:', error)
  133. return c.json({ error: '删除日期笔记失败' }, 500)
  134. }
  135. })
  136. return dateNotesRoutes
  137. }