模拟 GUID

一些应用程序使用 GUID(或 UUID)而不是自动递增的整数作为其模型的标识符。

Mirage 支持通过 IdentityManager 类覆盖其数据库如何为新记录分配 ID。你可以生成模型特定的管理器或应用程序范围的管理器来自定义数据库的行为。

自定义身份管理器必须实现以下方法

  • fetch,它必须返回一个尚未使用的标识符。
  • set,它在将记录插入 Mirage 数据库时被调用,传入该记录的 id
  • reset,它应该将数据库重置为初始状态。

以下是一个模拟 GUID 的身份管理器的示例实现

import uuidv4 from "uuid/v4"

export default class {
  constructor() {
    this.ids = new Set()
  }

  // Returns a new unused unique identifier.
  fetch() {
    let uuid = uuidv4()
    while (this.ids.has(uuid)) {
      uuid = uuidv4()
    }

    this.ids.add(uuid)

    return uuid
  }

  // Registers an identifier as used. Must throw if identifier is already used.
  set(id) {
    if (this.ids.has(id)) {
      throw new Error(`ID ${id} has already been used.`)
    }

    this.ids.add(id)
  }

  // Resets all used identifiers to unused.
  reset() {
    this.ids.clear()
  }
}