Tài liệu

Ứng dụng công việc

Ứng dụng công việc Ví dụ này xây dựng một ứng dụng công việc nhỏ, trong đó mỗi người dùng chỉ nhìn thấy công việc của chính họ. Table Tạo todo_task . Field hoặc relation Kiểu Ghi chú title string Bắt buộc description text Không bắt buộc status select open , done , archived dueAt

Ứng dụng công việc

Ví dụ này xây dựng một ứng dụng công việc nhỏ, trong đó mỗi người dùng chỉ nhìn thấy công việc của chính họ.

Table

Tạo todo_task.

Field hoặc relation Kiểu Ghi chú
title string Bắt buộc
description text Không bắt buộc
status select open, done, archived
dueAt datetime Không bắt buộc
owner relation many-to-one tới enfyra_user Không cần inverse relation

Thêm index cho owner,status,dueAt để tối ưu các filter danh sách thường dùng.

Tạo công việc cho người dùng hiện tại

Thêm pre-hook cho POST /todo_task để client không thể gán công việc cho người dùng khác.

if (!@USER?.id) {
  @THROW401();
}

@BODY.owner = { id: @USER.id };
if ([email protected]) {
  @BODY.status = 'open';
}

Giới hạn dữ liệu đọc

Thêm pre-hook cho GET /todo_task.

if (@USER?.isRootAdmin) {
  return;
}

if (!@USER?.id) {
  @THROW401();
}

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

Liệt kê công việc

curl "$ENFYRA_API_URL/todo_task?fields=id,title,status,dueAt&sort=dueAt,-createdAt&filter={\"status\":{\"_neq\":\"archived\"}}" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Tạo công việc

curl "$ENFYRA_API_URL/todo_task" \
  -X POST \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"Ship the invite flow","dueAt":"2026-07-01T09:00:00.000Z"}'

Hoàn thành công việc

curl "$ENFYRA_API_URL/todo_task/42" \
  -X PATCH \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"done"}'

Xóa công việc

curl "$ENFYRA_API_URL/todo_task/42" \
  -X DELETE \
  -H "Authorization: Bearer $ACCESS_TOKEN"