Skip to content

Update or Delete

A single endpoint that handles create, update, and delete based on the input fields.

Lexicon type: procedure

local db = require("happyview.db")
local record = require("happyview.record")
function handle(input, ctx)
if input.delete and input.uri then
record.delete(input.uri)
return { success = true }
end
if input.uri then
-- Update existing
local existing = db.get(input.uri)
if not existing then error("not found") end
local body = existing.record
body.status = input.status
return record.put(input.uri, body)
end
-- Create new
return record.create(ctx.collection, input)
end
  1. If input.delete is truthy and input.uri is provided, delete the record with record.delete, which removes it from the caller’s PDS and the local index.
  2. If only input.uri is provided, load the stored body with db.get, change its fields, and write it back with record.put, which calls putRecord.
  3. If neither condition matches, create a new record from the input with record.create.

Create:

const response = await fetch("http://127.0.0.1:3000/xrpc/xyz.statusphere.setRecord", {
method: "POST",
headers: {
"X-Client-Key": CLIENT_KEY,
Authorization: `Bearer ${TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ status: "hello" }),
});
const data = await response.json();

Update:

const response = await fetch("http://127.0.0.1:3000/xrpc/xyz.statusphere.setRecord", {
method: "POST",
headers: {
"X-Client-Key": CLIENT_KEY,
Authorization: `Bearer ${TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
uri: "at://did:plc:abc/xyz.statusphere.record/abc123",
status: "updated",
}),
});
const data = await response.json();

Delete:

const response = await fetch("http://127.0.0.1:3000/xrpc/xyz.statusphere.setRecord", {
method: "POST",
headers: {
"X-Client-Key": CLIENT_KEY,
Authorization: `Bearer ${TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
uri: "at://did:plc:abc/xyz.statusphere.record/abc123",
delete: true,
}),
});
const data = await response.json();

This pattern reduces the number of endpoints your app needs by multiplexing create, update, and delete through a single procedure. The presence of uri and delete fields in the input determines the action.