util.db.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import low from 'lowdb'
  2. import LocalStorage from 'lowdb/adapters/LocalStorage'
  3. import { getUuid } from '@/utils/auth'
  4. import { cloneDeep } from 'lodash'
  5. import setting from '@/setting.js'
  6. const adapter = new LocalStorage(setting.globalKey)
  7. const db = low(adapter)
  8. db.defaults({
  9. sys: {
  10. public: {},
  11. user: {
  12. 'ghost-uuid': {}
  13. }
  14. },
  15. database: {}
  16. }).write()
  17. export default db
  18. /**
  19. * @description 检查路径是否存在 不存在的话初始化
  20. * @param {Object} payload dbName {String} 数据库名称
  21. * @param {Object} payload path {String} 路径
  22. * @param {Object} payload user {Boolean} 区分用户
  23. * @param {Object} payload validator {Function} 数据校验钩子 返回 true 表示验证通过
  24. * @param {Object} payload defaultValue {*} 初始化默认值
  25. * @returns {String} 可以直接使用的路径
  26. */
  27. export function pathInit({
  28. dbName = 'database',
  29. path = '',
  30. user = true,
  31. validator = () => true,
  32. defaultValue = ''
  33. }) {
  34. let uuid = getUuid()
  35. uuid =
  36. uuid === undefined || uuid === null || uuid === ''
  37. ? 'ghost-uuid'
  38. : uuid + ''
  39. const currentPath = `${dbName}.${user ? `user.${uuid}` : 'public'}${path ? `.${path}` : ''}`
  40. const value = db.get(currentPath).value()
  41. if (!(value !== undefined && validator(value))) {
  42. db.set(currentPath, defaultValue).write()
  43. }
  44. return currentPath
  45. }
  46. /**
  47. * @description 将数据存储到指定位置 | 路径不存在会自动初始化
  48. * @description 效果类似于取值 dbName.path = value
  49. * @param {Object} payload dbName {String} 数据库名称
  50. * @param {Object} payload path {String} 存储路径
  51. * @param {Object} payload value {*} 需要存储的值
  52. * @param {Object} payload user {Boolean} 是否区分用户
  53. */
  54. export function dbSet({
  55. dbName = 'database',
  56. path = '',
  57. value = '',
  58. user = false
  59. }) {
  60. db.set(
  61. pathInit({
  62. dbName,
  63. path,
  64. user
  65. }),
  66. value
  67. ).write()
  68. }
  69. /**
  70. * @description 获取数据
  71. * @description 效果类似于取值 dbName.path || defaultValue
  72. * @param {Object} payload dbName {String} 数据库名称
  73. * @param {Object} payload path {String} 存储路径
  74. * @param {Object} payload defaultValue {*} 取值失败的默认值
  75. * @param {Object} payload user {Boolean} 是否区分用户
  76. */
  77. export function dbGet({
  78. dbName = 'database',
  79. path = '',
  80. defaultValue = '',
  81. user = false
  82. }) {
  83. return cloneDeep(
  84. db
  85. .get(
  86. pathInit({
  87. dbName,
  88. path,
  89. user,
  90. defaultValue
  91. })
  92. )
  93. .value()
  94. )
  95. }
  96. /**
  97. * @description 获取存储数据库对象
  98. * @param {Object} payload user {Boolean} 是否区分用户
  99. */
  100. export function database({
  101. dbName = 'database',
  102. path = '',
  103. user = false,
  104. validator = () => true,
  105. defaultValue = ''
  106. } = {}) {
  107. return db.get(
  108. pathInit({
  109. dbName,
  110. path,
  111. user,
  112. validator,
  113. defaultValue
  114. })
  115. )
  116. }