Tài liệu

Ví dụ script

Ví dụ script Các ví dụ nhỏ cho handler, hook, flow và script sự kiện websocket. Đọc repository Tìm các dòng const posts = await #post.find({ fields: "id,title", limit: 10 }) Tìm một dòng const result = await #post.find({ filter: { id: { _eq: @PARAMS.id } }, fields: "id,title", li

Ví dụ script

Các ví dụ nhỏ cho handler, hook, flow và script sự kiện websocket.

Đọc repository

Tìm các dòng

const posts = await #post.find({
  fields: "id,title",
  limit: 10
})

Tìm một dòng

const result = await #post.find({
  filter: { id: { _eq: @PARAMS.id } },
  fields: "id,title",
  limit: 1
})

return result.data[0] || null

Đếm dòng

const result = await #post.find({
  fields: "id",
  limit: 1,
  meta: "totalCount"
})

return result.meta.totalCount

Ghi repository

Tạo dòng

const created = await #post.create({
  data: {
    title: @BODY.title,
    status: "draft"
  }
})

return created.data[0]

Cập nhật dòng

const updated = await #post.update({
  id: @PARAMS.id,
  data: {
    title: @BODY.title
  }
})

return updated.data[0]

Xóa dòng

await #post.delete({
  id: @PARAMS.id
})

return { deleted: true }

Lỗi

Trường body bắt buộc

if ([email protected]) {
  @THROW400("Title is required")
}

Thao tác bị cấm

if (!@USER) {
  @THROW403("Login required")
}

Không tìm thấy

const row = await #post.find({
  filter: { id: { _eq: @PARAMS.id } },
  fields: "id",
  limit: 1
})

if (!row.data[0]) {
  @THROW404("post", @PARAMS.id)
}

Hook

Pre-hook giới hạn theo chủ sở hữu

@QUERY.filter = {
  _and: [
    @QUERY.filter || {},
    { owner: { id: { _eq: @USER.id } } }
  ]
}

Pre-hook đặt chủ sở hữu khi tạo

@BODY.owner = { id: @USER.id }

Pre-hook loại bỏ trường phía server

delete @BODY.isAdmin

Post-hook định hình response

return {
  id: @DATA.id,
  title: @DATA.title
}

Flow

Kích hoạt flow từ handler

await @TRIGGER("send-welcome-email", {
  userId: @USER.id
})

return { queued: true }

Bước flow đọc payload

const userId = @FLOW_PAYLOAD.userId

return { userId }

Bước flow dùng bước trước đó

const user = @FLOW.load_user

return {
  email: user.email
}

WebSocket

Trả lời client hiện tại

@SOCKET.reply("pong", {
  at: new Date().toISOString()
})

Tham gia room

@SOCKET.join(`project:${@BODY.projectId}`)

Emit tới room hiện tại

@SOCKET.emitToCurrentRoom(`project:${@BODY.projectId}`, "project:changed", {
  projectId: @BODY.projectId
})

Emit tới người dùng

@SOCKET.emitToUser(@USER.id, "notification", {
  title: "Done"
})

Cache

Đặt cache

await @CACHE.set("report:latest", { count: 12 }, 60000)

Lấy cache

const cached = await @CACHE.get("report:latest")
if (cached) return cached