WellNuo/types/index.ts

158 lines
3.5 KiB
TypeScript

// User & Auth Types
// User & Auth Types
export interface User {
user_id: number | string;
user_name: string;
email?: string;
max_role: number | string;
privileges: string | string[];
}
export interface AuthResponse {
access_token: string;
privileges: string;
user_id: number;
max_role: number;
status: string;
}
export interface LoginCredentials {
username: string;
password: string;
}
// Subscription status for beneficiary
export interface BeneficiarySubscription {
status: 'active' | 'expired' | 'none' | 'expiring_soon';
startDate?: string; // ISO date
endDate?: string; // ISO date
planType?: 'monthly' | 'annual';
price?: number;
}
// Device/Sensor connected to beneficiary
export interface BeneficiaryDevice {
id: string;
type: 'motion' | 'door' | 'temperature' | 'bed' | 'other';
name: string;
location?: string;
status: 'online' | 'offline';
lastSeen?: string;
}
// Equipment/Kit delivery status
export type EquipmentStatus =
| 'none' // No equipment ordered
| 'ordered' // Kit ordered, waiting to ship
| 'shipped' // Kit shipped, in transit
| 'delivered' // Kit delivered, ready to activate
| 'active' // Equipment activated and working
| 'demo'; // Demo mode (DEMO-00000)
// Beneficiary Types (elderly people being monitored)
export interface Beneficiary {
id: number;
name: string;
avatar?: string;
device_id?: string;
status: 'online' | 'offline';
relationship?: string;
last_activity?: string;
sensor_data?: SensorData;
// Extended data from dashboard_single API
address?: string;
timezone?: string;
wellness_score?: number;
wellness_descriptor?: string;
last_location?: string;
temperature?: number;
units?: string;
sleep_hours?: number;
bedroom_temperature?: number;
before_last_location?: string;
last_detected_time?: string;
// Subscription & Devices
subscription?: BeneficiarySubscription;
devices?: BeneficiaryDevice[];
hasDevices?: boolean;
// Equipment status
equipmentStatus?: EquipmentStatus;
trackingNumber?: string; // Shipping tracking number
isDemo?: boolean; // Demo mode flag
// Invitations for sharing access
invitations?: {
id: string;
email: string;
role: string;
label?: string;
status: string;
created_at: string;
}[];
}
// Dashboard API response
export interface DashboardSingleResponse {
result_list: BeneficiaryDashboardData[];
status: string;
}
export interface BeneficiaryDashboardData {
user_id: number;
name: string;
address: string;
time_zone: string;
picture: string;
deployment_id: string;
wellness_score_percent: number;
wellness_descriptor: string;
wellness_descriptor_color: string;
last_location: string;
last_detected_time: string;
before_last_location: string;
temperature: number;
bedroom_temperature: number;
sleep_hours: number;
units: string;
location_list: string[];
}
export interface SensorData {
motion_detected?: boolean;
last_motion?: string;
door_status?: 'open' | 'closed';
temperature?: number;
humidity?: number;
last_updated?: string;
}
// Chat Types
export interface Message {
id: string;
role: 'user' | 'assistant';
content: string;
timestamp: Date;
}
export interface ChatResponse {
ok: boolean;
response: {
Command: string;
body: string;
language: string;
};
status: string;
}
// API Types
export interface ApiError {
message: string;
code?: string;
status?: number;
}
export interface ApiResponse<T> {
data?: T;
error?: ApiError;
ok: boolean;
}