@devlider001/washlab-backend 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/convex/_generated/api.d.ts +6 -0
  2. package/convex/admin.d.ts +129 -4
  3. package/convex/analytics.d.ts +87 -0
  4. package/convex/attendants.d.ts +40 -0
  5. package/convex/audit.d.ts +39 -0
  6. package/convex/customers.d.ts +69 -1
  7. package/convex/lib/auth.d.ts +4 -0
  8. package/convex/loyalty.d.ts +1 -1
  9. package/convex/notifications.d.ts +170 -0
  10. package/convex/orders.d.ts +80 -4
  11. package/convex/payments.d.ts +47 -2
  12. package/convex/resources.d.ts +31 -0
  13. package/convex/schema.d.ts +141 -9
  14. package/convex/vouchers.d.ts +187 -0
  15. package/dist/convex/admin.d.ts +377 -0
  16. package/dist/convex/admin.d.ts.map +1 -0
  17. package/dist/convex/admin.js +959 -0
  18. package/dist/convex/admin.js.map +1 -0
  19. package/dist/convex/analytics.d.ts +87 -0
  20. package/dist/convex/analytics.d.ts.map +1 -0
  21. package/dist/convex/analytics.js +361 -0
  22. package/dist/convex/analytics.js.map +1 -0
  23. package/dist/convex/attendants.d.ts +140 -0
  24. package/dist/convex/attendants.d.ts.map +1 -0
  25. package/dist/convex/attendants.js +337 -0
  26. package/dist/convex/attendants.js.map +1 -0
  27. package/dist/convex/audit.d.ts +158 -0
  28. package/dist/convex/audit.d.ts.map +1 -0
  29. package/dist/convex/audit.js +184 -0
  30. package/dist/convex/audit.js.map +1 -0
  31. package/dist/convex/clerk.d.ts +53 -0
  32. package/dist/convex/clerk.d.ts.map +1 -0
  33. package/dist/convex/clerk.js +316 -0
  34. package/dist/convex/clerk.js.map +1 -0
  35. package/dist/convex/customers.d.ts +224 -0
  36. package/dist/convex/customers.d.ts.map +1 -0
  37. package/dist/convex/customers.js +504 -0
  38. package/dist/convex/customers.js.map +1 -0
  39. package/dist/convex/http.d.ts +3 -0
  40. package/dist/convex/http.d.ts.map +1 -0
  41. package/dist/convex/http.js +115 -0
  42. package/dist/convex/http.js.map +1 -0
  43. package/dist/convex/lib/audit.d.ts +36 -0
  44. package/dist/convex/lib/audit.d.ts.map +1 -0
  45. package/dist/convex/lib/audit.js +59 -0
  46. package/dist/convex/lib/audit.js.map +1 -0
  47. package/dist/convex/lib/auth.d.ts +96 -0
  48. package/dist/convex/lib/auth.d.ts.map +1 -0
  49. package/dist/convex/lib/auth.js +94 -0
  50. package/dist/convex/lib/auth.js.map +1 -0
  51. package/dist/convex/lib/utils.d.ts +38 -0
  52. package/dist/convex/lib/utils.d.ts.map +1 -0
  53. package/dist/convex/lib/utils.js +71 -0
  54. package/dist/convex/lib/utils.js.map +1 -0
  55. package/dist/convex/loyalty.d.ts +82 -0
  56. package/dist/convex/loyalty.d.ts.map +1 -0
  57. package/dist/convex/loyalty.js +286 -0
  58. package/dist/convex/loyalty.js.map +1 -0
  59. package/dist/convex/orders.d.ts +326 -0
  60. package/dist/convex/orders.d.ts.map +1 -0
  61. package/dist/convex/orders.js +570 -0
  62. package/dist/convex/orders.js.map +1 -0
  63. package/dist/convex/payments.d.ts +134 -0
  64. package/dist/convex/payments.d.ts.map +1 -0
  65. package/dist/convex/payments.js +360 -0
  66. package/dist/convex/payments.js.map +1 -0
  67. package/dist/convex/resources.d.ts +119 -0
  68. package/dist/convex/resources.d.ts.map +1 -0
  69. package/dist/convex/resources.js +283 -0
  70. package/dist/convex/resources.js.map +1 -0
  71. package/dist/convex/schema.d.ts +450 -0
  72. package/dist/convex/schema.d.ts.map +1 -0
  73. package/dist/convex/schema.js +347 -0
  74. package/dist/convex/schema.js.map +1 -0
  75. package/dist/convex/vouchers.d.ts +187 -0
  76. package/dist/convex/vouchers.d.ts.map +1 -0
  77. package/dist/convex/vouchers.js +464 -0
  78. package/dist/convex/vouchers.js.map +1 -0
  79. package/dist/src/index.d.ts +9 -0
  80. package/dist/src/index.d.ts.map +1 -0
  81. package/dist/src/index.js +9 -0
  82. package/dist/src/index.js.map +1 -0
  83. package/package.json +4 -3
@@ -0,0 +1,377 @@
1
+ import { Id } from "./_generated/dataModel";
2
+ /**
3
+ * Admin Functions
4
+ *
5
+ * Handles admin operations: branch management, attendant management,
6
+ * system-wide order viewing, analytics, and customer management.
7
+ */
8
+ /**
9
+ * Get current admin profile (from authenticated Clerk session)
10
+ */
11
+ export declare const getCurrentUser: import("convex/server").RegisteredQuery<"public", {}, Promise<{
12
+ _id: import("convex/values").GenericId<"admins">;
13
+ _creationTime: number;
14
+ lastLoginAt?: number | undefined;
15
+ email: string;
16
+ name: string;
17
+ clerkUserId: string;
18
+ createdAt: number;
19
+ isDeleted: boolean;
20
+ role: "super_admin" | "admin";
21
+ }>>;
22
+ /**
23
+ * Get all branches - Paginated
24
+ * Supports usePaginatedQuery for infinite scroll
25
+ */
26
+ export declare const getBranches: import("convex/server").RegisteredQuery<"public", {
27
+ includeInactive?: boolean | undefined;
28
+ cursor?: string | undefined;
29
+ numItems?: number | undefined;
30
+ }, Promise<{
31
+ page: {
32
+ _id: import("convex/values").GenericId<"branches">;
33
+ _creationTime: number;
34
+ email?: string | undefined;
35
+ phoneNumber: string;
36
+ name: string;
37
+ createdAt: number;
38
+ isDeleted: boolean;
39
+ isActive: boolean;
40
+ code: string;
41
+ address: string;
42
+ city: string;
43
+ country: string;
44
+ pricingPerKg: number;
45
+ deliveryFee: number;
46
+ createdBy: import("convex/values").GenericId<"admins">;
47
+ }[];
48
+ isDone: boolean;
49
+ continueCursor: string;
50
+ }>>;
51
+ /**
52
+ * Get branch by code
53
+ */
54
+ export declare const getBranchByCode: import("convex/server").RegisteredQuery<"public", {
55
+ code: string;
56
+ }, Promise<{
57
+ _id: import("convex/values").GenericId<"branches">;
58
+ _creationTime: number;
59
+ email?: string | undefined;
60
+ phoneNumber: string;
61
+ name: string;
62
+ createdAt: number;
63
+ isDeleted: boolean;
64
+ isActive: boolean;
65
+ code: string;
66
+ address: string;
67
+ city: string;
68
+ country: string;
69
+ pricingPerKg: number;
70
+ deliveryFee: number;
71
+ createdBy: import("convex/values").GenericId<"admins">;
72
+ } | null>>;
73
+ /**
74
+ * Get single branch by ID
75
+ */
76
+ export declare const getBranch: import("convex/server").RegisteredQuery<"public", {
77
+ branchId: import("convex/values").GenericId<"branches">;
78
+ }, Promise<{
79
+ _id: import("convex/values").GenericId<"branches">;
80
+ _creationTime: number;
81
+ email?: string | undefined;
82
+ phoneNumber: string;
83
+ name: string;
84
+ createdAt: number;
85
+ isDeleted: boolean;
86
+ isActive: boolean;
87
+ code: string;
88
+ address: string;
89
+ city: string;
90
+ country: string;
91
+ pricingPerKg: number;
92
+ deliveryFee: number;
93
+ createdBy: import("convex/values").GenericId<"admins">;
94
+ } | null>>;
95
+ /**
96
+ * Get all attendants - Paginated
97
+ * Supports usePaginatedQuery for infinite scroll
98
+ */
99
+ export declare const getAttendants: import("convex/server").RegisteredQuery<"public", {
100
+ branchId?: import("convex/values").GenericId<"branches"> | undefined;
101
+ includeInactive?: boolean | undefined;
102
+ cursor?: string | undefined;
103
+ numItems?: number | undefined;
104
+ }, Promise<{
105
+ page: {
106
+ _id: import("convex/values").GenericId<"attendants">;
107
+ _creationTime: number;
108
+ lastLoginAt?: number | undefined;
109
+ passcode?: string | undefined;
110
+ phoneNumber: string;
111
+ email: string;
112
+ name: string;
113
+ clerkUserId: string;
114
+ createdAt: number;
115
+ isDeleted: boolean;
116
+ branchId: import("convex/values").GenericId<"branches">;
117
+ isActive: boolean;
118
+ }[];
119
+ isDone: boolean;
120
+ continueCursor: string;
121
+ }>>;
122
+ /**
123
+ * Get all orders (with filters) - Paginated
124
+ * Supports usePaginatedQuery for infinite scroll
125
+ */
126
+ export declare const getOrders: import("convex/server").RegisteredQuery<"public", {
127
+ status?: "pending" | "in_progress" | "ready_for_pickup" | "delivered" | "completed" | "cancelled" | undefined;
128
+ branchId?: import("convex/values").GenericId<"branches"> | undefined;
129
+ cursor?: string | undefined;
130
+ numItems?: number | undefined;
131
+ startDate?: number | undefined;
132
+ endDate?: number | undefined;
133
+ }, Promise<{
134
+ page: {
135
+ _id: import("convex/values").GenericId<"orders">;
136
+ _creationTime: number;
137
+ createdBy?: import("convex/values").GenericId<"attendants"> | undefined;
138
+ estimatedWeight?: number | undefined;
139
+ actualWeight?: number | undefined;
140
+ itemCount?: number | undefined;
141
+ estimatedLoads?: number | undefined;
142
+ whitesSeparate?: boolean | undefined;
143
+ bagCardNumber?: string | undefined;
144
+ notes?: string | undefined;
145
+ deliveryAddress?: string | undefined;
146
+ deliveryPhoneNumber?: string | undefined;
147
+ deliveryHall?: string | undefined;
148
+ deliveryRoom?: string | undefined;
149
+ paymentMethod?: "mobile_money" | "card" | "cash" | undefined;
150
+ paymentId?: import("convex/values").GenericId<"payments"> | undefined;
151
+ fulfilledBy?: import("convex/values").GenericId<"attendants"> | undefined;
152
+ status: "pending" | "in_progress" | "ready_for_pickup" | "delivered" | "completed" | "cancelled";
153
+ createdAt: number;
154
+ isDeleted: boolean;
155
+ branchId: import("convex/values").GenericId<"branches">;
156
+ deliveryFee: number;
157
+ customerId: import("convex/values").GenericId<"users">;
158
+ customerPhoneNumber: string;
159
+ orderNumber: string;
160
+ orderType: "walk_in" | "online";
161
+ serviceType: "wash_only" | "wash_and_dry" | "dry_only";
162
+ isDelivery: boolean;
163
+ basePrice: number;
164
+ totalPrice: number;
165
+ finalPrice: number;
166
+ paymentStatus: "pending" | "paid" | "failed" | "refunded";
167
+ updatedAt: number;
168
+ statusHistory: {
169
+ notes?: string | undefined;
170
+ status: string;
171
+ changedAt: number;
172
+ changedBy: import("convex/values").GenericId<"attendants">;
173
+ }[];
174
+ }[];
175
+ isDone: boolean;
176
+ continueCursor: string;
177
+ }>>;
178
+ /**
179
+ * Get analytics dashboard data
180
+ */
181
+ export declare const getAnalytics: import("convex/server").RegisteredQuery<"public", {
182
+ branchId?: import("convex/values").GenericId<"branches"> | undefined;
183
+ startDate?: number | undefined;
184
+ endDate?: number | undefined;
185
+ }, Promise<{
186
+ totalOrders: number;
187
+ totalRevenue: number;
188
+ averageOrderValue: number;
189
+ ordersByStatus: Record<string, number>;
190
+ ordersByDay: Record<string, number>;
191
+ topCustomers: {
192
+ customerId: Id<"users">;
193
+ name: string;
194
+ phoneNumber: string;
195
+ orderCount: number;
196
+ }[];
197
+ dateRange: {
198
+ start: number | undefined;
199
+ end: number | undefined;
200
+ };
201
+ }>>;
202
+ /**
203
+ * Get all customers (with filters) - Paginated
204
+ * Supports usePaginatedQuery for infinite scroll
205
+ */
206
+ export declare const getCustomers: import("convex/server").RegisteredQuery<"public", {
207
+ isRegistered?: boolean | undefined;
208
+ status?: "active" | "blocked" | "suspended" | "restricted" | undefined;
209
+ search?: string | undefined;
210
+ paginationOpts: {
211
+ id?: number;
212
+ endCursor?: string | null;
213
+ maximumRowsRead?: number;
214
+ maximumBytesRead?: number;
215
+ numItems: number;
216
+ cursor: string | null;
217
+ };
218
+ }, Promise<{
219
+ page: {
220
+ orderCount: number;
221
+ completedOrderCount: number;
222
+ totalSpent: number;
223
+ lastOrderDate: number;
224
+ lastOrderNumber: string;
225
+ _id: import("convex/values").GenericId<"users">;
226
+ _creationTime: number;
227
+ email?: string | undefined;
228
+ clerkUserId?: string | undefined;
229
+ statusNote?: string | undefined;
230
+ statusChangedBy?: import("convex/values").GenericId<"admins"> | undefined;
231
+ statusChangedAt?: number | undefined;
232
+ lastLoginAt?: number | undefined;
233
+ preferredBranchId?: import("convex/values").GenericId<"branches"> | undefined;
234
+ phoneNumber: string;
235
+ name: string;
236
+ isRegistered: boolean;
237
+ isVerified: boolean;
238
+ status: "active" | "blocked" | "suspended" | "restricted";
239
+ createdAt: number;
240
+ isDeleted: boolean;
241
+ }[];
242
+ isDone: boolean;
243
+ continueCursor: string;
244
+ }>>;
245
+ /**
246
+ * Get customer statistics/aggregations
247
+ */
248
+ export declare const getCustomerStats: import("convex/server").RegisteredQuery<"public", {}, Promise<{
249
+ totalCustomers: number;
250
+ registeredCustomers: number;
251
+ walkInCustomers: number;
252
+ activeCustomers: number;
253
+ blockedCustomers: number;
254
+ suspendedCustomers: number;
255
+ restrictedCustomers: number;
256
+ verifiedCustomers: number;
257
+ customersWithActiveOrders: number;
258
+ totalRevenue: number;
259
+ }>>;
260
+ /**
261
+ * Change customer status (with required note)
262
+ */
263
+ export declare const changeCustomerStatus: import("convex/server").RegisteredMutation<"public", {
264
+ status: "active" | "blocked" | "suspended" | "restricted";
265
+ customerId: import("convex/values").GenericId<"users">;
266
+ note: string;
267
+ }, Promise<import("convex/values").GenericId<"users">>>;
268
+ /**
269
+ * Delete a customer (soft delete)
270
+ */
271
+ export declare const deleteCustomer: import("convex/server").RegisteredMutation<"public", {
272
+ customerId: import("convex/values").GenericId<"users">;
273
+ }, Promise<import("convex/values").GenericId<"users">>>;
274
+ /**
275
+ * Create new branch
276
+ */
277
+ export declare const createBranch: import("convex/server").RegisteredMutation<"public", {
278
+ email?: string | undefined;
279
+ phoneNumber: string;
280
+ name: string;
281
+ code: string;
282
+ address: string;
283
+ city: string;
284
+ country: string;
285
+ pricingPerKg: number;
286
+ deliveryFee: number;
287
+ }, Promise<import("convex/values").GenericId<"branches">>>;
288
+ /**
289
+ * Update branch details
290
+ */
291
+ export declare const updateBranch: import("convex/server").RegisteredMutation<"public", {
292
+ phoneNumber?: string | undefined;
293
+ email?: string | undefined;
294
+ name?: string | undefined;
295
+ isActive?: boolean | undefined;
296
+ code?: string | undefined;
297
+ address?: string | undefined;
298
+ city?: string | undefined;
299
+ country?: string | undefined;
300
+ pricingPerKg?: number | undefined;
301
+ deliveryFee?: number | undefined;
302
+ branchId: import("convex/values").GenericId<"branches">;
303
+ }, Promise<import("convex/values").GenericId<"branches">>>;
304
+ /**
305
+ * Toggle branch active status (enable/disable)
306
+ */
307
+ export declare const toggleBranchStatus: import("convex/server").RegisteredMutation<"public", {
308
+ branchId: import("convex/values").GenericId<"branches">;
309
+ }, Promise<{
310
+ branchId: import("convex/values").GenericId<"branches">;
311
+ isActive: boolean;
312
+ }>>;
313
+ /**
314
+ * Delete branch (soft delete)
315
+ */
316
+ export declare const deleteBranch: import("convex/server").RegisteredMutation<"public", {
317
+ branchId: import("convex/values").GenericId<"branches">;
318
+ }, Promise<import("convex/values").GenericId<"branches">>>;
319
+ /**
320
+ * Create attendant account
321
+ * Note: Clerk user must be created separately, then link clerkUserId
322
+ */
323
+ export declare const createAttendant: import("convex/server").RegisteredMutation<"public", {
324
+ passcode?: string | undefined;
325
+ phoneNumber: string;
326
+ email: string;
327
+ name: string;
328
+ clerkUserId: string;
329
+ branchId: import("convex/values").GenericId<"branches">;
330
+ }, Promise<import("convex/values").GenericId<"attendants">>>;
331
+ /**
332
+ * Update attendant details
333
+ */
334
+ export declare const updateAttendant: import("convex/server").RegisteredMutation<"public", {
335
+ phoneNumber?: string | undefined;
336
+ email?: string | undefined;
337
+ name?: string | undefined;
338
+ passcode?: string | undefined;
339
+ branchId?: import("convex/values").GenericId<"branches"> | undefined;
340
+ isActive?: boolean | undefined;
341
+ attendantId: import("convex/values").GenericId<"attendants">;
342
+ }, Promise<import("convex/values").GenericId<"attendants">>>;
343
+ /**
344
+ * Assign attendant to branch
345
+ */
346
+ export declare const assignAttendantToBranch: import("convex/server").RegisteredMutation<"public", {
347
+ branchId: import("convex/values").GenericId<"branches">;
348
+ attendantId: import("convex/values").GenericId<"attendants">;
349
+ }, Promise<import("convex/values").GenericId<"attendants">>>;
350
+ /**
351
+ * Delete attendant (soft delete)
352
+ */
353
+ export declare const deleteAttendant: import("convex/server").RegisteredMutation<"public", {
354
+ attendantId: import("convex/values").GenericId<"attendants">;
355
+ }, Promise<import("convex/values").GenericId<"attendants">>>;
356
+ /**
357
+ * Create admin account
358
+ * Only super admins can create other admins
359
+ * Note: Clerk user must be created separately, then link clerkUserId
360
+ */
361
+ export declare const createAdmin: import("convex/server").RegisteredMutation<"public", {
362
+ email: string;
363
+ name: string;
364
+ clerkUserId: string;
365
+ role: "super_admin" | "admin";
366
+ }, Promise<import("convex/values").GenericId<"admins">>>;
367
+ /**
368
+ * Create the first super admin (one-time setup)
369
+ * This function can only be used when no super admins exist in the database
370
+ * After the first super admin is created, use createAdmin instead
371
+ */
372
+ export declare const createFirstSuperAdmin: import("convex/server").RegisteredMutation<"public", {
373
+ email: string;
374
+ name: string;
375
+ clerkUserId: string;
376
+ }, Promise<import("convex/values").GenericId<"admins">>>;
377
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../convex/admin.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;GAMzB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;GA+BtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;UAuB1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;UAoBpB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;GAwCxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;GAqFvB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqFvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;GA6D3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;uDA2D/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;uDA6CzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;0DA+DvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;0DA2EvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;GAiC7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;0DAgDvB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;4DAiE1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;4DA6C1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;4DAuClC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;4DAgD1B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;wDAsDtB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;wDAqDhC,CAAC"}