first commit
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import PocketBase from 'pocketbase'
|
||||
import { POCKETBASE_URL, PB_ADMIN_EMAIL, PB_ADMIN_PASSWORD } from './pocketbase-config.js'
|
||||
|
||||
const COLLECTION = 'instructions'
|
||||
|
||||
let pb = null
|
||||
let authPromise = null
|
||||
|
||||
function getClient() {
|
||||
if (!pb) {
|
||||
pb = new PocketBase(POCKETBASE_URL)
|
||||
// Main process may receive overlapping IPC calls (e.g. React Strict Mode).
|
||||
// Default auto-cancel would abort duplicate in-flight PocketBase requests.
|
||||
pb.autoCancellation(false)
|
||||
}
|
||||
return pb
|
||||
}
|
||||
|
||||
function parseEntry(r) {
|
||||
return {
|
||||
id: r.id,
|
||||
vaccine: r.vaccine ?? '',
|
||||
instruction: r.instruction ?? '',
|
||||
created: r.created,
|
||||
updated: r.updated,
|
||||
}
|
||||
}
|
||||
|
||||
export async function ensureAuth() {
|
||||
const client = getClient()
|
||||
if (client.authStore.isValid) return
|
||||
|
||||
if (authPromise) {
|
||||
await authPromise
|
||||
return
|
||||
}
|
||||
|
||||
// PocketBase v0.23+ removed /api/admins/*; superusers authenticate as a collection.
|
||||
authPromise = client
|
||||
.collection('_superusers')
|
||||
.authWithPassword(PB_ADMIN_EMAIL, PB_ADMIN_PASSWORD)
|
||||
try {
|
||||
await authPromise
|
||||
} catch (err) {
|
||||
authPromise = null
|
||||
throw err
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchEntries() {
|
||||
await ensureAuth()
|
||||
const list = await getClient().collection(COLLECTION).getFullList({ sort: '-created' })
|
||||
return list.map(parseEntry)
|
||||
}
|
||||
|
||||
export async function createEntry({ vaccine, instruction }) {
|
||||
await ensureAuth()
|
||||
const record = await getClient().collection(COLLECTION).create({
|
||||
vaccine: vaccine.trim(),
|
||||
instruction: instruction.trim(),
|
||||
})
|
||||
return parseEntry(record)
|
||||
}
|
||||
|
||||
export async function updateEntry(id, { instruction, vaccine, includeVaccine }) {
|
||||
await ensureAuth()
|
||||
const body = { instruction: instruction.trim() }
|
||||
if (includeVaccine && vaccine != null) {
|
||||
body.vaccine = vaccine.trim()
|
||||
}
|
||||
const record = await getClient().collection(COLLECTION).update(id, body)
|
||||
return parseEntry(record)
|
||||
}
|
||||
|
||||
export async function deleteEntry(id) {
|
||||
await ensureAuth()
|
||||
await getClient().collection(COLLECTION).delete(id)
|
||||
}
|
||||
Reference in New Issue
Block a user