perf: 支持约课以及消息推送能力

This commit is contained in:
richarjiang
2026-04-12 21:44:44 +08:00
parent 9639f44698
commit c60821c5ff
28 changed files with 963 additions and 86 deletions

View File

@@ -19,3 +19,6 @@ export const DATE_SELECTOR_DAYS = 7
/** 星期映射 */
export const WEEKDAY_LABELS = ['', '周一', '周二', '周三', '周四', '周五', '周六', '周日'] as const
/** 微信订阅消息请求结果 */
export const SUBSCRIPTION_MESSAGE_REQUEST_RESULTS = ['accept', 'reject', 'ban', 'filter'] as const

View File

@@ -58,3 +58,9 @@ export enum FlashSaleOrderStatus {
PAID = 'PAID',
EXPIRED = 'EXPIRED',
}
// ===== Subscribe Message =====
export enum SubscriptionMessageScene {
ORDER_PAID = 'ORDER_PAID',
BOOKING_CREATED = 'BOOKING_CREATED',
}

View File

@@ -9,6 +9,7 @@ export {
OrderStatus,
FlashSaleStatus,
FlashSaleOrderStatus,
SubscriptionMessageScene,
} from './enums'
// Constants
@@ -19,6 +20,7 @@ export {
TIME_PERIODS,
DATE_SELECTOR_DAYS,
WEEKDAY_LABELS,
SUBSCRIPTION_MESSAGE_REQUEST_RESULTS,
} from './constants'
// Types
@@ -63,6 +65,12 @@ export type {
CreateFlashSaleDto,
UpdateFlashSaleDto,
FlashSalePurchaseResponse,
SubscriptionMessageRequestResult,
SubscriptionMessageRequestItem,
SubscriptionMessageTemplate,
SubscriptionMessageTemplateConfig,
ReportSubscriptionMessageRequestDto,
SubscriptionMessageConsentSummary,
} from './types/index'
export { FlashSalePhase } from './types/index'

View File

@@ -1,4 +1,12 @@
export type { User, UserProfileResponse, UpdateProfileDto, UserStatsResponse } from './user'
export type {
SubscriptionMessageRequestResult,
SubscriptionMessageRequestItem,
SubscriptionMessageTemplate,
SubscriptionMessageTemplateConfig,
ReportSubscriptionMessageRequestDto,
SubscriptionMessageConsentSummary,
} from './subscription'
export type { CardType, CreateCardTypeDto, UpdateCardTypeDto } from './card-type'
export type { Membership, MembershipWithCardType } from './membership'
export type { WeekTemplate, WeekTemplateInput } from './week-template'

View File

@@ -0,0 +1,41 @@
import { SubscriptionMessageScene } from '../enums'
import type { SUBSCRIPTION_MESSAGE_REQUEST_RESULTS } from '../constants'
export type SubscriptionMessageRequestResult = typeof SUBSCRIPTION_MESSAGE_REQUEST_RESULTS[number]
export interface SubscriptionMessageRequestItem {
readonly templateId: string
readonly scene: SubscriptionMessageScene
readonly result: SubscriptionMessageRequestResult
}
export interface SubscriptionMessageTemplate {
readonly templateId: string
readonly scene: SubscriptionMessageScene
readonly description: string
}
export interface SubscriptionMessageTemplateConfig {
readonly templates: SubscriptionMessageTemplate[]
}
export interface ReportSubscriptionMessageRequestDto {
readonly requests: SubscriptionMessageRequestItem[]
}
export interface SubscriptionMessageConsentSummary {
readonly userId: string
readonly templateId: string
readonly scene: SubscriptionMessageScene
readonly totalRequestCount: number
readonly acceptCount: number
readonly rejectCount: number
readonly banCount: number
readonly filterCount: number
readonly sentCount: number
readonly lastResult: SubscriptionMessageRequestResult
readonly lastRequestedAt: string
readonly lastSentAt: string | null
readonly createdAt: string
readonly updatedAt: string
}

View File

@@ -1,4 +1,5 @@
import { UserRole } from '../enums'
import type { SubscriptionMessageTemplateConfig } from './subscription'
export interface User {
readonly id: string
@@ -19,6 +20,7 @@ export interface UserProfileResponse {
readonly avatarUrl: string | null
readonly role: UserRole
readonly activeMembershipCount: number
readonly subscriptionMessageTemplates: SubscriptionMessageTemplateConfig
readonly createdAt: string
}