feat: 支持管理员消息推送
This commit is contained in:
@@ -6,6 +6,7 @@ import type {
|
||||
SubscriptionMessageRequestItem,
|
||||
SubscriptionMessageTemplate,
|
||||
SubscriptionMessageTemplateConfig,
|
||||
UserProfileResponse,
|
||||
} from '@mp-pilates/shared'
|
||||
import { post } from './request'
|
||||
|
||||
@@ -30,16 +31,20 @@ function stringifyDebugPayload(payload: unknown): string {
|
||||
|
||||
function getSubscribeDebugContext() {
|
||||
try {
|
||||
const systemInfo = uni.getSystemInfoSync()
|
||||
const host = systemInfo.host as { env?: string } | string | undefined
|
||||
const windowInfo = typeof uni.getWindowInfo === 'function' ? uni.getWindowInfo() : null
|
||||
const appBaseInfo = typeof uni.getAppBaseInfo === 'function' ? uni.getAppBaseInfo() : null
|
||||
const deviceInfo = typeof uni.getDeviceInfo === 'function' ? uni.getDeviceInfo() : null
|
||||
const host = appBaseInfo?.host as { env?: string } | string | undefined
|
||||
|
||||
return {
|
||||
platform: systemInfo.platform,
|
||||
platform: deviceInfo?.platform ?? 'unknown',
|
||||
hostEnv: typeof host === 'object' && host ? host.env : undefined,
|
||||
app: systemInfo.appName,
|
||||
system: systemInfo.system,
|
||||
language: systemInfo.language,
|
||||
version: systemInfo.version,
|
||||
SDKVersion: systemInfo.SDKVersion,
|
||||
app: appBaseInfo?.appName,
|
||||
system: deviceInfo?.system,
|
||||
language: appBaseInfo?.language,
|
||||
version: appBaseInfo?.version,
|
||||
SDKVersion: appBaseInfo?.SDKVersion,
|
||||
windowWidth: windowInfo?.windowWidth,
|
||||
}
|
||||
} catch {
|
||||
return {
|
||||
@@ -182,6 +187,61 @@ export async function requestBookingCreatedSubscriptionMessage(): Promise<Subscr
|
||||
return requestSubscriptionMessage(SubscriptionMessageScene.BOOKING_CREATED)
|
||||
}
|
||||
|
||||
export async function requestAdminBookingSubscriptionCount(): Promise<UserProfileResponse | null> {
|
||||
if (!isMpWeixin()) {
|
||||
return null
|
||||
}
|
||||
|
||||
const config = await fetchTemplateConfig()
|
||||
const templates = getTemplatesByScene(config, SubscriptionMessageScene.ADMIN_BOOKING_CREATED)
|
||||
.filter((item) => item.usageTarget === 'counter')
|
||||
|
||||
if (templates.length === 0) {
|
||||
console.error('[subscribe] no admin counter template configured', stringifyDebugPayload({
|
||||
scene: SubscriptionMessageScene.ADMIN_BOOKING_CREATED,
|
||||
config,
|
||||
debugContext: getSubscribeDebugContext(),
|
||||
}))
|
||||
return null
|
||||
}
|
||||
|
||||
const templateId = templates[0].templateId
|
||||
const debugContext = getSubscribeDebugContext()
|
||||
|
||||
console.log('[subscribe] requestSubscribeMessage:adminCounter:start', stringifyDebugPayload({
|
||||
templateId,
|
||||
debugContext,
|
||||
}))
|
||||
|
||||
const result = await new Promise<RequestSubscribeMessageSuccess>((resolve, reject) => {
|
||||
uni.requestSubscribeMessage({
|
||||
tmplIds: [templateId],
|
||||
success: (res) => {
|
||||
console.log('[subscribe] requestSubscribeMessage:adminCounter:success', stringifyDebugPayload({ response: res, templateId, debugContext }))
|
||||
resolve(res as RequestSubscribeMessageSuccess)
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('[subscribe] requestSubscribeMessage:adminCounter:fail', stringifyDebugPayload({ error: err, templateId, debugContext }))
|
||||
reject(buildSubscribeError(err as RequestSubscribeMessageFail, SubscriptionMessageScene.ADMIN_BOOKING_CREATED, [templateId]))
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
const normalized = normalizeResult(result[templateId])
|
||||
console.log('[subscribe] requestSubscribeMessage:adminCounter:normalized', stringifyDebugPayload({
|
||||
templateId,
|
||||
normalized,
|
||||
rawResult: result,
|
||||
debugContext,
|
||||
}))
|
||||
|
||||
if (normalized !== 'accept') {
|
||||
return null
|
||||
}
|
||||
|
||||
return post<UserProfileResponse>('/user/subscription-messages/admin-booking-count')
|
||||
}
|
||||
|
||||
export function resetSubscriptionMessageTemplateCache(): void {
|
||||
cachedConfig = null
|
||||
uni.removeStorageSync(TEMPLATE_CONFIG_STORAGE_KEY)
|
||||
|
||||
Reference in New Issue
Block a user