You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.5 KiB

  1. const fs = require('fs')
  2. const express = require('express')
  3. const router = express.Router()
  4. let db = JSON.parse(fs.readFileSync('./api/db/labels.json', 'utf8'))
  5. // Get label list.
  6. router.get('/', (req, res) => {
  7. const q = req.query.q
  8. if (q) {
  9. res.json(db.filter(item => item.text.toLowerCase().includes(q.toLowerCase())))
  10. } else {
  11. res.json(db)
  12. }
  13. })
  14. // Create a label.
  15. router.post('/', (req, res) => {
  16. const label = {
  17. id: db.reduce((x, y) => { return x.id > y.id ? x : y }).id + 1,
  18. text: req.body.text,
  19. prefix_key: req.body.prefix_key,
  20. suffix_key: req.body.suffix_key,
  21. background_color: req.body.background_color,
  22. text_color: '#ffffff'
  23. }
  24. res.json(label)
  25. })
  26. // Get a label.
  27. router.get('/:labelId', (req, res) => {
  28. const label = db.find(item => item.id === parseInt(req.params.labelId))
  29. if (label) {
  30. res.json(label)
  31. } else {
  32. res.status(404).json({ detail: 'Not found.' })
  33. }
  34. })
  35. // Update a label.
  36. router.put('/:labelId', (req, res) => {
  37. const labelIndex = db.findIndex(item => item.id === parseInt(req.params.labelId))
  38. if (labelIndex !== -1) {
  39. db[labelIndex] = req.body
  40. res.json(db[labelIndex])
  41. } else {
  42. res.status(404).json({ detail: 'Not found.' })
  43. }
  44. })
  45. // Delete a label.
  46. router.delete('/:labelId', (req, res, next) => {
  47. const label = db.find(item => item.id === parseInt(req.params.labelId))
  48. if (label) {
  49. db = db.filter(item => item.id !== parseInt(req.params.labelId))
  50. res.json(label)
  51. } else {
  52. res.status(404).json({ detail: 'Not found.' })
  53. }
  54. })
  55. module.exports = router