2
0

routes_classroom_data.ts 6.1 KB

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