Files
hereconnect/apps/frontend/src/api/qrCode.ts
T
ti 11bba7a275
Main daploy / deploy (push) Successful in 43s
move * to apps/frontend
2024-11-21 01:15:06 +02:00

59 lines
1.7 KiB
TypeScript

import type { QRCodeDocument } from '@/types/DBDocumentTypes'
import { qrCodeDbLocal, qrCodeDbRemote } from '@/api/dbs'
const EPOHE = 1731661630981
export const createQrCodeDocument = async (
qrCodeDocPartial: Pick<
QRCodeDocument,
| 'name'
| 'placement'
| 'actions'
//| 'user_uuid'
| 'predefinedMessages'
| 'messageDeliveryMethod'
>,
) => {
const uri = Math.abs(Date.now() - EPOHE).toString(36)
const qrCodeDoc: QRCodeDocument = {
_id: `qr_code:${uri}`,
type: 'qr_code',
uri,
url: `https://hereconnect.condev.ru/read/${uri}`,
created_at: new Date().toISOString(),
...qrCodeDocPartial,
}
const { rev } = await qrCodeDbLocal.put(qrCodeDoc)
qrCodeDoc._rev = rev
const replicateResult = await qrCodeDbRemote.replicate.from(qrCodeDbLocal, {
doc_ids: [qrCodeDoc._id],
})
// Проверяем результат репликации
if (!replicateResult.ok) {
throw new Error('Ошибка репликации: операция завершилась с ошибкой.')
}
if (replicateResult.doc_write_failures > 0) {
throw new Error(`Ошибка записи документов: ${replicateResult.doc_write_failures}`)
}
if (replicateResult.errors.length > 0) {
throw new Error(
`Ошибки репликации: ${replicateResult.errors.map((e: { message: string }) => e.message).join(', ')}`,
)
}
return qrCodeDoc
}
export const getQrCodeDocument = (uri: string) => {
return qrCodeDbLocal.get<QRCodeDocument>(`qr_code:${uri}`).catch((error) => {
if (error.name === 'not_found') {
return qrCodeDbRemote.get<QRCodeDocument>(`qr_code:${uri}`)
}
throw error
})
}