Spaces:
Sleeping
Sleeping
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=
|
| 2 |
core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me
|
| 3 |
-
react-router-dom.js?v=
|
| 4 |
-
warnOnce @ react-router-dom.js?v=
|
| 5 |
-
logDeprecation @ react-router-dom.js?v=
|
| 6 |
-
logV6DeprecationWarnings @ react-router-dom.js?v=
|
| 7 |
-
(anonymous) @ react-router-dom.js?v=
|
| 8 |
-
commitHookEffectListMount @ chunk-276SZO74.js?v=
|
| 9 |
-
commitPassiveMountOnFiber @ chunk-276SZO74.js?v=
|
| 10 |
-
commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=
|
| 11 |
-
commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=
|
| 12 |
-
commitPassiveMountEffects @ chunk-276SZO74.js?v=
|
| 13 |
-
flushPassiveEffectsImpl @ chunk-276SZO74.js?v=
|
| 14 |
-
flushPassiveEffects @ chunk-276SZO74.js?v=
|
| 15 |
-
(anonymous) @ chunk-276SZO74.js?v=
|
| 16 |
-
workLoop @ chunk-276SZO74.js?v=
|
| 17 |
-
flushWork @ chunk-276SZO74.js?v=
|
| 18 |
-
performWorkUntilDeadline @ chunk-276SZO74.js?v=
|
| 19 |
-
react-router-dom.js?v=
|
| 20 |
-
warnOnce @ react-router-dom.js?v=
|
| 21 |
-
logDeprecation @ react-router-dom.js?v=
|
| 22 |
-
logV6DeprecationWarnings @ react-router-dom.js?v=
|
| 23 |
-
(anonymous) @ react-router-dom.js?v=
|
| 24 |
-
commitHookEffectListMount @ chunk-276SZO74.js?v=
|
| 25 |
-
commitPassiveMountOnFiber @ chunk-276SZO74.js?v=
|
| 26 |
-
commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=
|
| 27 |
-
commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=
|
| 28 |
-
commitPassiveMountEffects @ chunk-276SZO74.js?v=
|
| 29 |
-
flushPassiveEffectsImpl @ chunk-276SZO74.js?v=
|
| 30 |
-
flushPassiveEffects @ chunk-276SZO74.js?v=
|
| 31 |
-
(anonymous) @ chunk-276SZO74.js?v=
|
| 32 |
-
workLoop @ chunk-276SZO74.js?v=
|
| 33 |
-
flushWork @ chunk-276SZO74.js?v=
|
| 34 |
-
performWorkUntilDeadline @ chunk-276SZO74.js?v=
|
| 35 |
-
core.ts:167 GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me → 200 (1.
|
| 36 |
-
|
| 37 |
-
core.ts:
|
| 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/
|
| 40 |
-
|
| 41 |
-
core.ts:167
|
| 42 |
-
core.ts:167 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/
|
| 43 |
-
|
| 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 |
-
|
| 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 |
-
core.ts:167
|
| 75 |
-
core.ts:167 %
|
| 76 |
-
api-client.ts:124
|
| 77 |
request @ api-client.ts:124
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
|
|
|
| 83 |
Promise.then
|
| 84 |
-
(anonymous) @ @tanstack_react-query.js?v=
|
| 85 |
Promise.catch
|
| 86 |
-
run @ @tanstack_react-query.js?v=
|
| 87 |
-
start @ @tanstack_react-query.js?v=
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 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-stats → 200 (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
|
| 2 |
|
| 3 |
-
INFO: Started server process [
|
| 4 |
INFO: Waiting for application startup.
|
| 5 |
-
INFO: 2025-12-
|
| 6 |
-
INFO: 2025-12-
|
| 7 |
-
INFO: 2025-12-
|
| 8 |
-
INFO: 2025-12-
|
| 9 |
-
INFO: 2025-12-
|
| 10 |
-
INFO: 2025-12-
|
| 11 |
-
INFO: 2025-12-
|
| 12 |
-
INFO: 2025-12-
|
| 13 |
-
INFO: 2025-12-
|
| 14 |
-
INFO: 2025-12-
|
| 15 |
-
INFO: 2025-12-
|
| 16 |
-
INFO: 2025-12-
|
| 17 |
-
INFO: 2025-12-
|
| 18 |
-
INFO: 2025-12-
|
| 19 |
-
INFO: 2025-12-
|
| 20 |
-
INFO: 2025-12-
|
| 21 |
-
INFO: 2025-12-
|
| 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:
|
| 25 |
-
INFO: 10.16.
|
| 26 |
-
INFO: 10.16.
|
| 27 |
-
INFO:
|
| 28 |
-
INFO:
|
| 29 |
-
INFO: 10.16.
|
| 30 |
-
INFO: 2025-12-
|
| 31 |
-
INFO: 2025-12-
|
| 32 |
-
INFO: 10.16.
|
| 33 |
-
INFO: 2025-12-
|
| 34 |
-
INFO: 2025-12-
|
| 35 |
-
INFO:
|
| 36 |
-
INFO: 2025-12-
|
| 37 |
-
INFO:
|
| 38 |
-
INFO:
|
| 39 |
-
INFO: 2025-12-
|
| 40 |
-
INFO:
|
| 41 |
-
INFO:
|
| 42 |
-
INFO: 2025-12-
|
| 43 |
-
INFO:
|
| 44 |
-
INFO: 10.16.
|
| 45 |
-
INFO: 10.16.2.97:
|
| 46 |
-
INFO:
|
| 47 |
-
INFO:
|
| 48 |
-
INFO: 10.16.
|
| 49 |
-
INFO:
|
| 50 |
-
INFO:
|
| 51 |
-
INFO: 10.16.
|
| 52 |
-
INFO:
|
| 53 |
-
INFO:
|
| 54 |
-
INFO:
|
| 55 |
-
INFO:
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
INFO: 10.16.
|
| 61 |
-
INFO:
|
| 62 |
-
INFO:
|
| 63 |
-
INFO: 10.16.25.209:
|
| 64 |
-
INFO: 10.16.
|
| 65 |
-
INFO: 10.16.34.155:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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.
|
| 414 |
-
response.assignment_status = expense.
|
| 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.
|
| 505 |
-
response.assignment_status = expense.
|
| 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.
|
| 591 |
-
response.assignment_status = expense.
|
| 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.
|
| 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.
|
| 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 |
)
|