kamau1 commited on
Commit
428eb7e
·
1 Parent(s): d692297

Fix incorrect relationship reference by replacing ticket_assignment with assignment across service and API layers

Browse files
docs/agent/thoughts/expenses.md ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Field Agent Expenses API
2
+
3
+ ## Endpoints
4
+
5
+ ### 1. Get My Stats
6
+ ```
7
+ GET /api/v1/ticket-expenses/my-stats?from_date=2024-11-01&to_date=2024-11-30
8
+ ```
9
+
10
+ **Response:**
11
+ ```json
12
+ {
13
+ "total_expenses": 25,
14
+ "total_amount": 12500.00,
15
+ "approved_count": 20,
16
+ "approved_amount": 10000.00,
17
+ "pending_count": 3,
18
+ "pending_amount": 1500.00,
19
+ "rejected_count": 2,
20
+ "rejected_amount": 1000.00,
21
+ "paid_count": 15,
22
+ "paid_amount": 7500.00,
23
+ "unpaid_count": 5,
24
+ "unpaid_amount": 2500.00,
25
+ "by_category": {
26
+ "transport": 5000.00,
27
+ "materials": 4000.00,
28
+ "meals": 1500.00
29
+ }
30
+ }
31
+ ```
32
+
33
+ ---
34
+
35
+ ### 2. Get My Expenses
36
+ ```
37
+ GET /api/v1/ticket-expenses/my-expenses?is_approved=false&page=1&page_size=50
38
+ ```
39
+
40
+ **Query Params:**
41
+ - `is_approved` (optional): `true` | `false`
42
+ - `is_paid` (optional): `true` | `false`
43
+ - `from_date` (optional): `YYYY-MM-DD`
44
+ - `to_date` (optional): `YYYY-MM-DD`
45
+ - `page` (default: 1)
46
+ - `page_size` (default: 100, max: 100)
47
+
48
+ **Response:**
49
+ ```json
50
+ {
51
+ "expenses": [
52
+ {
53
+ "id": "uuid",
54
+ "ticket_id": "uuid",
55
+ "ticket_reference": "TKT-001",
56
+ "ticket_title": "Install fiber at Westlands",
57
+ "ticket_status": "completed",
58
+ "ticket_assignment_id": "uuid",
59
+ "assignment_status": "completed",
60
+ "category": "transport",
61
+ "description": "Fuel for site visit",
62
+ "expense_date": "2024-11-15",
63
+ "total_cost": 500.00,
64
+ "quantity": 10.5,
65
+ "unit": "liters",
66
+ "unit_cost": 47.62,
67
+ "incurred_by_user_id": "uuid",
68
+ "incurred_by_user_name": "John Doe",
69
+ "is_approved": false,
70
+ "approved_by_user_id": null,
71
+ "approved_by_user_name": null,
72
+ "approved_at": null,
73
+ "rejection_reason": null,
74
+ "is_paid": false,
75
+ "paid_to_user_id": null,
76
+ "paid_to_user_name": null,
77
+ "paid_at": null,
78
+ "payment_reference": null,
79
+ "receipt_document_id": "uuid",
80
+ "location_verified": true,
81
+ "verification_notes": null,
82
+ "payment_recipient_type": "agent",
83
+ "payment_method": "send_money",
84
+ "payment_details": {
85
+ "phone_number": "+254712345678",
86
+ "recipient_name": "John Doe"
87
+ },
88
+ "notes": null,
89
+ "additional_metadata": {},
90
+ "created_at": "2024-11-15T10:00:00Z",
91
+ "updated_at": "2024-11-15T10:00:00Z"
92
+ }
93
+ ],
94
+ "total": 25,
95
+ "page": 1,
96
+ "page_size": 50,
97
+ "pages": 1
98
+ }
99
+ ```
100
+
101
+ ---
102
+
103
+ ## Expense Status States
104
+
105
+ **Pending Approval:**
106
+ - `is_approved: false`
107
+ - `rejection_reason: null`
108
+
109
+ **Rejected:**
110
+ - `is_approved: false`
111
+ - `rejection_reason: "reason text"`
112
+
113
+ **Approved (Unpaid):**
114
+ - `is_approved: true`
115
+ - `is_paid: false`
116
+
117
+ **Paid:**
118
+ - `is_approved: true`
119
+ - `is_paid: true`
120
+ - `paid_at: "timestamp"`
121
+ - `payment_reference: "ref"`
122
+
123
+ ---
124
+
125
+ ## Notes
126
+
127
+ - All endpoints auto-filter to current user
128
+ - Authorization handled by backend
129
+ - Amounts are in KES (Decimal type)
130
+ - Dates use ISO format
docs/devlogs/browser/browserconsole.txt CHANGED
@@ -1,143 +1,103 @@
1
- chunk-276SZO74.js?v=60545445:21551 Download the React DevTools for a better development experience: https://reactjs.org/link/react-devtools
2
  core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me
3
- react-router-dom.js?v=eea2f7f2:4393 ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition.
4
- warnOnce @ react-router-dom.js?v=eea2f7f2:4393
5
- logDeprecation @ react-router-dom.js?v=eea2f7f2:4396
6
- logV6DeprecationWarnings @ react-router-dom.js?v=eea2f7f2:4399
7
- (anonymous) @ react-router-dom.js?v=eea2f7f2:5271
8
- commitHookEffectListMount @ chunk-276SZO74.js?v=60545445:16915
9
- commitPassiveMountOnFiber @ chunk-276SZO74.js?v=60545445:18156
10
- commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=60545445:18129
11
- commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=60545445:18119
12
- commitPassiveMountEffects @ chunk-276SZO74.js?v=60545445:18109
13
- flushPassiveEffectsImpl @ chunk-276SZO74.js?v=60545445:19490
14
- flushPassiveEffects @ chunk-276SZO74.js?v=60545445:19447
15
- (anonymous) @ chunk-276SZO74.js?v=60545445:19328
16
- workLoop @ chunk-276SZO74.js?v=60545445:197
17
- flushWork @ chunk-276SZO74.js?v=60545445:176
18
- performWorkUntilDeadline @ chunk-276SZO74.js?v=60545445:384
19
- react-router-dom.js?v=eea2f7f2:4393 ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath.
20
- warnOnce @ react-router-dom.js?v=eea2f7f2:4393
21
- logDeprecation @ react-router-dom.js?v=eea2f7f2:4396
22
- logV6DeprecationWarnings @ react-router-dom.js?v=eea2f7f2:4402
23
- (anonymous) @ react-router-dom.js?v=eea2f7f2:5271
24
- commitHookEffectListMount @ chunk-276SZO74.js?v=60545445:16915
25
- commitPassiveMountOnFiber @ chunk-276SZO74.js?v=60545445:18156
26
- commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=60545445:18129
27
- commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=60545445:18119
28
- commitPassiveMountEffects @ chunk-276SZO74.js?v=60545445:18109
29
- flushPassiveEffectsImpl @ chunk-276SZO74.js?v=60545445:19490
30
- flushPassiveEffects @ chunk-276SZO74.js?v=60545445:19447
31
- (anonymous) @ chunk-276SZO74.js?v=60545445:19328
32
- workLoop @ chunk-276SZO74.js?v=60545445:197
33
- flushWork @ chunk-276SZO74.js?v=60545445:176
34
- performWorkUntilDeadline @ chunk-276SZO74.js?v=60545445:384
35
- core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me → 200 (1.54s)
36
- core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/inventory/my-stats
37
- core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/inventory/my-inventory?is_returned=false
38
  core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences
39
- core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/inventory/my-stats → 200 (1.32s)
40
- core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences 200 (1.31s)
41
- core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/inventory/my-inventory?is_returned=false → 200 (1.32s)
42
- core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions
43
- core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions 200 (658ms)
44
- core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/inventory/regions/4cd27765-5720-4cc0-872e-bf0da3cd1898/available
45
- core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/inventory/regions/4cd27765-5720-4cc0-872e-bf0da3cd1898/available → 200 (964ms)
46
- core.ts:167 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/inventory/assignments
47
- api-client.ts:124 POST https://kamau1-swiftops-backend.hf.space/api/v1/inventory/assignments 500 (Internal Server Error)
48
  request @ api-client.ts:124
49
- post @ api-client.ts:201
50
- collectInventory @ inventory.service.ts:200
51
- fn @ @tanstack_react-query.js?v=1e855d7b:1236
52
- run @ @tanstack_react-query.js?v=1e855d7b:513
53
- start @ @tanstack_react-query.js?v=1e855d7b:555
54
- execute @ @tanstack_react-query.js?v=1e855d7b:1272
55
- await in execute
56
- mutate @ @tanstack_react-query.js?v=1e855d7b:2692
57
- (anonymous) @ @tanstack_react-query.js?v=1e855d7b:3415
58
- handleSubmit @ CollectInventoryModal.tsx:75
59
- callCallback2 @ chunk-276SZO74.js?v=60545445:3674
60
- invokeGuardedCallbackDev @ chunk-276SZO74.js?v=60545445:3699
61
- invokeGuardedCallback @ chunk-276SZO74.js?v=60545445:3733
62
- invokeGuardedCallbackAndCatchFirstError @ chunk-276SZO74.js?v=60545445:3736
63
- executeDispatch @ chunk-276SZO74.js?v=60545445:7014
64
- processDispatchQueueItemsInOrder @ chunk-276SZO74.js?v=60545445:7034
65
- processDispatchQueue @ chunk-276SZO74.js?v=60545445:7043
66
- dispatchEventsForPlugins @ chunk-276SZO74.js?v=60545445:7051
67
- (anonymous) @ chunk-276SZO74.js?v=60545445:7174
68
- batchedUpdates$1 @ chunk-276SZO74.js?v=60545445:18913
69
- batchedUpdates @ chunk-276SZO74.js?v=60545445:3579
70
- dispatchEventForPluginEventSystem @ chunk-276SZO74.js?v=60545445:7173
71
- dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay @ chunk-276SZO74.js?v=60545445:5478
72
- dispatchEvent @ chunk-276SZO74.js?v=60545445:5472
73
- dispatchDiscreteEvent @ chunk-276SZO74.js?v=60545445:5449
74
- core.ts:167 POST https://kamau1-swiftops-backend.hf.space/api/v1/inventory/assignments500 (619ms)
75
- core.ts:167 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/inventory/assignments
76
- api-client.ts:124 POST https://kamau1-swiftops-backend.hf.space/api/v1/inventory/assignments 409 (Conflict)
77
  request @ api-client.ts:124
78
- post @ api-client.ts:201
79
- collectInventory @ inventory.service.ts:200
80
- fn @ @tanstack_react-query.js?v=1e855d7b:1236
81
- run @ @tanstack_react-query.js?v=1e855d7b:513
82
- (anonymous) @ @tanstack_react-query.js?v=1e855d7b:538
 
83
  Promise.then
84
- (anonymous) @ @tanstack_react-query.js?v=1e855d7b:534
85
  Promise.catch
86
- run @ @tanstack_react-query.js?v=1e855d7b:517
87
- start @ @tanstack_react-query.js?v=1e855d7b:555
88
- execute @ @tanstack_react-query.js?v=1e855d7b:1272
89
- await in execute
90
- mutate @ @tanstack_react-query.js?v=1e855d7b:2692
91
- (anonymous) @ @tanstack_react-query.js?v=1e855d7b:3415
92
- handleSubmit @ CollectInventoryModal.tsx:75
93
- callCallback2 @ chunk-276SZO74.js?v=60545445:3674
94
- invokeGuardedCallbackDev @ chunk-276SZO74.js?v=60545445:3699
95
- invokeGuardedCallback @ chunk-276SZO74.js?v=60545445:3733
96
- invokeGuardedCallbackAndCatchFirstError @ chunk-276SZO74.js?v=60545445:3736
97
- executeDispatch @ chunk-276SZO74.js?v=60545445:7014
98
- processDispatchQueueItemsInOrder @ chunk-276SZO74.js?v=60545445:7034
99
- processDispatchQueue @ chunk-276SZO74.js?v=60545445:7043
100
- dispatchEventsForPlugins @ chunk-276SZO74.js?v=60545445:7051
101
- (anonymous) @ chunk-276SZO74.js?v=60545445:7174
102
- batchedUpdates$1 @ chunk-276SZO74.js?v=60545445:18913
103
- batchedUpdates @ chunk-276SZO74.js?v=60545445:3579
104
- dispatchEventForPluginEventSystem @ chunk-276SZO74.js?v=60545445:7173
105
- dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay @ chunk-276SZO74.js?v=60545445:5478
106
- dispatchEvent @ chunk-276SZO74.js?v=60545445:5472
107
- dispatchDiscreteEvent @ chunk-276SZO74.js?v=60545445:5449
108
- core.ts:167 POST https://kamau1-swiftops-backend.hf.space/api/v1/inventory/assignments → 409 (356ms)
109
- chunk-276SZO74.js?v=60545445:521 Warning: Cannot update a component (`ForwardRef`) while rendering a different component (`ForwardRef`). To locate the bad setState() call inside `ForwardRef`, follow the stack trace as described in https://reactjs.org/link/setstate-in-render
110
- at http://localhost:8080/node_modules/.vite/deps/sonner.js?v=c0221b4e:269:17
111
- at Toaster (http://localhost:8080/src/components/ui/sonner.tsx:24:23)
112
- at Provider (http://localhost:8080/node_modules/.vite/deps/chunk-6JTMSBF5.js?v=60545445:38:15)
113
- at TooltipProvider (http://localhost:8080/node_modules/.vite/deps/@radix-ui_react-tooltip.js?v=fb41200b:64:5)
114
- at ThemeProvider (http://localhost:8080/src/contexts/ThemeProvider.tsx:29:33)
115
- at UserPreferencesProvider (http://localhost:8080/src/contexts/UserPreferencesContext.tsx:28:43)
116
- at QueryClientProvider (http://localhost:8080/node_modules/.vite/deps/@tanstack_react-query.js?v=1e855d7b:2934:3)
117
- at App (http://localhost:8080/src/App.tsx?t=1764593170068:157:35)
118
- printWarning @ chunk-276SZO74.js?v=60545445:521
119
- error @ chunk-276SZO74.js?v=60545445:505
120
- warnAboutRenderPhaseUpdatesInDEV @ chunk-276SZO74.js?v=60545445:19793
121
- scheduleUpdateOnFiber @ chunk-276SZO74.js?v=60545445:18546
122
- dispatchSetState @ chunk-276SZO74.js?v=60545445:12403
123
- (anonymous) @ sonner.js?v=c0221b4e:277
124
- (anonymous) @ sonner.js?v=c0221b4e:68
125
- dismiss @ sonner.js?v=c0221b4e:68
126
- (anonymous) @ sonner.js?v=c0221b4e:272
127
- basicStateReducer @ chunk-276SZO74.js?v=60545445:11703
128
- updateReducer @ chunk-276SZO74.js?v=60545445:11794
129
- updateState @ chunk-276SZO74.js?v=60545445:12021
130
- useState @ chunk-276SZO74.js?v=60545445:12753
131
- useState @ chunk-ZMLY2J2T.js?v=60545445:1066
132
- (anonymous) @ sonner.js?v=c0221b4e:269
133
- renderWithHooks @ chunk-276SZO74.js?v=60545445:11548
134
- updateForwardRef @ chunk-276SZO74.js?v=60545445:14325
135
- beginWork @ chunk-276SZO74.js?v=60545445:15946
136
- beginWork$1 @ chunk-276SZO74.js?v=60545445:19753
137
- performUnitOfWork @ chunk-276SZO74.js?v=60545445:19198
138
- workLoopSync @ chunk-276SZO74.js?v=60545445:19137
139
- renderRootSync @ chunk-276SZO74.js?v=60545445:19116
140
- performConcurrentWorkOnRoot @ chunk-276SZO74.js?v=60545445:18678
141
- workLoop @ chunk-276SZO74.js?v=60545445:197
142
- flushWork @ chunk-276SZO74.js?v=60545445:176
143
- performWorkUntilDeadline @ chunk-276SZO74.js?v=60545445:384
 
1
+ chunk-276SZO74.js?v=2abf537d:21551 Download the React DevTools for a better development experience: https://reactjs.org/link/react-devtools
2
  core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me
3
+ react-router-dom.js?v=81bf2224:4393 ⚠️ React Router Future Flag Warning: React Router will begin wrapping state updates in `React.startTransition` in v7. You can use the `v7_startTransition` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_starttransition.
4
+ warnOnce @ react-router-dom.js?v=81bf2224:4393
5
+ logDeprecation @ react-router-dom.js?v=81bf2224:4396
6
+ logV6DeprecationWarnings @ react-router-dom.js?v=81bf2224:4399
7
+ (anonymous) @ react-router-dom.js?v=81bf2224:5271
8
+ commitHookEffectListMount @ chunk-276SZO74.js?v=2abf537d:16915
9
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=2abf537d:18156
10
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=2abf537d:18129
11
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=2abf537d:18119
12
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=2abf537d:18109
13
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=2abf537d:19490
14
+ flushPassiveEffects @ chunk-276SZO74.js?v=2abf537d:19447
15
+ (anonymous) @ chunk-276SZO74.js?v=2abf537d:19328
16
+ workLoop @ chunk-276SZO74.js?v=2abf537d:197
17
+ flushWork @ chunk-276SZO74.js?v=2abf537d:176
18
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=2abf537d:384
19
+ react-router-dom.js?v=81bf2224:4393 ⚠️ React Router Future Flag Warning: Relative route resolution within Splat routes is changing in v7. You can use the `v7_relativeSplatPath` future flag to opt-in early. For more information, see https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath.
20
+ warnOnce @ react-router-dom.js?v=81bf2224:4393
21
+ logDeprecation @ react-router-dom.js?v=81bf2224:4396
22
+ logV6DeprecationWarnings @ react-router-dom.js?v=81bf2224:4402
23
+ (anonymous) @ react-router-dom.js?v=81bf2224:5271
24
+ commitHookEffectListMount @ chunk-276SZO74.js?v=2abf537d:16915
25
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=2abf537d:18156
26
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=2abf537d:18129
27
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=2abf537d:18119
28
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=2abf537d:18109
29
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=2abf537d:19490
30
+ flushPassiveEffects @ chunk-276SZO74.js?v=2abf537d:19447
31
+ (anonymous) @ chunk-276SZO74.js?v=2abf537d:19328
32
+ workLoop @ chunk-276SZO74.js?v=2abf537d:197
33
+ flushWork @ chunk-276SZO74.js?v=2abf537d:176
34
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=2abf537d:384
35
+ core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me → 200 (1.71s)
36
+ mockSupabase.ts:876 [Mock Realtime] Subscribed to channel: notifications
37
+ core.ts:117 ℹ️ [18:50:23] [COMPONENT] ProjectDashboardPage: Project dashboard loaded {projectId: '0ade6bd1-e492-4e25-b681-59f42058d29a', currentProject: 'Atomio Fttx'}
38
  core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences
39
+ core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences → 200 (934ms)
40
+ mockSupabase.ts:880 [Mock Realtime] Unsubscribed from channel: notifications
41
+ core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses/my-stats
42
+ core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses/my-expenses?page=1&page_size=20
43
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses/my-expenses?page=1&page_size=20 500 (Internal Server Error)
 
 
 
 
44
  request @ api-client.ts:124
45
+ get @ api-client.ts:190
46
+ getMyExpenses @ expenses.service.ts:77
47
+ queryFn @ FieldAgentExpenses.tsx:154
48
+ fetchFn @ @tanstack_react-query.js?v=aaa1d2ca:881
49
+ run @ @tanstack_react-query.js?v=aaa1d2ca:513
50
+ start @ @tanstack_react-query.js?v=aaa1d2ca:555
51
+ fetch @ @tanstack_react-query.js?v=aaa1d2ca:969
52
+ executeFetch_fn @ @tanstack_react-query.js?v=aaa1d2ca:2280
53
+ onSubscribe @ @tanstack_react-query.js?v=aaa1d2ca:1983
54
+ subscribe @ @tanstack_react-query.js?v=aaa1d2ca:24
55
+ (anonymous) @ @tanstack_react-query.js?v=aaa1d2ca:3147
56
+ subscribeToStore @ chunk-276SZO74.js?v=2abf537d:11984
57
+ commitHookEffectListMount @ chunk-276SZO74.js?v=2abf537d:16915
58
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=2abf537d:18156
59
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=2abf537d:18129
60
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=2abf537d:18119
61
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=2abf537d:18109
62
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=2abf537d:19490
63
+ flushPassiveEffects @ chunk-276SZO74.js?v=2abf537d:19447
64
+ commitRootImpl @ chunk-276SZO74.js?v=2abf537d:19416
65
+ commitRoot @ chunk-276SZO74.js?v=2abf537d:19277
66
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=2abf537d:18895
67
+ flushSyncCallbacks @ chunk-276SZO74.js?v=2abf537d:9119
68
+ (anonymous) @ chunk-276SZO74.js?v=2abf537d:18627
69
+ core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses/my-expenses?page=1&page_size=20 → 500 (1.54s)
70
+ core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses/my-stats200 (1.54s)
71
+ core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses/my-expenses?page=1&page_size=20
72
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses/my-expenses?page=1&page_size=20 500 (Internal Server Error)
73
  request @ api-client.ts:124
74
+ get @ api-client.ts:190
75
+ getMyExpenses @ expenses.service.ts:77
76
+ queryFn @ FieldAgentExpenses.tsx:154
77
+ fetchFn @ @tanstack_react-query.js?v=aaa1d2ca:881
78
+ run @ @tanstack_react-query.js?v=aaa1d2ca:513
79
+ (anonymous) @ @tanstack_react-query.js?v=aaa1d2ca:538
80
  Promise.then
81
+ (anonymous) @ @tanstack_react-query.js?v=aaa1d2ca:534
82
  Promise.catch
83
+ run @ @tanstack_react-query.js?v=aaa1d2ca:517
84
+ start @ @tanstack_react-query.js?v=aaa1d2ca:555
85
+ fetch @ @tanstack_react-query.js?v=aaa1d2ca:969
86
+ executeFetch_fn @ @tanstack_react-query.js?v=aaa1d2ca:2280
87
+ onSubscribe @ @tanstack_react-query.js?v=aaa1d2ca:1983
88
+ subscribe @ @tanstack_react-query.js?v=aaa1d2ca:24
89
+ (anonymous) @ @tanstack_react-query.js?v=aaa1d2ca:3147
90
+ subscribeToStore @ chunk-276SZO74.js?v=2abf537d:11984
91
+ commitHookEffectListMount @ chunk-276SZO74.js?v=2abf537d:16915
92
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=2abf537d:18156
93
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=2abf537d:18129
94
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=2abf537d:18119
95
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=2abf537d:18109
96
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=2abf537d:19490
97
+ flushPassiveEffects @ chunk-276SZO74.js?v=2abf537d:19447
98
+ commitRootImpl @ chunk-276SZO74.js?v=2abf537d:19416
99
+ commitRoot @ chunk-276SZO74.js?v=2abf537d:19277
100
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=2abf537d:18895
101
+ flushSyncCallbacks @ chunk-276SZO74.js?v=2abf537d:9119
102
+ (anonymous) @ chunk-276SZO74.js?v=2abf537d:18627
103
+ core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses/my-expenses?page=1&page_size=20 → 500 (323ms)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
docs/devlogs/server/runtimeerror.txt CHANGED
@@ -1,65 +1,458 @@
1
- ===== Application Startup at 2025-12-01 12:53:04 =====
2
 
3
- INFO: Started server process [8]
4
  INFO: Waiting for application startup.
5
- INFO: 2025-12-01T12:53:16 - app.main: ============================================================
6
- INFO: 2025-12-01T12:53:16 - app.main: 🚀 SwiftOps API v1.0.0 | PRODUCTION
7
- INFO: 2025-12-01T12:53:16 - app.main: 📊 Dashboard: Enabled
8
- INFO: 2025-12-01T12:53:16 - app.main: ============================================================
9
- INFO: 2025-12-01T12:53:16 - app.main: 📦 Database:
10
- INFO: 2025-12-01T12:53:16 - app.main: ✓ Connected | 45 tables | 6 users
11
- INFO: 2025-12-01T12:53:16 - app.main: 💾 Cache & Sessions:
12
- INFO: 2025-12-01T12:53:17 - app.services.otp_service: ✅ OTP Service initialized with Redis storage
13
- INFO: 2025-12-01T12:53:18 - app.main: ✓ Redis: Connected
14
- INFO: 2025-12-01T12:53:18 - app.main: 🔌 External Services:
15
- INFO: 2025-12-01T12:53:18 - app.main: ✓ Cloudinary: Connected
16
- INFO: 2025-12-01T12:53:18 - app.main: ✓ Resend: Configured
17
- INFO: 2025-12-01T12:53:18 - app.main: ○ WASender: Failed
18
- INFO: 2025-12-01T12:53:18 - app.main: ✓ Supabase: Connected | 6 buckets
19
- INFO: 2025-12-01T12:53:18 - app.main: ============================================================
20
- INFO: 2025-12-01T12:53:18 - app.main: ✅ Startup complete | Ready to serve requests
21
- INFO: 2025-12-01T12:53:18 - app.main: ============================================================
22
  INFO: Application startup complete.
23
  INFO: Uvicorn running on http://0.0.0.0:7860 (Press CTRL+C to quit)
24
- INFO: 10.16.2.97:8592 - "GET /health HTTP/1.1" 200 OK
25
- INFO: 10.16.21.26:53392 - "GET /health HTTP/1.1" 200 OK
26
- INFO: 10.16.34.155:20639 - "GET /health HTTP/1.1" 200 OK
27
- INFO: 10.16.34.155:47810 - "GET /health HTTP/1.1" 200 OK
28
- INFO: 10.16.25.209:51857 - "GET /health HTTP/1.1" 200 OK
29
- INFO: 10.16.21.26:53015 - "GET /health HTTP/1.1" 200 OK
30
- INFO: 2025-12-01T12:54:44 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
31
- INFO: 2025-12-01T12:54:44 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
32
- INFO: 10.16.11.176:9745 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
33
- INFO: 2025-12-01T12:54:44 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
34
- INFO: 2025-12-01T12:54:44 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
35
- INFO: 10.16.34.155:29435 - "GET /api/v1/inventory/my-stats HTTP/1.1" 200 OK
36
- INFO: 2025-12-01T12:54:45 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
37
- INFO: 2025-12-01T12:54:45 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
38
- INFO: 10.16.11.176:9745 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
39
- INFO: 2025-12-01T12:54:45 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
40
- INFO: 2025-12-01T12:54:45 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
41
- INFO: 10.16.25.209:43786 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
42
- INFO: 2025-12-01T12:54:45 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
43
- INFO: 2025-12-01T12:54:45 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
44
- INFO: 10.16.2.97:30178 - "GET /api/v1/inventory/my-inventory?is_returned=false HTTP/1.1" 200 OK
45
- INFO: 10.16.2.97:30178 - "GET /health HTTP/1.1" 200 OK
46
- INFO: 2025-12-01T12:54:49 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
47
- INFO: 2025-12-01T12:54:49 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
48
- INFO: 10.16.2.97:30178 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions HTTP/1.1" 200 OK
49
- INFO: 2025-12-01T12:54:52 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
50
- INFO: 2025-12-01T12:54:52 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
51
- INFO: 10.16.25.209:47394 - "GET /api/v1/inventory/regions/4cd27765-5720-4cc0-872e-bf0da3cd1898/available HTTP/1.1" 200 OK
52
- INFO: 2025-12-01T12:55:03 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
53
- INFO: 2025-12-01T12:55:03 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
54
- INFO: 2025-12-01T12:55:03 - app.services.inventory_service: Created assignment: fda20452-f794-415e-90a3-35b39ca99acf for user 43b778b0-2062-4724-abbb-916a4835a9b0 (recorded by 43b778b0-2062-4724-abbb-916a4835a9b0)
55
- INFO: 2025-12-01T12:55:03 - app.services.audit_service: Audit log created: create on inventory_assignment by viyisa8151@feralrex.com
56
- ERROR: 2025-12-01T12:55:03 - app.api.v1.inventory: Error creating assignment: 1 validation error for AssignmentResponse
57
- days_issued
58
- Error extracting attribute: TypeError: can't subtract offset-naive and offset-aware datetimes [type=get_attribute_error, input_value=<InventoryAssignment(id=f...835a9b0, status=issued)>, input_type=InventoryAssignment]
59
- For further information visit https://errors.pydantic.dev/2.5/v/get_attribute_error
60
- INFO: 10.16.25.209:4425 - "POST /api/v1/inventory/assignments HTTP/1.1" 500 Internal Server Error
61
- INFO: 2025-12-01T12:55:05 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
62
- INFO: 2025-12-01T12:55:05 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
63
- INFO: 10.16.25.209:4425 - "POST /api/v1/inventory/assignments HTTP/1.1" 409 Conflict
64
- INFO: 10.16.25.209:47376 - "GET /health HTTP/1.1" 200 OK
65
- INFO: 10.16.34.155:25814 - "GET /health HTTP/1.1" 200 OK
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ===== Application Startup at 2025-12-01 14:03:18 =====
2
 
3
+ INFO: Started server process [7]
4
  INFO: Waiting for application startup.
5
+ INFO: 2025-12-01T14:03:41 - app.main: ============================================================
6
+ INFO: 2025-12-01T14:03:41 - app.main: 🚀 SwiftOps API v1.0.0 | PRODUCTION
7
+ INFO: 2025-12-01T14:03:41 - app.main: 📊 Dashboard: Enabled
8
+ INFO: 2025-12-01T14:03:41 - app.main: ============================================================
9
+ INFO: 2025-12-01T14:03:41 - app.main: 📦 Database:
10
+ INFO: 2025-12-01T14:03:42 - app.main: ✓ Connected | 45 tables | 6 users
11
+ INFO: 2025-12-01T14:03:42 - app.main: 💾 Cache & Sessions:
12
+ INFO: 2025-12-01T14:03:43 - app.services.otp_service: ✅ OTP Service initialized with Redis storage
13
+ INFO: 2025-12-01T14:03:43 - app.main: ✓ Redis: Connected
14
+ INFO: 2025-12-01T14:03:43 - app.main: 🔌 External Services:
15
+ INFO: 2025-12-01T14:03:44 - app.main: ✓ Cloudinary: Connected
16
+ INFO: 2025-12-01T14:03:44 - app.main: ✓ Resend: Configured
17
+ INFO: 2025-12-01T14:03:44 - app.main: ○ WASender: Failed
18
+ INFO: 2025-12-01T14:03:44 - app.main: ✓ Supabase: Connected | 6 buckets
19
+ INFO: 2025-12-01T14:03:44 - app.main: ============================================================
20
+ INFO: 2025-12-01T14:03:44 - app.main: ✅ Startup complete | Ready to serve requests
21
+ INFO: 2025-12-01T14:03:44 - app.main: ============================================================
22
  INFO: Application startup complete.
23
  INFO: Uvicorn running on http://0.0.0.0:7860 (Press CTRL+C to quit)
24
+ INFO: 10.16.2.97:62216 - "GET /health HTTP/1.1" 200 OK
25
+ INFO: 10.16.34.155:56805 - "GET /health HTTP/1.1" 200 OK
26
+ INFO: 10.16.21.26:30413 - "GET / HTTP/1.1" 200 OK
27
+ INFO: 2025-12-01T16:15:32 - app.core.supabase_auth: Session refreshed successfully
28
+ INFO: 2025-12-01T16:15:33 - app.api.v1.auth: Token refreshed successfully for: nadina73@nembors.com
29
+ INFO: 10.16.2.97:29213 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
30
+ INFO: 2025-12-01T16:15:35 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
31
+ INFO: 2025-12-01T16:15:35 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
32
+ INFO: 10.16.21.26:40172 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
33
+ INFO: 2025-12-01T16:15:36 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
34
+ INFO: 2025-12-01T16:15:36 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
35
+ INFO: 2025-12-01T16:15:36 - app.services.dashboard_service: Dashboard cache MISS for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user c5cf92be-4172-4fe2-af5c-f05d83b3a938 - building fresh data
36
+ INFO: 2025-12-01T16:15:39 - app.services.dashboard_service: Built and cached dashboard for project 0ade6bd1-e492-4e25-b681-59f42058d29a
37
+ INFO: 10.16.34.155:10171 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
38
+ INFO: 2025-12-01T16:15:39 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
39
+ INFO: 2025-12-01T16:15:39 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
40
+ INFO: 10.16.21.26:20476 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
41
+ INFO: 2025-12-01T16:15:39 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
42
+ INFO: 2025-12-01T16:15:39 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
43
+ INFO: 10.16.21.26:3265 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
44
+ INFO: 10.16.21.26:40172 - "GET /api/v1/notifications?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page_size=50 HTTP/1.1" 200 OK
45
+ INFO: 10.16.2.97:25563 - "GET /api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 200 OK
46
+ INFO: 10.16.21.26:17487 - "GET /health HTTP/1.1" 200 OK
47
+ INFO: 10.16.21.26:61643 - "GET /health HTTP/1.1" 200 OK
48
+ INFO: 10.16.21.26:21840 - "GET /health HTTP/1.1" 200 OK
49
+ INFO: 10.16.2.97:26773 - "GET /health HTTP/1.1" 200 OK
50
+ INFO: 10.16.2.97:48888 - "GET /health HTTP/1.1" 200 OK
51
+ INFO: 10.16.34.155:20997 - "GET /health HTTP/1.1" 200 OK
52
+ INFO: 10.16.34.155:3714 - "GET /health HTTP/1.1" 200 OK
53
+ INFO: 10.16.25.209:54075 - "GET /health HTTP/1.1" 200 OK
54
+ INFO: 10.16.11.176:44508 - "GET /health HTTP/1.1" 200 OK
55
+ INFO: 10.16.25.209:15719 - "GET /health HTTP/1.1" 200 OK
56
+ INFO: 10.16.11.176:11942 - "GET /health HTTP/1.1" 200 OK
57
+ INFO: 10.16.11.176:19725 - "GET /health HTTP/1.1" 200 OK
58
+ INFO: 10.16.11.176:7453 - "GET /health HTTP/1.1" 200 OK
59
+ INFO: 10.16.25.209:9792 - "GET /health HTTP/1.1" 200 OK
60
+ INFO: 10.16.11.176:42111 - "GET /health HTTP/1.1" 200 OK
61
+ INFO: 10.16.25.209:27460 - "GET /health HTTP/1.1" 200 OK
62
+ INFO: 10.16.25.209:12411 - "GET /health HTTP/1.1" 200 OK
63
+ INFO: 10.16.25.209:46414 - "GET /health HTTP/1.1" 200 OK
64
+ INFO: 10.16.34.155:56769 - "GET /health HTTP/1.1" 200 OK
65
+ INFO: 10.16.34.155:47018 - "GET /health HTTP/1.1" 200 OK
66
+ INFO: 10.16.25.209:37773 - "GET /health HTTP/1.1" 200 OK
67
+ INFO: 10.16.34.155:43195 - "GET /health HTTP/1.1" 200 OK
68
+ INFO: 10.16.21.26:5331 - "GET /robots.txt HTTP/1.1" 404 Not Found
69
+ INFO: 10.16.25.209:16958 - "GET /health HTTP/1.1" 200 OK
70
+ INFO: 10.16.34.155:43234 - "GET /health HTTP/1.1" 200 OK
71
+ INFO: 10.16.11.176:35164 - "GET /health HTTP/1.1" 200 OK
72
+ INFO: 10.16.2.97:37068 - "GET /health HTTP/1.1" 200 OK
73
+ INFO: 10.16.21.26:36061 - "GET /health HTTP/1.1" 200 OK
74
+ INFO: 10.16.25.209:30083 - "GET /health HTTP/1.1" 200 OK
75
+ INFO: 10.16.2.97:15115 - "GET /health HTTP/1.1" 200 OK
76
+ INFO: 10.16.11.176:12784 - "GET /health HTTP/1.1" 200 OK
77
+ INFO: 10.16.34.155:21268 - "GET /health HTTP/1.1" 200 OK
78
+ INFO: 10.16.25.209:39389 - "GET /health HTTP/1.1" 200 OK
79
+ INFO: 10.16.25.209:1486 - "GET /health HTTP/1.1" 200 OK
80
+ INFO: 10.16.21.26:31310 - "GET /health HTTP/1.1" 200 OK
81
+ INFO: 10.16.34.155:32394 - "GET /health HTTP/1.1" 200 OK
82
+ INFO: 10.16.21.26:1872 - "GET /health HTTP/1.1" 200 OK
83
+ INFO: 10.16.25.209:48837 - "GET /health HTTP/1.1" 200 OK
84
+ INFO: 10.16.25.209:44565 - "GET /health HTTP/1.1" 200 OK
85
+ INFO: 10.16.34.155:2561 - "GET /health HTTP/1.1" 200 OK
86
+ INFO: 10.16.11.176:13290 - "GET /health HTTP/1.1" 200 OK
87
+ INFO: 10.16.25.209:49269 - "GET /health HTTP/1.1" 200 OK
88
+ INFO: 10.16.34.155:55785 - "GET /health HTTP/1.1" 200 OK
89
+ INFO: 10.16.21.26:65135 - "GET /health HTTP/1.1" 200 OK
90
+ INFO: 10.16.34.155:57475 - "GET /health HTTP/1.1" 200 OK
91
+ INFO: 10.16.25.209:2628 - "GET /health HTTP/1.1" 200 OK
92
+ INFO: 10.16.21.26:37113 - "GET /health HTTP/1.1" 200 OK
93
+ INFO: 10.16.11.176:38120 - "GET /health HTTP/1.1" 200 OK
94
+ INFO: 10.16.25.209:34435 - "GET /health HTTP/1.1" 200 OK
95
+ INFO: 10.16.11.176:42651 - "GET /health HTTP/1.1" 200 OK
96
+ INFO: 10.16.34.155:62298 - "GET /health HTTP/1.1" 200 OK
97
+ INFO: 10.16.11.176:49961 - "GET /health HTTP/1.1" 200 OK
98
+ INFO: 10.16.2.97:6783 - "GET /health HTTP/1.1" 200 OK
99
+ INFO: 10.16.34.155:50134 - "GET /health HTTP/1.1" 200 OK
100
+ INFO: 10.16.34.155:56453 - "GET /health HTTP/1.1" 200 OK
101
+ INFO: 2025-12-01T17:10:36 - app.core.supabase_auth: Session refreshed successfully
102
+ INFO: 2025-12-01T17:10:36 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
103
+ INFO: 10.16.25.209:35296 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
104
+ INFO: 10.16.2.97:13308 - "GET /health HTTP/1.1" 200 OK
105
+ INFO: 10.16.30.4:11466 - "GET /health HTTP/1.1" 200 OK
106
+ INFO: 10.16.21.26:5777 - "GET /health HTTP/1.1" 200 OK
107
+ INFO: 10.16.36.142:33075 - "GET /health HTTP/1.1" 200 OK
108
+ INFO: 10.16.30.4:56505 - "GET /health HTTP/1.1" 200 OK
109
+ INFO: 10.16.9.139:64925 - "GET /health HTTP/1.1" 200 OK
110
+ INFO: 10.16.36.142:39881 - "GET /health HTTP/1.1" 200 OK
111
+ INFO: 10.16.30.4:59548 - "GET /health HTTP/1.1" 200 OK
112
+ INFO: 10.16.30.4:53887 - "GET /health HTTP/1.1" 200 OK
113
+ INFO: 10.16.36.142:47567 - "GET /health HTTP/1.1" 200 OK
114
+ INFO: 10.16.30.4:1905 - "GET /health HTTP/1.1" 200 OK
115
+ INFO: 10.16.36.142:62416 - "GET /health HTTP/1.1" 200 OK
116
+ INFO: 10.16.36.142:25628 - "GET /health HTTP/1.1" 200 OK
117
+ INFO: 10.16.30.4:15051 - "GET /health HTTP/1.1" 200 OK
118
+ INFO: 10.16.9.139:56602 - "GET /health HTTP/1.1" 200 OK
119
+ INFO: 10.16.43.133:50111 - "GET /health HTTP/1.1" 200 OK
120
+ INFO: 10.16.9.139:54801 - "GET /health HTTP/1.1" 200 OK
121
+ INFO: 10.16.43.133:26007 - "GET /health HTTP/1.1" 200 OK
122
+ INFO: 10.16.36.142:26758 - "GET /health HTTP/1.1" 200 OK
123
+ INFO: 10.16.2.14:8311 - "GET /health HTTP/1.1" 200 OK
124
+ INFO: 10.16.30.4:45027 - "GET /health HTTP/1.1" 200 OK
125
+ INFO: 10.16.30.4:42107 - "GET /health HTTP/1.1" 200 OK
126
+ INFO: 10.16.2.14:28209 - "GET /health HTTP/1.1" 200 OK
127
+ INFO: 10.16.2.14:39198 - "GET /health HTTP/1.1" 200 OK
128
+ INFO: 10.16.2.14:64532 - "GET /health HTTP/1.1" 200 OK
129
+ INFO: 10.16.2.14:61193 - "GET /health HTTP/1.1" 200 OK
130
+ INFO: 10.16.30.4:6179 - "GET /health HTTP/1.1" 200 OK
131
+ INFO: 10.16.9.139:13948 - "GET /health HTTP/1.1" 200 OK
132
+ INFO: 10.16.36.142:10879 - "GET /health HTTP/1.1" 200 OK
133
+ INFO: 10.16.30.4:39231 - "GET /health HTTP/1.1" 200 OK
134
+ INFO: 10.16.2.14:38084 - "GET /health HTTP/1.1" 200 OK
135
+ INFO: 10.16.9.139:53230 - "GET /health HTTP/1.1" 200 OK
136
+ INFO: 10.16.30.4:54683 - "GET /health HTTP/1.1" 200 OK
137
+ INFO: 10.16.36.142:45677 - "GET /health HTTP/1.1" 200 OK
138
+ INFO: 10.16.2.14:31785 - "GET /health HTTP/1.1" 200 OK
139
+ INFO: 10.16.36.142:33298 - "GET /health HTTP/1.1" 200 OK
140
+ INFO: 10.16.9.139:23245 - "GET /health HTTP/1.1" 200 OK
141
+ INFO: 10.16.30.4:58132 - "GET /health HTTP/1.1" 200 OK
142
+ INFO: 10.16.2.14:29038 - "GET /health HTTP/1.1" 200 OK
143
+ INFO: 10.16.30.4:32585 - "GET /health HTTP/1.1" 200 OK
144
+ INFO: 10.16.30.4:3431 - "GET /health HTTP/1.1" 200 OK
145
+ INFO: 10.16.9.139:1109 - "GET /health HTTP/1.1" 200 OK
146
+ INFO: 10.16.2.14:52280 - "GET /health HTTP/1.1" 200 OK
147
+ INFO: 10.16.36.142:38018 - "GET /health HTTP/1.1" 200 OK
148
+ INFO: 10.16.36.142:30373 - "GET /health HTTP/1.1" 200 OK
149
+ INFO: 10.16.36.142:30617 - "GET /health HTTP/1.1" 200 OK
150
+ INFO: 10.16.30.4:21257 - "GET /health HTTP/1.1" 200 OK
151
+ INFO: 10.16.9.139:38086 - "GET /health HTTP/1.1" 200 OK
152
+ INFO: 10.16.34.155:29566 - "GET /health HTTP/1.1" 200 OK
153
+ INFO: 10.16.9.139:15953 - "GET /health HTTP/1.1" 200 OK
154
+ INFO: 10.16.18.114:64196 - "GET /health HTTP/1.1" 200 OK
155
+ INFO: 10.16.34.155:64925 - "GET /health HTTP/1.1" 200 OK
156
+ INFO: 10.16.30.4:57058 - "GET /health HTTP/1.1" 200 OK
157
+ INFO: 10.16.30.4:27774 - "GET /health HTTP/1.1" 200 OK
158
+ INFO: 10.16.30.4:16994 - "GET /health HTTP/1.1" 200 OK
159
+ INFO: 2025-12-01T18:05:37 - app.core.supabase_auth: Session refreshed successfully
160
+ INFO: 2025-12-01T18:05:38 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
161
+ INFO: 10.16.30.4:45522 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
162
+ INFO: 10.16.30.4:52919 - "GET /health HTTP/1.1" 200 OK
163
+ INFO: 10.16.2.97:14091 - "GET /health HTTP/1.1" 200 OK
164
+ INFO: 10.16.2.97:15012 - "GET /health HTTP/1.1" 200 OK
165
+ INFO: 10.16.2.97:23920 - "GET /health HTTP/1.1" 200 OK
166
+ INFO: 10.16.2.97:40940 - "GET /health HTTP/1.1" 200 OK
167
+ INFO: 10.16.30.4:23598 - "GET /health HTTP/1.1" 200 OK
168
+ INFO: 2025-12-01T18:10:37 - app.core.supabase_auth: Session refreshed successfully
169
+ INFO: 2025-12-01T18:10:37 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
170
+ INFO: 10.16.30.4:23598 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
171
+ INFO: 2025-12-01T18:10:38 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
172
+ INFO: 2025-12-01T18:10:38 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
173
+ INFO: 10.16.30.4:23598 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
174
+ INFO: 2025-12-01T18:10:40 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
175
+ INFO: 2025-12-01T18:10:40 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
176
+ INFO: 2025-12-01T18:10:40 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
177
+ INFO: 2025-12-01T18:10:40 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
178
+ INFO: 10.16.30.4:23598 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
179
+ INFO: 2025-12-01T18:10:40 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
180
+ INFO: 2025-12-01T18:10:40 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
181
+ INFO: 10.16.2.97:52997 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
182
+ INFO: 10.16.2.97:3472 - "GET /api/v1/analytics/user/overview?limit=50 HTTP/1.1" 200 OK
183
+ INFO: 2025-12-01T18:10:41 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
184
+ INFO: 2025-12-01T18:10:41 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
185
+ INFO: 10.16.30.4:23598 - "GET /api/v1/projects?page=1&per_page=100&status=active HTTP/1.1" 200 OK
186
+ INFO: 10.16.2.97:18997 - "GET /health HTTP/1.1" 200 OK
187
+ INFO: 2025-12-01T18:11:34 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
188
+ INFO: 2025-12-01T18:11:34 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
189
+ INFO: 2025-12-01T18:11:34 - app.services.dashboard_service: Dashboard cache MISS for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user 43b778b0-2062-4724-abbb-916a4835a9b0 - building fresh data
190
+ INFO: 2025-12-01T18:11:34 - app.services.dashboard_service: Built and cached dashboard for project 0ade6bd1-e492-4e25-b681-59f42058d29a
191
+ INFO: 10.16.2.97:17865 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
192
+ INFO: 10.16.30.4:1360 - "GET /health HTTP/1.1" 200 OK
193
+ INFO: 10.16.2.97:53805 - "GET /health HTTP/1.1" 200 OK
194
+ INFO: 10.16.2.97:42659 - "GET /health HTTP/1.1" 200 OK
195
+ INFO: 10.16.30.4:52033 - "GET /health HTTP/1.1" 200 OK
196
+ INFO: 10.16.2.97:17400 - "GET /health HTTP/1.1" 200 OK
197
+ INFO: 10.16.2.97:33116 - "GET /health HTTP/1.1" 200 OK
198
+ INFO: 10.16.30.4:27699 - "GET /health HTTP/1.1" 200 OK
199
+ INFO: 10.16.2.97:38645 - "GET /health HTTP/1.1" 200 OK
200
+ INFO: 10.16.30.4:48003 - "GET /health HTTP/1.1" 200 OK
201
+ INFO: 10.16.2.97:22631 - "GET /health HTTP/1.1" 200 OK
202
+ INFO: 10.16.2.97:63887 - "GET /health HTTP/1.1" 200 OK
203
+ INFO: 10.16.30.4:9948 - "GET /health HTTP/1.1" 200 OK
204
+ INFO: 10.16.30.4:17088 - "GET /health HTTP/1.1" 200 OK
205
+ INFO: 10.16.30.4:40858 - "GET /health HTTP/1.1" 200 OK
206
+ INFO: 10.16.2.97:9627 - "GET /health HTTP/1.1" 200 OK
207
+ INFO: 10.16.2.97:51287 - "GET /health HTTP/1.1" 200 OK
208
+ INFO: 10.16.34.155:5192 - "GET /health HTTP/1.1" 200 OK
209
+ INFO: 10.16.30.4:53996 - "GET /health HTTP/1.1" 200 OK
210
+ INFO: 10.16.30.4:13796 - "GET /health HTTP/1.1" 200 OK
211
+ INFO: 2025-12-01T18:24:14 - app.core.supabase_auth: Session refreshed successfully
212
+ INFO: 2025-12-01T18:24:14 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
213
+ INFO: 10.16.34.155:40302 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
214
+ INFO: 2025-12-01T18:24:15 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
215
+ INFO: 2025-12-01T18:24:15 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
216
+ INFO: 10.16.2.97:32308 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
217
+ INFO: 2025-12-01T18:24:17 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
218
+ INFO: 2025-12-01T18:24:17 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
219
+ INFO: 10.16.34.155:40302 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
220
+ INFO: 2025-12-01T18:24:17 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
221
+ INFO: 2025-12-01T18:24:17 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
222
+ INFO: 2025-12-01T18:24:17 - app.services.dashboard_service: Dashboard cache MISS for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user 43b778b0-2062-4724-abbb-916a4835a9b0 - building fresh data
223
+ INFO: 2025-12-01T18:24:18 - app.services.dashboard_service: Built and cached dashboard for project 0ade6bd1-e492-4e25-b681-59f42058d29a
224
+ INFO: 10.16.30.4:39279 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
225
+ INFO: 2025-12-01T18:24:18 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
226
+ INFO: 2025-12-01T18:24:18 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
227
+ INFO: 10.16.34.155:26572 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
228
+ INFO: 10.16.34.155:26572 - "GET /health HTTP/1.1" 200 OK
229
+ INFO: 10.16.30.4:37291 - "GET /health HTTP/1.1" 200 OK
230
+ INFO: 2025-12-01T18:25:02 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
231
+ INFO: 2025-12-01T18:25:02 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
232
+ INFO: 10.16.34.155:52308 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
233
+ INFO: 10.16.30.4:40119 - "GET /health HTTP/1.1" 200 OK
234
+ INFO: 2025-12-01T18:25:03 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
235
+ INFO: 2025-12-01T18:25:03 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
236
+ INFO: 2025-12-01T18:25:03 - app.services.dashboard_service: Dashboard cache HIT for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user 43b778b0-2062-4724-abbb-916a4835a9b0
237
+ INFO: 10.16.34.155:52308 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
238
+ INFO: 2025-12-01T18:25:03 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
239
+ INFO: 2025-12-01T18:25:03 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
240
+ INFO: 10.16.34.155:56009 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
241
+ INFO: 2025-12-01T18:25:03 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
242
+ INFO: 2025-12-01T18:25:03 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
243
+ INFO: 10.16.34.155:38091 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
244
+ INFO: 10.16.2.97:10036 - "GET /health HTTP/1.1" 200 OK
245
+ INFO: 10.16.30.4:53797 - "GET /health HTTP/1.1" 200 OK
246
+ INFO: 10.16.30.4:58884 - "GET /health HTTP/1.1" 200 OK
247
+ INFO: 10.16.30.4:19711 - "GET /health HTTP/1.1" 200 OK
248
+ INFO: 10.16.30.4:30932 - "GET /health HTTP/1.1" 200 OK
249
+ INFO: 10.16.30.4:43834 - "GET /health HTTP/1.1" 200 OK
250
+ INFO: 10.16.34.155:47288 - "GET /health HTTP/1.1" 200 OK
251
+ INFO: 10.16.34.155:29225 - "GET /health HTTP/1.1" 200 OK
252
+ INFO: 10.16.34.155:40779 - "GET /health HTTP/1.1" 200 OK
253
+ INFO: 10.16.34.155:39933 - "GET /health HTTP/1.1" 200 OK
254
+ INFO: 10.16.34.155:56728 - "GET /health HTTP/1.1" 200 OK
255
+ INFO: 10.16.34.155:22611 - "GET /health HTTP/1.1" 200 OK
256
+ INFO: 10.16.34.155:34029 - "GET /health HTTP/1.1" 200 OK
257
+ INFO: 10.16.30.4:7221 - "GET /health HTTP/1.1" 200 OK
258
+ INFO: 10.16.34.155:65255 - "GET /health HTTP/1.1" 200 OK
259
+ INFO: 10.16.30.4:4165 - "GET /health HTTP/1.1" 200 OK
260
+ INFO: 10.16.30.4:15800 - "GET /health HTTP/1.1" 200 OK
261
+ INFO: 10.16.34.155:61155 - "GET /health HTTP/1.1" 200 OK
262
+ INFO: 10.16.30.4:62833 - "GET /health HTTP/1.1" 200 OK
263
+ INFO: 10.16.30.4:62833 - "GET /health HTTP/1.1" 200 OK
264
+ INFO: 10.16.30.4:6505 - "GET /health HTTP/1.1" 200 OK
265
+ INFO: 10.16.30.4:7591 - "GET /health HTTP/1.1" 200 OK
266
+ INFO: 10.16.34.155:2909 - "GET /health HTTP/1.1" 200 OK
267
+ INFO: 2025-12-01T18:34:58 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
268
+ INFO: 2025-12-01T18:34:58 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
269
+ INFO: 10.16.34.155:2909 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
270
+ INFO: 2025-12-01T18:34:59 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
271
+ INFO: 2025-12-01T18:34:59 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
272
+ INFO: 10.16.34.155:2909 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
273
+ INFO: 2025-12-01T18:34:59 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
274
+ INFO: 2025-12-01T18:34:59 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
275
+ INFO: 2025-12-01T18:34:59 - app.services.dashboard_service: Dashboard cache MISS for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user 43b778b0-2062-4724-abbb-916a4835a9b0 - building fresh data
276
+ INFO: 2025-12-01T18:34:59 - app.services.dashboard_service: Built and cached dashboard for project 0ade6bd1-e492-4e25-b681-59f42058d29a
277
+ INFO: 10.16.30.4:21174 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
278
+ INFO: 2025-12-01T18:34:59 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
279
+ INFO: 2025-12-01T18:34:59 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
280
+ INFO: 10.16.34.155:2909 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
281
+ INFO: 10.16.34.155:32860 - "GET /health HTTP/1.1" 200 OK
282
+ INFO: 10.16.30.4:9355 - "GET /health HTTP/1.1" 200 OK
283
+ INFO: 10.16.34.155:2353 - "GET /health HTTP/1.1" 200 OK
284
+ INFO: 10.16.30.4:12615 - "GET /health HTTP/1.1" 200 OK
285
+ INFO: 10.16.34.155:6293 - "GET /health HTTP/1.1" 200 OK
286
+ INFO: 10.16.34.155:14820 - "GET /health HTTP/1.1" 200 OK
287
+ INFO: 10.16.34.155:22913 - "GET /health HTTP/1.1" 200 OK
288
+ INFO: 10.16.34.155:28526 - "GET /health HTTP/1.1" 200 OK
289
+ INFO: 10.16.34.155:33400 - "GET /health HTTP/1.1" 200 OK
290
+ INFO: 10.16.30.4:39126 - "GET /health HTTP/1.1" 200 OK
291
+ INFO: 10.16.30.4:64135 - "GET /health HTTP/1.1" 200 OK
292
+ INFO: 10.16.34.155:39945 - "GET /health HTTP/1.1" 200 OK
293
+ INFO: 10.16.34.155:1226 - "GET /health HTTP/1.1" 200 OK
294
+ INFO: 10.16.34.155:11305 - "GET /health HTTP/1.1" 200 OK
295
+ INFO: 10.16.34.155:11305 - "GET /health HTTP/1.1" 200 OK
296
+ INFO: 10.16.30.4:11214 - "GET /health HTTP/1.1" 200 OK
297
+ INFO: 10.16.30.4:64291 - "GET /health HTTP/1.1" 200 OK
298
+ INFO: 10.16.30.4:33334 - "GET /health HTTP/1.1" 200 OK
299
+ INFO: 10.16.30.4:41125 - "GET /health HTTP/1.1" 200 OK
300
+ INFO: 10.16.34.155:1485 - "GET /health HTTP/1.1" 200 OK
301
+ INFO: 10.16.34.155:11906 - "GET /health HTTP/1.1" 200 OK
302
+ INFO: 10.16.34.155:23564 - "GET /health HTTP/1.1" 200 OK
303
+ INFO: 10.16.34.155:44829 - "GET /health HTTP/1.1" 200 OK
304
+ INFO: 10.16.30.4:17096 - "GET /health HTTP/1.1" 200 OK
305
+ INFO: 10.16.34.155:31022 - "GET /health HTTP/1.1" 200 OK
306
+ INFO: 10.16.34.155:33976 - "GET /health HTTP/1.1" 200 OK
307
+ INFO: 10.16.34.155:21719 - "GET /health HTTP/1.1" 200 OK
308
+ INFO: 10.16.30.4:32316 - "GET /health HTTP/1.1" 200 OK
309
+ INFO: 10.16.34.155:57899 - "GET /health HTTP/1.1" 200 OK
310
+ INFO: 10.16.30.4:8814 - "GET /health HTTP/1.1" 200 OK
311
+ INFO: 2025-12-01T18:50:22 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
312
+ INFO: 2025-12-01T18:50:22 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
313
+ INFO: 10.16.30.4:8814 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
314
+ INFO: 2025-12-01T18:50:23 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
315
+ INFO: 2025-12-01T18:50:23 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
316
+ INFO: 2025-12-01T18:50:23 - app.services.dashboard_service: Dashboard cache MISS for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user 43b778b0-2062-4724-abbb-916a4835a9b0 - building fresh data
317
+ INFO: 2025-12-01T18:50:23 - app.services.dashboard_service: Built and cached dashboard for project 0ade6bd1-e492-4e25-b681-59f42058d29a
318
+ INFO: 10.16.30.4:8814 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
319
+ INFO: 2025-12-01T18:50:23 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
320
+ INFO: 2025-12-01T18:50:23 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
321
+ INFO: 10.16.34.155:64487 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
322
+ INFO: 2025-12-01T18:50:23 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
323
+ INFO: 2025-12-01T18:50:23 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
324
+ INFO: 10.16.30.4:33935 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
325
+ INFO: 10.16.34.155:49682 - "GET /health HTTP/1.1" 200 OK
326
+ INFO: 10.16.30.4:38974 - "GET /health HTTP/1.1" 200 OK
327
+ INFO: 10.16.34.155:48394 - "GET /health HTTP/1.1" 200 OK
328
+ INFO: 10.16.30.4:31058 - "GET /health HTTP/1.1" 200 OK
329
+ INFO: 10.16.34.155:3197 - "GET /health HTTP/1.1" 200 OK
330
+ INFO: 10.16.34.155:48074 - "GET /health HTTP/1.1" 200 OK
331
+ INFO: 10.16.30.4:24871 - "GET /health HTTP/1.1" 200 OK
332
+ INFO: 10.16.30.4:51185 - "GET /health HTTP/1.1" 200 OK
333
+ INFO: 10.16.34.155:2261 - "GET /api/v1/ticket-expenses/my-expenses?page=1&page_size=20 HTTP/1.1" 500 Internal Server Error
334
+ ERROR: Exception in ASGI application
335
+ Traceback (most recent call last):
336
+ File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
337
+ result = await app( # type: ignore[func-returns-value]
338
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
339
+ File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
340
+ return await self.app(scope, receive, send)
341
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
342
+ File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
343
+ await super().__call__(scope, receive, send)
344
+ File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
345
+ await self.middleware_stack(scope, receive, send)
346
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
347
+ raise exc
348
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
349
+ await self.app(scope, receive, _send)
350
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 91, in __call__
351
+ await self.simple_response(scope, receive, send, request_headers=headers)
352
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 146, in simple_response
353
+ await self.app(scope, receive, send)
354
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
355
+ raise exc
356
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
357
+ await self.app(scope, receive, sender)
358
+ File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
359
+ raise e
360
+ File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
361
+ await self.app(scope, receive, send)
362
+ File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
363
+ await route.handle(scope, receive, send)
364
+ File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
365
+ await self.app(scope, receive, send)
366
+ File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
367
+ response = await func(request)
368
+ ^^^^^^^^^^^^^^^^^^^
369
+ File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
370
+ raw_response = await run_endpoint_function(
371
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
372
+ File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 193, in run_endpoint_function
373
+ return await run_in_threadpool(dependant.call, **values)
374
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
375
+ File "/usr/local/lib/python3.11/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
376
+ return await anyio.to_thread.run_sync(func, *args)
377
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
378
+ File "/usr/local/lib/python3.11/site-packages/anyio/to_thread.py", line 33, in run_sync
379
+ return await get_asynclib().run_sync_in_worker_thread(
380
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
381
+ File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 877, in run_sync_in_worker_thread
382
+ return await future
383
+ ^^^^^^^^^^^^
384
+ File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 807, in run
385
+ result = context.run(func, *args)
386
+ ^^^^^^^^^^^^^^^^^^^^^^^^
387
+ File "/app/src/app/api/v1/ticket_expenses.py", line 381, in get_my_expenses
388
+ expenses, total = TicketExpenseService.list_expenses(
389
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
390
+ File "/app/src/app/services/ticket_expense_service.py", line 694, in list_expenses
391
+ joinedload(TicketExpense.ticket_assignment)
392
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
393
+ AttributeError: type object 'TicketExpense' has no attribute 'ticket_assignment'
394
+ INFO: 10.16.34.155:33189 - "GET /api/v1/ticket-expenses/my-stats HTTP/1.1" 200 OK
395
+ INFO: 10.16.34.155:33189 - "GET /api/v1/ticket-expenses/my-expenses?page=1&page_size=20 HTTP/1.1" 500 Internal Server Error
396
+ ERROR: Exception in ASGI application
397
+ Traceback (most recent call last):
398
+ File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
399
+ result = await app( # type: ignore[func-returns-value]
400
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
401
+ File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
402
+ return await self.app(scope, receive, send)
403
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
404
+ File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
405
+ await super().__call__(scope, receive, send)
406
+ File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
407
+ await self.middleware_stack(scope, receive, send)
408
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
409
+ raise exc
410
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
411
+ await self.app(scope, receive, _send)
412
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 91, in __call__
413
+ await self.simple_response(scope, receive, send, request_headers=headers)
414
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 146, in simple_response
415
+ await self.app(scope, receive, send)
416
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
417
+ raise exc
418
+ File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
419
+ await self.app(scope, receive, sender)
420
+ File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
421
+ raise e
422
+ File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
423
+ await self.app(scope, receive, send)
424
+ File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
425
+ await route.handle(scope, receive, send)
426
+ File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
427
+ await self.app(scope, receive, send)
428
+ File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
429
+ response = await func(request)
430
+ ^^^^^^^^^^^^^^^^^^^
431
+ File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
432
+ raw_response = await run_endpoint_function(
433
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
434
+ File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 193, in run_endpoint_function
435
+ return await run_in_threadpool(dependant.call, **values)
436
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
437
+ File "/usr/local/lib/python3.11/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
438
+ return await anyio.to_thread.run_sync(func, *args)
439
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
440
+ File "/usr/local/lib/python3.11/site-packages/anyio/to_thread.py", line 33, in run_sync
441
+ return await get_asynclib().run_sync_in_worker_thread(
442
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
443
+ File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 877, in run_sync_in_worker_thread
444
+ return await future
445
+ ^^^^^^^^^^^^
446
+ File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 807, in run
447
+ result = context.run(func, *args)
448
+ ^^^^^^^^^^^^^^^^^^^^^^^^
449
+ File "/app/src/app/api/v1/ticket_expenses.py", line 381, in get_my_expenses
450
+ expenses, total = TicketExpenseService.list_expenses(
451
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
452
+ File "/app/src/app/services/ticket_expense_service.py", line 694, in list_expenses
453
+ joinedload(TicketExpense.ticket_assignment)
454
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
455
+ AttributeError: type object 'TicketExpense' has no attribute 'ticket_assignment'
456
+ INFO: 10.16.30.4:2089 - "GET /health HTTP/1.1" 200 OK
457
+ INFO: 10.16.30.4:35335 - "GET /health HTTP/1.1" 200 OK
458
+ INFO: 10.16.34.155:1988 - "GET /health HTTP/1.1" 200 OK
src/app/api/v1/ticket_expenses.py CHANGED
@@ -410,8 +410,8 @@ def get_my_expenses(
410
  response.ticket_status = expense.ticket.status
411
 
412
  # Assignment context
413
- if expense.ticket_assignment:
414
- response.assignment_status = expense.ticket_assignment.status
415
 
416
  expense_responses.append(response)
417
 
@@ -501,8 +501,8 @@ def get_expense(
501
  response.ticket_status = expense.ticket.status
502
 
503
  # Assignment context
504
- if expense.ticket_assignment:
505
- response.assignment_status = expense.ticket_assignment.status
506
 
507
  return response
508
 
@@ -587,8 +587,8 @@ def list_expenses(
587
  response.ticket_status = expense.ticket.status
588
 
589
  # Assignment context
590
- if expense.ticket_assignment:
591
- response.assignment_status = expense.ticket_assignment.status
592
 
593
  expense_responses.append(response)
594
 
 
410
  response.ticket_status = expense.ticket.status
411
 
412
  # Assignment context
413
+ if expense.assignment:
414
+ response.assignment_status = expense.assignment.status
415
 
416
  expense_responses.append(response)
417
 
 
501
  response.ticket_status = expense.ticket.status
502
 
503
  # Assignment context
504
+ if expense.assignment:
505
+ response.assignment_status = expense.assignment.status
506
 
507
  return response
508
 
 
587
  response.ticket_status = expense.ticket.status
588
 
589
  # Assignment context
590
+ if expense.assignment:
591
+ response.assignment_status = expense.assignment.status
592
 
593
  expense_responses.append(response)
594
 
src/app/services/ticket_expense_service.py CHANGED
@@ -636,7 +636,7 @@ class TicketExpenseService:
636
  joinedload(TicketExpense.approved_by_user),
637
  joinedload(TicketExpense.paid_to_user),
638
  joinedload(TicketExpense.ticket),
639
- joinedload(TicketExpense.ticket_assignment)
640
  ).filter(
641
  TicketExpense.id == expense_id,
642
  TicketExpense.deleted_at.is_(None)
@@ -691,7 +691,7 @@ class TicketExpenseService:
691
  joinedload(TicketExpense.approved_by_user),
692
  joinedload(TicketExpense.paid_to_user),
693
  joinedload(TicketExpense.ticket),
694
- joinedload(TicketExpense.ticket_assignment)
695
  ).filter(
696
  TicketExpense.deleted_at.is_(None)
697
  )
 
636
  joinedload(TicketExpense.approved_by_user),
637
  joinedload(TicketExpense.paid_to_user),
638
  joinedload(TicketExpense.ticket),
639
+ joinedload(TicketExpense.assignment)
640
  ).filter(
641
  TicketExpense.id == expense_id,
642
  TicketExpense.deleted_at.is_(None)
 
691
  joinedload(TicketExpense.approved_by_user),
692
  joinedload(TicketExpense.paid_to_user),
693
  joinedload(TicketExpense.ticket),
694
+ joinedload(TicketExpense.assignment)
695
  ).filter(
696
  TicketExpense.deleted_at.is_(None)
697
  )