File size: 2,335 Bytes
b24b684
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
export type UserRole = "customer" | "worker" | "admin";
export type BookingStatus =
  | "pending_approval"
  | "open"
  | "pending"
  | "accepted"
  | "rejected"
  | "completed"
  | "cancelled";
export type KycStatus = "not_submitted" | "pending" | "verified" | "rejected";

export interface Token {
  access_token: string;
  refresh_token: string;
  token_type: string;
  role: UserRole;
  user_id: number;
}

export interface AccessToken {
  access_token: string;
  refresh_token: string;
  token_type: string;
}

export interface AppUser {
  id: number;
  name: string;
  phone?: string | null;
  email?: string | null;
  role: UserRole;
  profile_image?: string | null;
  is_active: boolean;
  created_at: string;
}

export interface Category {
  id: number;
  name: string;
  icon?: string | null;
  is_active: boolean;
}

export interface DashboardStats {
  total_customers: number;
  total_workers: number;
  verified_workers: number;
  pending_kyc: number;
  total_bookings: number;
  completed_bookings: number;
  pending_bookings: number;
  total_revenue: number;
}

export interface AdminWorker {
  id: number;
  user_id: number;
  category_id?: number | null;
  experience: number;
  bio?: string | null;
  service_area?: string | null;
  kyc_status: KycStatus;
  is_verified: boolean;
  is_available: boolean;
  is_suspended: boolean;
  rating: number;
  rating_count: number;
  category?: Category | null;
  name?: string | null;
  phone?: string | null;
  is_active?: boolean | null;
}

export interface BookingParty {
  id: number;
  name: string;
  phone?: string | null;
  profile_image?: string | null;
}

export interface ReviewLite {
  id: number;
  booking_id: number;
  rating: number;
  comment?: string | null;
  is_hidden: boolean;
  created_at: string;
}

export interface Booking {
  id: number;
  customer_id: number;
  worker_id?: number | null;
  category_id?: number | null;
  booking_date: string;
  booking_time?: string | null;
  address: string;
  notes?: string | null;
  status: BookingStatus;
  amount: number;
  is_open_request: boolean;
  created_at: string;
  customer?: BookingParty | null;
  worker?: BookingParty | null;
  category?: Category | null;
  review?: ReviewLite | null;
}