routes_classroom_data.ts 6.0 KB

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