feat: add party-size queueing and call modes

This commit is contained in:
wangxuming
2026-07-16 11:40:34 +08:00
parent 7f751bebae
commit 66951b4dc3
53 changed files with 3348 additions and 533 deletions

View File

@@ -9,6 +9,7 @@ export type TicketStatus =
| "CANCELED"
| "CANCELLED"
| string;
export type CallMode = "TICKET" | "PEOPLE" | "BOTH";
export interface UserDto {
id: string;
@@ -31,12 +32,20 @@ export interface ProjectDto {
status: ProjectStatus;
batch_size: number;
call_batch_size?: number;
call_mode?: CallMode;
default_call_ticket_count?: number;
max_call_ticket_count?: number;
default_call_people_count?: number;
max_call_people_count?: number;
min_party_size?: number;
max_party_size?: number;
ticket_prefix?: string;
timezone?: string;
grace_period_minutes?: number;
experienced_people_start?: number;
visitor_notice?: string | null;
eta?: {
interval_per_number_seconds?: number;
interval_per_person_seconds?: number;
};
}
@@ -58,9 +67,11 @@ export interface QueueTicketDto {
display_number?: string | null;
phone?: string;
phone_masked?: string | null;
phone_last4?: string;
last_name?: string | null;
honorific?: string | null;
status: TicketStatus;
party_size: number;
created_at?: string | null;
estimated_wait?: unknown;
public_token?: string | null;
@@ -71,6 +82,10 @@ export interface CallBatchDto {
id: string;
batch_number: string | number;
status: string;
call_mode?: Exclude<CallMode, "BOTH">;
requested_count?: number;
ticket_count?: number;
people_count?: number;
tickets: QueueTicketDto[];
called_at?: string | null;
}
@@ -89,7 +104,11 @@ export interface QueueSnapshotDto {
recent_batches?: CallBatchDto[];
metrics: {
waiting_count: number;
waiting_ticket_count: number;
waiting_people_count: number;
called_count?: number;
called_ticket_count?: number;
called_people_count?: number;
estimated_wait?: unknown;
last_ticket_number?: string | null;
next_ticket_number?: string | null;
@@ -100,6 +119,7 @@ export interface QueueSnapshotDto {
export interface CreateTicketPayload {
phone: string;
party_size: number;
last_name?: string;
honorific?: string;
allow_duplicate?: boolean;
@@ -107,9 +127,21 @@ export interface CreateTicketPayload {
export interface CreateTicketResponse {
ticket: QueueTicketDto;
public_token?: string;
public_url?: string;
status_path?: string;
revision: string | number;
}
export interface PublicProjectDto {
id: string;
name: string;
status: ProjectStatus;
visitor_notice?: string | null;
min_party_size: number;
max_party_size: number;
}
export interface CallNextResponse {
batch: CallBatchDto;
revision: string | number;
@@ -127,6 +159,8 @@ export interface PublicStatusDto {
status?: ProjectStatus;
};
status: TicketStatus;
party_size: number;
tickets_ahead?: number | null;
people_ahead?: number | null;
latest_called_number?: string | null;
estimated_wait?: unknown;
@@ -135,6 +169,7 @@ export interface PublicStatusDto {
entrance?: string | null;
message?: string | null;
visitor_notice?: string | null;
experienced_people?: number | null;
}
export interface PublicStatusSearchDto {
@@ -147,6 +182,9 @@ export interface DisplaySnapshotDto {
current_batch?: CallBatchDto | null;
recent_batches: CallBatchDto[];
waiting_count: number;
waiting_ticket_count: number;
waiting_people_count: number;
experienced_people: number;
estimated_wait?: unknown;
last_updated_at?: string | null;
device_status?: unknown;
@@ -157,6 +195,11 @@ export interface AdminProjectDto extends Partial<ProjectDto> {
name: string;
status: ProjectStatus;
waiting_count?: number;
waiting_ticket_count?: number;
waiting_people_count?: number;
issued_ticket_count?: number;
latest_ticket_number?: string | null;
experienced_people?: number;
current_batch?: string | number | CallBatchDto | null;
estimated_wait?: unknown;
last_updated_at?: string | null;
@@ -165,8 +208,15 @@ export interface AdminProjectDto extends Partial<ProjectDto> {
export interface UpdateProjectSettingsPayload {
status: string;
call_batch_size: number;
call_mode: CallMode;
default_call_ticket_count: number;
max_call_ticket_count: number;
default_call_people_count: number;
max_call_people_count: number;
min_party_size: number;
max_party_size: number;
grace_period_minutes: number;
experienced_people_start: number;
eta_interval_seconds: number;
visitor_notice: string;
}
@@ -179,6 +229,7 @@ export interface AdminActiveTicketDto {
phone: string;
last_name?: string | null;
honorific?: string | null;
party_size: number;
status: TicketStatus;
created_at: string;
}
@@ -187,6 +238,8 @@ export interface AdminOverviewDto {
summary: {
running_projects: number;
waiting_count: number;
waiting_ticket_count: number;
waiting_people_count: number;
anomaly_projects: number;
offline_devices: number;
};