Monorepo containing core modules of Zeichen.
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

75 行
1.8 KiB

  1. import ORM, { DatabaseKind } from '../utilities/ORM'
  2. export const collection = (Model, Service) => async (req, res) => {
  3. const orm = new ORM({
  4. kind: process.env.DATABASE_DIALECT as DatabaseKind,
  5. url: process.env.DATABASE_URL,
  6. })
  7. const repository = orm.getRepository(Model)
  8. const methodHandlers = {
  9. 'GET': Service.getMultiple(repository),
  10. }
  11. const { [req.method as keyof typeof methodHandlers]: handler = null } = methodHandlers
  12. if (handler === null) {
  13. res.statusCode = 415
  14. res.json({ message: 'Method not allowed.' })
  15. return
  16. }
  17. try {
  18. const { status, data, } = await handler(req.query)
  19. res.statusCode = status
  20. res.json(data)
  21. } catch (err) {
  22. console.error(err)
  23. const { status, data, } = err
  24. res.statusCode = status
  25. if (data && status !== 204) {
  26. res.json(data)
  27. return
  28. }
  29. res.end()
  30. }
  31. }
  32. export const item = (Model, Service) => async (req, res) => {
  33. const orm = new ORM({
  34. kind: process.env.DATABASE_DIALECT as DatabaseKind,
  35. url: process.env.DATABASE_URL,
  36. })
  37. const repository = orm.getRepository(Model)
  38. const methodHandlers = {
  39. 'GET': Service.getSingle(repository),
  40. 'PUT': Service.save(repository)(req.body),
  41. 'DELETE': Service.remove(repository)
  42. }
  43. const { [req.method as keyof typeof methodHandlers]: handler = null } = methodHandlers
  44. if (handler === null) {
  45. res.statusCode = 415
  46. res.json({ message: 'Method not allowed.' })
  47. return
  48. }
  49. const { id } = req.query
  50. try {
  51. const { status, data, } = await handler(id)
  52. res.statusCode = status
  53. if (data) {
  54. res.json(data)
  55. return
  56. }
  57. res.end()
  58. } catch (err) {
  59. console.error(err)
  60. const { status, data, } = err
  61. res.statusCode = status || 500
  62. if (data && status !== 204) {
  63. res.json(data)
  64. return
  65. }
  66. res.end()
  67. }
  68. }