add guest subscribe push notification
This commit is contained in:
@@ -5,6 +5,7 @@ import type {
|
||||
MessageDocument,
|
||||
WebPushSubscriptionDocument,
|
||||
PublicSettingsDocument,
|
||||
UserChatSettingsDocument,
|
||||
} from '@hereconnect/types'
|
||||
|
||||
export const qrCodeDbRemote = new PouchDB<QRCodeDocument>(`${import.meta.env.VITE_API_URL}/qr`, {
|
||||
@@ -15,12 +16,11 @@ export const qrCodeDbLocal = new PouchDB<QRCodeDocument>('qr')
|
||||
|
||||
export const messagesDbLocal = new PouchDB<MessageDocument>('messages')
|
||||
|
||||
export const webPushSubscriptionsDbRemote = new PouchDB<WebPushSubscriptionDocument>(
|
||||
`${import.meta.env.VITE_API_URL}/web_push_subscriptions`,
|
||||
{
|
||||
skip_setup: true,
|
||||
},
|
||||
)
|
||||
export const webPushSubscriptionsDbRemote = new PouchDB<
|
||||
WebPushSubscriptionDocument<PushSubscriptionJSON>
|
||||
>(`${import.meta.env.VITE_API_URL}/web_push_subscriptions`, {
|
||||
skip_setup: true,
|
||||
})
|
||||
|
||||
export const publicSettingsDbRemote = new PouchDB<PublicSettingsDocument>(
|
||||
`${import.meta.env.VITE_API_URL}/public_settings`,
|
||||
@@ -35,3 +35,10 @@ export const messagesDbRemote = new PouchDB<MessageDocument>(
|
||||
skip_setup: true,
|
||||
},
|
||||
)
|
||||
|
||||
export const userChatSettingsDbRemote = new PouchDB<UserChatSettingsDocument>(
|
||||
`${import.meta.env.VITE_API_URL}/user_chat_settings`,
|
||||
{
|
||||
skip_setup: true,
|
||||
},
|
||||
)
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
import { getUserUuid } from '@/utils/getUserUuid'
|
||||
import { getBrowserUuid } from '@/utils/getBrowserUuid'
|
||||
import { userChatSettingsDbRemote } from '@/api/dbs'
|
||||
import type { UserChatSettingsDocument } from '@hereconnect/types'
|
||||
|
||||
export const getUserChatSettingsDocument = ({
|
||||
chat,
|
||||
qr_code_uri,
|
||||
user_chat_role,
|
||||
}: {
|
||||
chat: string
|
||||
qr_code_uri: string
|
||||
user_chat_role: UserChatSettingsDocument['user_chat_role']
|
||||
}) => {
|
||||
return userChatSettingsDbRemote.get(
|
||||
`user_chat_settings:${qr_code_uri}:${chat}:${user_chat_role}:${getUserUuid()}`,
|
||||
)
|
||||
}
|
||||
|
||||
export const saveUserChatSettings = async ({
|
||||
chat,
|
||||
qr_code_uri,
|
||||
user_chat_role,
|
||||
is_push_notification_enabled,
|
||||
}: {
|
||||
chat: string
|
||||
qr_code_uri: string
|
||||
user_chat_role: UserChatSettingsDocument['user_chat_role']
|
||||
is_push_notification_enabled: boolean
|
||||
}) => {
|
||||
try {
|
||||
const user_uuid = getUserUuid()
|
||||
const browser_uuid = getBrowserUuid()
|
||||
const _id = `user_chat_settings:${qr_code_uri}:${chat}:${user_chat_role}:${user_uuid}`
|
||||
const result = await userChatSettingsDbRemote.upsert(
|
||||
_id,
|
||||
(doc): UserChatSettingsDocument | false => {
|
||||
const isNotChanged = doc.is_push_notification_enabled === is_push_notification_enabled
|
||||
if (isNotChanged) {
|
||||
return false
|
||||
}
|
||||
|
||||
const updated_at = new Date().toISOString()
|
||||
|
||||
return Object.assign(doc, {
|
||||
_id,
|
||||
type: 'user_chat_settings',
|
||||
qr_code_uri,
|
||||
browser_uuid,
|
||||
user_uuid,
|
||||
user_chat_role,
|
||||
chat,
|
||||
is_push_notification_enabled,
|
||||
created_at: doc.created_at ?? updated_at,
|
||||
updated_at,
|
||||
} satisfies UserChatSettingsDocument)
|
||||
},
|
||||
)
|
||||
console.log('Настройки успешно сохранены', result)
|
||||
} catch (error) {
|
||||
console.error('Ошибка сохранения настроек:', error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
@@ -3,13 +3,21 @@ import { publicSettingsDbRemote, webPushSubscriptionsDbRemote } from '@/api/dbs'
|
||||
import { getUserUuid } from '@/utils/getUserUuid'
|
||||
import { getBrowserUuid } from '@/utils/getBrowserUuid'
|
||||
|
||||
export const getWebPushSubscriptionDocument = async () => {
|
||||
const type = 'web_push_subscription'
|
||||
const user_uuid = getUserUuid()
|
||||
const browser_uuid = getBrowserUuid()
|
||||
const _id = `${type}:${user_uuid}:${browser_uuid}`
|
||||
return webPushSubscriptionsDbRemote.get(_id)
|
||||
}
|
||||
|
||||
export const saveWebPushSubscription = async (subscription: PushSubscription) => {
|
||||
const type = 'web_push_subscription'
|
||||
const user_uuid = getUserUuid()
|
||||
const browser_uuid = getBrowserUuid()
|
||||
const _id = `${type}:${user_uuid}:${browser_uuid}`
|
||||
const created_at = new Date().toISOString()
|
||||
const webPushSubscriptionDoc: WebPushSubscriptionDocument = {
|
||||
const webPushSubscriptionDoc: WebPushSubscriptionDocument<PushSubscriptionJSON> = {
|
||||
_id,
|
||||
type,
|
||||
user_uuid,
|
||||
@@ -20,7 +28,7 @@ export const saveWebPushSubscription = async (subscription: PushSubscription) =>
|
||||
try {
|
||||
const { rev } = await webPushSubscriptionsDbRemote.upsert(
|
||||
_id,
|
||||
(doc): WebPushSubscriptionDocument | false => {
|
||||
(doc): WebPushSubscriptionDocument<PushSubscriptionJSON> | false => {
|
||||
webPushSubscriptionDoc._rev = doc._rev
|
||||
const isNotChanged =
|
||||
JSON.stringify(webPushSubscriptionDoc.subscription) === JSON.stringify(doc.subscription)
|
||||
@@ -37,6 +45,7 @@ export const saveWebPushSubscription = async (subscription: PushSubscription) =>
|
||||
return webPushSubscriptionDoc
|
||||
} catch (error) {
|
||||
console.error('Ошибка сохранения подписки:', error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user