Projeto bot pontos
This commit is contained in:
174
web/lib/types.ts
Normal file
174
web/lib/types.ts
Normal file
@@ -0,0 +1,174 @@
|
||||
// Tipos da API (espelham backend/internal/httpapi/dto.go e api/openapi.yaml).
|
||||
|
||||
export type Role = "owner" | "admin" | "viewer";
|
||||
export type UserStatus = "pending" | "active" | "disabled";
|
||||
export type NotificationStatus = "scheduled" | "sending" | "sent" | "failed" | "cancelled" | "expired";
|
||||
export type NotificationType = "entrada2" | "saida2";
|
||||
export type DayStatus = "awaiting" | "no_points" | "working" | "not_working" | "finished";
|
||||
|
||||
export interface Problem {
|
||||
type: string;
|
||||
title: string;
|
||||
status: number;
|
||||
code?: string;
|
||||
errors?: { field: string; message: string }[];
|
||||
}
|
||||
|
||||
export interface Account {
|
||||
id: number;
|
||||
username: string;
|
||||
role: Role;
|
||||
user_id: number | null;
|
||||
disabled: boolean;
|
||||
locked_until: string | null;
|
||||
last_login_at: string | null;
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
export interface Me {
|
||||
account: Account;
|
||||
expires_at: string;
|
||||
}
|
||||
|
||||
export interface User {
|
||||
id: number;
|
||||
telegram_chat_id: number;
|
||||
display_name: string;
|
||||
status: UserStatus;
|
||||
is_bot_admin: boolean;
|
||||
notifications_enabled: boolean;
|
||||
paused_reason: string | null;
|
||||
timezone: string;
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
export interface UserSummary extends User {
|
||||
has_credential: boolean;
|
||||
credential_validated: boolean;
|
||||
consecutive_failures: number;
|
||||
custom_window: boolean;
|
||||
}
|
||||
|
||||
export interface QueryWindow {
|
||||
query_window_start: string;
|
||||
query_window_end: string;
|
||||
day_check_deadline: string;
|
||||
no_points_recheck_until: string;
|
||||
}
|
||||
|
||||
export interface Schedule {
|
||||
lunch_minutes: number;
|
||||
daily_work_minutes: number;
|
||||
entrada2_lead_minutes: number;
|
||||
saida2_lead_minutes: number;
|
||||
window: QueryWindow | null;
|
||||
}
|
||||
|
||||
export interface Credential {
|
||||
api_email: string;
|
||||
validated: boolean;
|
||||
last_validated_at: string | null;
|
||||
last_error: string | null;
|
||||
consecutive_failures: number;
|
||||
last_failure_at: string | null;
|
||||
updated_at: string;
|
||||
}
|
||||
|
||||
export interface Day {
|
||||
day: string;
|
||||
status: DayStatus;
|
||||
zero_point_checks: number;
|
||||
last_point_count: number;
|
||||
next_check_at: string | null;
|
||||
resumed_by: string | null;
|
||||
}
|
||||
|
||||
export interface UserDetail {
|
||||
user: User;
|
||||
schedule: Schedule;
|
||||
credential: Credential | null;
|
||||
today: Day;
|
||||
effective_window: QueryWindow;
|
||||
custom_window: boolean;
|
||||
}
|
||||
|
||||
export interface Today {
|
||||
day: string;
|
||||
timezone: string;
|
||||
points: string[];
|
||||
invalid: boolean;
|
||||
overtime: boolean;
|
||||
entrada2_at: string | null;
|
||||
saida2_at: string | null;
|
||||
saida2_error?: string;
|
||||
day_state: Day;
|
||||
window: QueryWindow;
|
||||
custom_window: boolean;
|
||||
}
|
||||
|
||||
export interface Notification {
|
||||
id: number;
|
||||
user_id: number;
|
||||
user_name?: string;
|
||||
reference_date: string;
|
||||
type: NotificationType;
|
||||
scheduled_at: string;
|
||||
predicted_at: string;
|
||||
status: NotificationStatus;
|
||||
attempts: number;
|
||||
sent_at: string | null;
|
||||
error_message: string | null;
|
||||
}
|
||||
|
||||
export interface AuditLog {
|
||||
id: number;
|
||||
occurred_at: string;
|
||||
source: string;
|
||||
actor_user_id: number | null;
|
||||
actor_user_name: string | null;
|
||||
actor_account: number | null;
|
||||
actor_username: string | null;
|
||||
target_user_id: number | null;
|
||||
target_user_name: string | null;
|
||||
event_type: string;
|
||||
success: boolean;
|
||||
details: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface Holiday {
|
||||
day: string;
|
||||
name: string;
|
||||
source: string;
|
||||
}
|
||||
|
||||
export interface Dashboard {
|
||||
users_by_status: Record<string, number>;
|
||||
notifications_enabled: number;
|
||||
paused_by_api_failures: number;
|
||||
today_by_status: Record<string, number>;
|
||||
failed_last_7_days: number;
|
||||
expired_last_7_days: number;
|
||||
custom_windows: number;
|
||||
outage_since: string | null;
|
||||
holiday_fallback_day: string | null;
|
||||
today: string;
|
||||
}
|
||||
|
||||
export interface Settings {
|
||||
window: QueryWindow;
|
||||
reconciliation_minutes: number;
|
||||
dispatch_minutes: number;
|
||||
late_tolerance_minutes: number;
|
||||
api_failure_threshold: number;
|
||||
slow_check_minutes: number;
|
||||
}
|
||||
|
||||
export interface WindowPreview {
|
||||
errors: { field: string; message: string }[];
|
||||
max_queries_per_user: number;
|
||||
typical_queries_per_user: number;
|
||||
day_off_queries_per_user: number;
|
||||
affected_users: number;
|
||||
affected_days: number;
|
||||
custom_window_users: number;
|
||||
}
|
||||
Reference in New Issue
Block a user