400 lines
9.3 KiB
TypeScript
400 lines
9.3 KiB
TypeScript
export type ProjectStatus = "NOT_OPEN" | "RUNNING" | "PAUSED" | "ENDED" | "CLOSED" | "OPEN" | "FINISHED" | string;
|
|
export type TicketStatus =
|
|
| "WAITING"
|
|
| "CALLED"
|
|
| "ARRIVED"
|
|
| "SERVING"
|
|
| "COMPLETED"
|
|
| "MISSED"
|
|
| "CANCELED"
|
|
| "CANCELLED"
|
|
| string;
|
|
export type CallMode = "TICKET" | "PEOPLE" | "BOTH";
|
|
|
|
export interface UserDto {
|
|
id: string;
|
|
username: string;
|
|
display_name?: string;
|
|
role: string;
|
|
}
|
|
|
|
export interface AdminUserDto extends UserDto {
|
|
active: boolean;
|
|
protected?: boolean;
|
|
project_ids: string[];
|
|
created_at?: string;
|
|
}
|
|
|
|
export interface ProjectDto {
|
|
id: string;
|
|
code?: string;
|
|
name: string;
|
|
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_person_seconds?: number;
|
|
};
|
|
}
|
|
|
|
export interface ProjectProfilePayload {
|
|
name: string;
|
|
code: string;
|
|
timezone: string;
|
|
ticket_prefix: string;
|
|
}
|
|
|
|
export interface AuthPayload {
|
|
user: UserDto;
|
|
projects: ProjectDto[];
|
|
}
|
|
|
|
export interface QueueTicketDto {
|
|
id: string;
|
|
ticket_number: string;
|
|
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;
|
|
public_url?: string | null;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
export interface DeviceResultDto {
|
|
channel: string;
|
|
status: string;
|
|
message?: string | null;
|
|
}
|
|
|
|
export interface QueueSnapshotDto {
|
|
project: ProjectDto;
|
|
revision: string | number;
|
|
waiting: QueueTicketDto[];
|
|
current_batch?: CallBatchDto | null;
|
|
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;
|
|
};
|
|
server_time?: string | null;
|
|
last_success_at?: string | null;
|
|
}
|
|
|
|
export interface CreateTicketPayload {
|
|
phone: string;
|
|
party_size: number;
|
|
last_name?: string;
|
|
honorific?: string;
|
|
allow_duplicate?: boolean;
|
|
}
|
|
|
|
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;
|
|
device_results: DeviceResultDto[];
|
|
}
|
|
|
|
export interface PublicStatusDto {
|
|
ticket_number: string;
|
|
display_number?: string | null;
|
|
phone_last4?: string;
|
|
project_name: string;
|
|
project?: {
|
|
id?: string;
|
|
name?: string;
|
|
status?: ProjectStatus;
|
|
};
|
|
status: TicketStatus;
|
|
party_size: number;
|
|
tickets_ahead?: number | null;
|
|
people_ahead?: number | null;
|
|
latest_called_number?: string | null;
|
|
estimated_wait?: unknown;
|
|
called_at?: string | null;
|
|
last_updated_at?: string | null;
|
|
entrance?: string | null;
|
|
message?: string | null;
|
|
visitor_notice?: string | null;
|
|
experienced_people?: number | null;
|
|
}
|
|
|
|
export interface PublicStatusSearchDto {
|
|
tickets: PublicStatusDto[];
|
|
}
|
|
|
|
export interface DisplaySnapshotDto {
|
|
project_name: string;
|
|
status: ProjectStatus;
|
|
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;
|
|
}
|
|
|
|
export interface AdminProjectDto extends Partial<ProjectDto> {
|
|
id: string;
|
|
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;
|
|
device_status?: unknown;
|
|
}
|
|
|
|
export interface UpdateProjectSettingsPayload {
|
|
status: string;
|
|
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;
|
|
}
|
|
|
|
export interface AdminActiveTicketDto {
|
|
id: string;
|
|
project_id: string;
|
|
project_name: string;
|
|
ticket_number: string;
|
|
phone: string;
|
|
last_name?: string | null;
|
|
honorific?: string | null;
|
|
party_size: number;
|
|
status: TicketStatus;
|
|
created_at: string;
|
|
}
|
|
|
|
export interface AdminOverviewDto {
|
|
summary: {
|
|
running_projects: number;
|
|
waiting_count: number;
|
|
waiting_ticket_count: number;
|
|
waiting_people_count: number;
|
|
anomaly_projects: number;
|
|
offline_devices: number;
|
|
};
|
|
projects: AdminProjectDto[];
|
|
active_tickets: AdminActiveTicketDto[];
|
|
}
|
|
|
|
export interface AdminHistoryQuery {
|
|
project_id?: string;
|
|
from: string;
|
|
to: string;
|
|
status?: string;
|
|
query?: string;
|
|
page?: number;
|
|
page_size?: number;
|
|
}
|
|
|
|
export interface AdminHistoryTicketDto {
|
|
id: string;
|
|
project_id: string;
|
|
project_name: string;
|
|
project_code?: string;
|
|
queue_session_id: string;
|
|
business_date: string;
|
|
ticket_number: string;
|
|
ticket_sequence?: number;
|
|
party_size: number;
|
|
status: TicketStatus;
|
|
joined_at?: string | null;
|
|
called_at?: string | null;
|
|
arrived_at?: string | null;
|
|
completed_at?: string | null;
|
|
missed_at?: string | null;
|
|
terminal_at?: string | null;
|
|
wait_seconds?: number | null;
|
|
created_by?: string | null;
|
|
phone?: string | null;
|
|
phone_last4?: string | null;
|
|
phone_masked?: string | null;
|
|
last_name?: string | null;
|
|
honorific?: string | null;
|
|
personal_data_status: "AVAILABLE" | "ANONYMIZED" | string;
|
|
personal_data_purged_at?: string | null;
|
|
history_anonymized_at?: string | null;
|
|
batch_id?: string | null;
|
|
batch_sequence?: number | null;
|
|
batch_position?: number | null;
|
|
}
|
|
|
|
export interface AdminHistoryBatchDto {
|
|
id: string;
|
|
project_id: string;
|
|
project_name: string;
|
|
project_code?: string;
|
|
queue_session_id: string;
|
|
business_date: string;
|
|
batch_sequence: number;
|
|
revision?: number;
|
|
status: string;
|
|
call_mode?: "TICKET" | "PEOPLE" | string;
|
|
requested_count: number;
|
|
ticket_count: number;
|
|
people_count: number;
|
|
requested_by?: string | null;
|
|
called_at?: string | null;
|
|
completed_at?: string | null;
|
|
ticket_numbers?: string[];
|
|
tickets?: AdminHistoryTicketDto[];
|
|
}
|
|
|
|
export interface AdminHistoryPageDto<T> {
|
|
items: T[];
|
|
page: number;
|
|
page_size: number;
|
|
total: number;
|
|
from: string;
|
|
to: string;
|
|
}
|
|
|
|
export interface AdminHistoryHourlyDto {
|
|
hour: number;
|
|
issued_tickets: number;
|
|
issued_people: number;
|
|
called_tickets: number;
|
|
called_people: number;
|
|
}
|
|
|
|
export interface AdminHistoryPeakHourDto extends AdminHistoryHourlyDto {
|
|
rank: number;
|
|
}
|
|
|
|
export interface AdminHistoryDailyDto {
|
|
business_date: string;
|
|
total_tickets: number;
|
|
total_people: number;
|
|
called_tickets: number;
|
|
completed_tickets: number;
|
|
missed_tickets: number;
|
|
canceled_tickets: number;
|
|
completion_rate: number;
|
|
missed_rate: number;
|
|
canceled_rate: number;
|
|
average_wait_seconds?: number | null;
|
|
max_wait_seconds?: number | null;
|
|
}
|
|
|
|
export interface AdminHistoryProjectDto {
|
|
project_id: string;
|
|
project_name: string;
|
|
project_code?: string;
|
|
total_tickets: number;
|
|
total_people: number;
|
|
called_tickets: number;
|
|
completed_tickets: number;
|
|
missed_tickets: number;
|
|
canceled_tickets: number;
|
|
completion_rate: number;
|
|
missed_rate: number;
|
|
canceled_rate: number;
|
|
average_wait_seconds?: number | null;
|
|
max_wait_seconds?: number | null;
|
|
}
|
|
|
|
export interface AdminHistoryAlertDto {
|
|
severity: number;
|
|
type: string;
|
|
title: string;
|
|
detail: string;
|
|
project_id: string;
|
|
project_name: string;
|
|
total_tickets: number;
|
|
}
|
|
|
|
export interface AdminHistorySummaryDto {
|
|
from: string;
|
|
to: string;
|
|
summary: {
|
|
total_tickets: number;
|
|
total_people: number;
|
|
called_tickets: number;
|
|
called_people: number;
|
|
completed_tickets: number;
|
|
completed_people: number;
|
|
missed_tickets: number;
|
|
canceled_tickets: number;
|
|
completion_rate: number;
|
|
missed_rate: number;
|
|
canceled_rate: number;
|
|
average_wait_seconds?: number | null;
|
|
max_wait_seconds?: number | null;
|
|
};
|
|
hourly: AdminHistoryHourlyDto[];
|
|
peak_hours?: AdminHistoryPeakHourDto[];
|
|
daily?: AdminHistoryDailyDto[];
|
|
projects?: AdminHistoryProjectDto[];
|
|
alerts?: AdminHistoryAlertDto[];
|
|
}
|