routes_classroom_data.ts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import { Hono } from 'hono'
  2. import type { Variables, WithAuth } from "./middlewares.ts";
  3. export function createClassroomDataRoutes(withAuth: WithAuth) {
  4. const classroomDataRoutes = new Hono<{ Variables: Variables }>()
  5. // 获取课堂数据列表
  6. classroomDataRoutes.get('/', withAuth, async (c) => {
  7. try {
  8. const apiClient = c.get('apiClient')
  9. const page = Number(c.req.query('page')) || 1
  10. const pageSize = Number(c.req.query('pageSize')) || 10
  11. const offset = (page - 1) * pageSize
  12. const search = c.req.query('search') || ''
  13. const classroomId = c.req.query('classroomId')
  14. let query = apiClient.database.table('classroom_data')
  15. .orderBy('id', 'desc')
  16. if (search) {
  17. query = query.where('classroom_no', 'like', `%${search}%`)
  18. }
  19. const total = await query.clone().count()
  20. const data = await query.select('*')
  21. .limit(pageSize).offset(offset)
  22. return c.json({
  23. data,
  24. pagination: {
  25. total: Number(total),
  26. current: page,
  27. pageSize
  28. }
  29. })
  30. } catch (error) {
  31. console.error('获取课堂数据列表失败:', error)
  32. return c.json({ error: '获取课堂数据列表失败' }, 500)
  33. }
  34. })
  35. // 获取单个课堂数据详情
  36. classroomDataRoutes.get('/:id', withAuth, async (c) => {
  37. try {
  38. const id = Number(c.req.param('id'))
  39. if (!id || isNaN(id)) {
  40. return c.json({ error: '无效的课堂数据ID' }, 400)
  41. }
  42. const apiClient = c.get('apiClient')
  43. const data = await apiClient.database.table('classroom_data')
  44. .where('id', id)
  45. .first()
  46. if (!data) {
  47. return c.json({ error: '课堂数据不存在' }, 404)
  48. }
  49. return c.json({
  50. data,
  51. message: '获取课堂数据详情成功'
  52. })
  53. } catch (error) {
  54. console.error('获取课堂数据详情失败:', error)
  55. return c.json({ error: '获取课堂数据详情失败' }, 500)
  56. }
  57. })
  58. // 创建课堂数据
  59. classroomDataRoutes.post('/', withAuth, async (c) => {
  60. try {
  61. const apiClient = c.get('apiClient')
  62. const body = await c.req.json()
  63. // 验证必填字段
  64. const { classroom_no, training_date, status } = body
  65. if (!classroom_no || !training_date || !status) {
  66. return c.json({ error: '教室号、训练日期和状态为必填项' }, 400)
  67. }
  68. // 创建课堂数据
  69. const [id] = await apiClient.database.table('classroom_data').insert({
  70. classroom_no,
  71. training_date,
  72. status,
  73. holding_stock: body.holding_stock || null,
  74. holding_cash: body.holding_cash || null,
  75. price: body.price || null,
  76. code: body.code || null,
  77. spare: body.spare || null,
  78. submit_user: body.submit_user || null,
  79. created_at: apiClient.database.fn.now(),
  80. updated_at: apiClient.database.fn.now()
  81. })
  82. const newData = await apiClient.database.table('classroom_data')
  83. .where('id', id)
  84. .first()
  85. return c.json({
  86. data: newData,
  87. message: '创建课堂数据成功'
  88. })
  89. } catch (error) {
  90. console.error('创建课堂数据失败:', error)
  91. return c.json({ error: '创建课堂数据失败' }, 500)
  92. }
  93. })
  94. // 更新课堂数据
  95. classroomDataRoutes.put('/:id', withAuth, async (c) => {
  96. try {
  97. const id = Number(c.req.param('id'))
  98. if (!id || isNaN(id)) {
  99. return c.json({ error: '无效的课堂数据ID' }, 400)
  100. }
  101. const apiClient = c.get('apiClient')
  102. const body = await c.req.json()
  103. // 验证必填字段
  104. const { classroom_no, training_date, status } = body
  105. if (!classroom_no || !training_date || !status) {
  106. return c.json({ error: '教室号、训练日期和状态为必填项' }, 400)
  107. }
  108. // 检查数据是否存在
  109. const existingData = await apiClient.database.table('classroom_data')
  110. .where('id', id)
  111. .first()
  112. if (!existingData) {
  113. return c.json({ error: '课堂数据不存在' }, 404)
  114. }
  115. // 更新数据
  116. await apiClient.database.table('classroom_data')
  117. .where('id', id)
  118. .update({
  119. classroom_no,
  120. training_date,
  121. status,
  122. holding_stock: body.holding_stock || null,
  123. holding_cash: body.holding_cash || null,
  124. price: body.price || null,
  125. code: body.code || null,
  126. spare: body.spare || null,
  127. submit_user: body.submit_user || null,
  128. updated_at: apiClient.database.fn.now()
  129. })
  130. const updatedData = await apiClient.database.table('classroom_data')
  131. .where('id', id)
  132. .first()
  133. return c.json({
  134. data: updatedData,
  135. message: '更新课堂数据成功'
  136. })
  137. } catch (error) {
  138. console.error('更新课堂数据失败:', error)
  139. return c.json({ error: '更新课堂数据失败' }, 500)
  140. }
  141. })
  142. // 删除课堂数据
  143. classroomDataRoutes.delete('/:id', withAuth, async (c) => {
  144. try {
  145. const id = Number(c.req.param('id'))
  146. if (!id || isNaN(id)) {
  147. return c.json({ error: '无效的课堂数据ID' }, 400)
  148. }
  149. const apiClient = c.get('apiClient')
  150. // 检查数据是否存在
  151. const existingData = await apiClient.database.table('classroom_data')
  152. .where('id', id)
  153. .first()
  154. if (!existingData) {
  155. return c.json({ error: '课堂数据不存在' }, 404)
  156. }
  157. // 删除数据
  158. await apiClient.database.table('classroom_data')
  159. .where('id', id)
  160. .delete()
  161. return c.json({
  162. message: '删除课堂数据成功',
  163. id
  164. })
  165. } catch (error) {
  166. console.error('删除课堂数据失败:', error)
  167. return c.json({ error: '删除课堂数据失败' }, 500)
  168. }
  169. })
  170. return classroomDataRoutes
  171. }