feat: upsert is easier

This commit is contained in:
Julien Calixte
2026-02-09 00:17:38 +01:00
parent 7e956c3293
commit 6988450446
2 changed files with 18 additions and 28 deletions

View File

@@ -1,5 +1,5 @@
import { Jetstream } from "@skyware/jetstream"; import { Jetstream } from "@skyware/jetstream";
import { createNote, updateNote } from "./src/data/db" import { upsertNote } from "./src/data/db"
const jetstream = new Jetstream({ const jetstream = new Jetstream({
wantedCollections: ["space.litenote.note"], wantedCollections: ["space.litenote.note"],
@@ -9,7 +9,7 @@ jetstream.onCreate("space.litenote.note", (event) => {
console.log("create", event); console.log("create", event);
const {did, commit: {rkey, record}} = event const {did, commit: {rkey, record}} = event
createNote({ upsertNote({
did, did,
rkey, rkey,
...record ...record
@@ -20,7 +20,7 @@ jetstream.onUpdate("space.litenote.note", (event) => {
console.log("update", event); console.log("update", event);
const {did, commit: {rkey, record}} = event const {did, commit: {rkey, record}} = event
updateNote({ upsertNote({
did, did,
rkey, rkey,
...record ...record

View File

@@ -3,12 +3,23 @@ import type { Note } from "./note"
export const db = new DB("notes.db"); export const db = new DB("notes.db");
export const createNote = async (note: Note) => { export const upsertNote = async (note: Note) => {
return db.query( db.query(
` `
INSERT INTO note ( INSERT INTO note (
title, content, publishedAt, createdAt, did, rkey title,
) VALUES (?, ?, ?, ?, ?, ?) content,
publishedAt,
createdAt,
did,
rkey
)
VALUES (?, ?, ?, ?, ?, ?)
ON CONFLICT(did, rkey)
DO UPDATE SET
title = excluded.title,
content = excluded.content,
publishedAt = excluded.publishedAt
`, `,
[ [
note.title, note.title,
@@ -20,24 +31,3 @@ export const createNote = async (note: Note) => {
], ],
); );
} }
export const updateNote = async (note: Note) => {
db.query(
`
UPDATE note
SET
title = ?,
content = ?,
publishedAt = ?
WHERE did = ?
AND rkey = ?
`,
[
note.title,
note.content,
note.publishedAt, // publishedAt
note.did,
note.rkey,
],
);
}