Skip to content
You are reading the HappyView v2 docs, which are no longer updated. Read the v3 docs.

Update or Delete

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

Lexicon type: procedure

function handle()
if input.delete and input.uri then
local r = Record.load(input.uri)
if r then r:delete() end
return { success = true }
end
if input.uri then
-- Update existing
local r = Record.load(input.uri)
if not r then error("not found") end
r.status = input.status
r:save()
return { uri = r._uri, cid = r._cid }
end
-- Create new
local r = Record(collection, input)
r:save()
return { uri = r._uri, cid = r._cid }
end
  1. If input.delete is truthy and input.uri is provided, load the record with Record.load and delete it.
  2. If only input.uri is provided, load the existing record with Record.load, update its fields, and save it back. Since _uri is already set, r:save() calls putRecord instead of createRecord.
  3. If neither condition matches, create a new record from the input.

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.