kamau1 commited on
Commit
9962ce3
·
1 Parent(s): b149eb9

Fix timesheets 404/403 by adding missing permissions and reordering routes to prevent path conflicts.

Browse files
docs/api/{TIMESHEETS_NEW_FEATURES.md → timesheets/TIMESHEETS_NEW_FEATURES.md} RENAMED
File without changes
docs/api/timesheets/TIMESHEET_FIXES.md ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Timesheet API Fixes - 2025-12-14
2
+
3
+ ## Issues Fixed
4
+
5
+ ### 1. 403 Forbidden Error on `/api/v1/timesheets`
6
+ **Problem:** Permission `view_timesheets` was not defined in the permissions system.
7
+
8
+ **Solution:** Added timesheet permissions to the system:
9
+ - Added `VIEW_TIMESHEETS` and `MANAGE_TIMESHEETS` constants to `src/app/constants/permissions.py`
10
+ - Added `view_timesheets` and `manage_timesheets` permissions to all relevant roles in `src/app/core/permissions.py`:
11
+ - `PLATFORM_ADMIN` (has all permissions via "*")
12
+ - `PROJECT_MANAGER` - can view and manage team timesheets
13
+ - `CONTRACTOR_ADMIN` - can view and manage team timesheets
14
+ - `CLIENT_ADMIN` - can view and manage team timesheets
15
+ - `DISPATCHER` - can view and manage team timesheets
16
+ - `FIELD_AGENT` - can view own timesheets only
17
+
18
+ ### 2. 404 Not Found Error on `/api/v1/timesheets/team/stats`
19
+ **Problem:** Route ordering issue - the `/{timesheet_id}` route was defined before `/team/stats`, causing FastAPI to match "team" as a UUID parameter.
20
+
21
+ **Solution:** Moved the `/team/stats` endpoint definition to appear BEFORE the `/{timesheet_id}` route in `src/app/api/v1/timesheets.py`. FastAPI now correctly matches the specific route before trying the parameterized route.
22
+
23
+ ## Files Modified
24
+
25
+ 1. **src/app/constants/permissions.py**
26
+ - Added `VIEW_TIMESHEETS` and `MANAGE_TIMESHEETS` constants
27
+
28
+ 2. **src/app/core/permissions.py**
29
+ - Added `view_timesheets` permission to: PROJECT_MANAGER, CONTRACTOR_ADMIN, CLIENT_ADMIN, DISPATCHER, FIELD_AGENT
30
+ - Added `manage_timesheets` permission to: PROJECT_MANAGER, CONTRACTOR_ADMIN, CLIENT_ADMIN, DISPATCHER
31
+
32
+ 3. **src/app/api/v1/timesheets.py**
33
+ - Moved `/team/stats` endpoint to line ~680 (before `/{timesheet_id}` route)
34
+ - Removed duplicate definition from line ~1029
35
+
36
+ ## Testing Required
37
+
38
+ After server restart, test:
39
+ 1. `GET /api/v1/timesheets` - Should return 200 (not 403) for PROJECT_MANAGER role
40
+ 2. `GET /api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=<uuid>` - Should return 200 (not 404)
41
+ 3. `GET /api/v1/timesheets/{id}` - Should still work correctly
42
+
43
+ ## Endpoints Now Working
44
+
45
+ All timesheet endpoints are now accessible with proper permissions:
46
+ - `GET /api/v1/timesheets` - List timesheets (with filters)
47
+ - `GET /api/v1/timesheets/stats` - Individual user stats
48
+ - `GET /api/v1/timesheets/team/stats` - Aggregated team stats
49
+ - `GET /api/v1/timesheets/export/csv` - CSV export
50
+ - `POST /api/v1/timesheets/bulk-update` - Bulk recalculation
51
+ - `POST /api/v1/timesheets/{id}/recalculate` - Single recalculation
docs/api/{timesheets.md → timesheets/timesheets.md} RENAMED
File without changes
docs/devlogs/browser/browserconsole.txt CHANGED
@@ -1,202 +1,830 @@
1
- Download the React DevTools for a better development experience: https://reactjs.org/link/react-devtools
2
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me
3
- ⚠️ 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=02c37274:4393
5
- ⚠️ 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.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  warnOnce @ react-router-dom.js?v=02c37274:4393
7
- WebSocket connection to 'ws://localhost:8080/?token=5ZvTJdG43mEu' failed:
8
- setupWebSocket @ client:536
9
- WebSocket connection to 'ws://localhost:8080/?token=5ZvTJdG43mEu' failed:
10
- setupWebSocket @ client:536
11
- [vite] failed to connect to websocket.
12
- your current setup:
13
- (browser) localhost:8080/ <--[HTTP]--> localhost:8080/ (server)
14
- (browser) localhost:8080/ <--[WebSocket (failing)]--> localhost:8080/ (server)
15
- Check out your Vite / network configuration and https://vite.dev/config/server-options.html#server-hmr .
16
- (anonymous) @ client:512
17
- GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me → 200 (6.00s)
18
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences
19
- GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences → 200 (1.52s)
20
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard
21
- ℹ️ [11:18:04] [COMPONENT] ProjectDashboardPage: Project dashboard loaded Object
22
- GET https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard → 200 (8.25s)
23
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a
24
- GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a 200 (786ms)
25
- ℹ️ [11:18:18] [AUTH] Logout initiated
26
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/logout
27
- POST https://kamau1-swiftops-backend.hf.space/api/v1/auth/logout → 200 (4.23s)
28
- ℹ️ [11:18:23] [AUTH] Logout successful on server
29
- ℹ️ [11:18:23] [AUTH] Tokens cleared, user logged out
30
- ℹ️ [11:18:26] [AUTH] Login attempt Object
31
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/login
32
- POST https://kamau1-swiftops-backend.hf.space/api/v1/auth/login → 200 (652ms)
33
- ℹ️ [11:18:27] [AUTH] Login successful, tokens stored Object
34
- ℹ️ [11:18:27] [AUTH] User logged in successfully Object
35
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me
36
- GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me → 200 (880ms)
37
- ℹ️ [11:18:29] [COMPONENT] Dashboard component selected Object
38
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/analytics/user/overview?limit=50
39
- GET https://kamau1-swiftops-backend.hf.space/api/v1/analytics/user/overview?limit=50 → 200 (3.06s)
40
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/projects?page=1&per_page=100&status=active
41
- GET https://kamau1-swiftops-backend.hf.space/api/v1/projects?page=1&per_page=100&status=active → 200 (542ms)
42
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail
43
- GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail 200 (1.09s)
44
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a
45
- GET https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a → 200 (879ms)
46
- Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
47
- (anonymous) @ chunk-3WZOQKYN.js?v=02c37274:340
48
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses
49
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses → 201 (2.33s)
50
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail
51
- GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail → 200 (336ms)
52
- Warning: Missing `Description` or `aria-describedby={undefined}` for {DialogContent}.
53
- (anonymous) @ chunk-3WZOQKYN.js?v=02c37274:340
54
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses
55
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-expenses → 201 (843ms)
56
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail
57
- GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail → 200 (342ms)
58
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/start-journey
59
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/start-journey → 200 (718ms)
60
- %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail
61
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
62
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.26s)
63
- GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail → 200 (1.47s)
64
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
65
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (309ms)
66
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
67
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (503ms)
68
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
69
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (346ms)
70
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
71
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.13s)
72
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
73
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.22s)
74
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
75
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (850ms)
76
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
77
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (343ms)
78
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
79
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.09s)
80
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
81
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.86s)
82
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
83
- POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (432ms)
84
- %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
85
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (712ms)
86
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
87
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.16s)
88
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
89
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.34s)
90
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
91
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (533ms)
92
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
93
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (2.06s)
94
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
95
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.10s)
96
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
97
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.52s)
98
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
99
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (660ms)
100
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
101
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (530ms)
102
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
103
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.01s)
104
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
105
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (872ms)
106
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
107
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (931ms)
108
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
109
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (1.01s)
110
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
111
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/arrived
112
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 200 (362ms)
113
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/arrived → 200 (669ms)
114
- core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail
115
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location
116
- core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail → 200 (637ms)
117
- api-client.ts:124 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location 400 (Bad Request)
118
  request @ api-client.ts:124
119
- post @ api-client.ts:213
120
- updateLocation @ tickets.service.ts:411
121
- (anonymous) @ LocationTrackerContext.tsx:79
122
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/ticket-assignments/assignments/e2096a93-8f55-4063-92c5-2bc7122b3228/update-location → 400 (976ms)
123
- LocationTrackerContext.tsx:90 [LocationTracker] Failed to stream location: APIError: Already arrived. No more location updates needed.
124
- at APIClient.request (api-client.ts:158:15)
125
- at async updateLocation (tickets.service.ts:411:5)
126
- at async LocationTrackerContext.tsx:79:25
127
- (anonymous) @ LocationTrackerContext.tsx:90
128
- core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-checklist
129
- core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-checklist → 200 (2.10s)
130
- image-compression.ts:50 Image compressed: 56687 -> 46590 bytes
131
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
132
- image-compression.ts:50 Image compressed: 299548 -> 245006 bytes
133
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
134
- image-compression.ts:50 Image compressed: 211885 -> 205136 bytes
135
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
136
- image-compression.ts:50 Image compressed: 2073692 -> 271804 bytes
137
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
138
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos → 200 (5.15s)
139
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data
140
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos → 408 (30.77s)
141
- TicketCompletionWizard.tsx:184 Background upload error APIError: Request timeout
142
- at APIClient.request (api-client.ts:173:30)
143
- at async uploadCompletionPhoto (tickets.service.ts:445:22)
144
- at async Promise.all (index 2)
145
- (anonymous) @ TicketCompletionWizard.tsx:184
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  Promise.catch
147
- handleStep1Next @ TicketCompletionWizard.tsx:183
148
- handleNext @ TicketCompletionWizard.tsx:275
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
  callCallback2 @ chunk-276SZO74.js?v=02c37274:3674
150
  invokeGuardedCallbackDev @ chunk-276SZO74.js?v=02c37274:3699
151
  invokeGuardedCallback @ chunk-276SZO74.js?v=02c37274:3733
152
- invokeGuardedCallbackAndCatchFirstError @ chunk-276SZO74.js?v=02c37274:3736
153
- executeDispatch @ chunk-276SZO74.js?v=02c37274:7014
154
- processDispatchQueueItemsInOrder @ chunk-276SZO74.js?v=02c37274:7034
155
- processDispatchQueue @ chunk-276SZO74.js?v=02c37274:7043
156
- dispatchEventsForPlugins @ chunk-276SZO74.js?v=02c37274:7051
157
- (anonymous) @ chunk-276SZO74.js?v=02c37274:7174
158
- batchedUpdates$1 @ chunk-276SZO74.js?v=02c37274:18913
159
- batchedUpdates @ chunk-276SZO74.js?v=02c37274:3579
160
- dispatchEventForPluginEventSystem @ chunk-276SZO74.js?v=02c37274:7173
161
- dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay @ chunk-276SZO74.js?v=02c37274:5478
162
- dispatchEvent @ chunk-276SZO74.js?v=02c37274:5472
163
- dispatchDiscreteEvent @ chunk-276SZO74.js?v=02c37274:5449
164
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos → 408 (30.73s)
165
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos → 408 (30.67s)
166
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data → 408 (30.01s)
167
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data
168
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data → 200 (345ms)
169
- image-compression.ts:50 Image compressed: 211885 -> 205136 bytes
170
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
171
- image-compression.ts:50 Image compressed: 299548 -> 245006 bytes
172
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
173
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data
174
- image-compression.ts:50 Image compressed: 5576851 -> 189208 bytes
175
- core.ts:169 %cPOST%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos
176
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/completion-data → 200 (16.73s)
177
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos → 408 (30.00s)
178
- TicketCompletionWizard.tsx:184 Background upload error APIError: Request timeout
179
- at APIClient.request (api-client.ts:173:30)
180
- at async uploadCompletionPhoto (tickets.service.ts:445:22)
181
- at async Promise.all (index 0)
182
- (anonymous) @ TicketCompletionWizard.tsx:184
183
- Promise.catch
184
- handleStep1Next @ TicketCompletionWizard.tsx:183
185
- handleNext @ TicketCompletionWizard.tsx:275
 
 
 
 
186
  callCallback2 @ chunk-276SZO74.js?v=02c37274:3674
187
  invokeGuardedCallbackDev @ chunk-276SZO74.js?v=02c37274:3699
188
  invokeGuardedCallback @ chunk-276SZO74.js?v=02c37274:3733
189
- invokeGuardedCallbackAndCatchFirstError @ chunk-276SZO74.js?v=02c37274:3736
190
- executeDispatch @ chunk-276SZO74.js?v=02c37274:7014
191
- processDispatchQueueItemsInOrder @ chunk-276SZO74.js?v=02c37274:7034
192
- processDispatchQueue @ chunk-276SZO74.js?v=02c37274:7043
193
- dispatchEventsForPlugins @ chunk-276SZO74.js?v=02c37274:7051
194
- (anonymous) @ chunk-276SZO74.js?v=02c37274:7174
195
- batchedUpdates$1 @ chunk-276SZO74.js?v=02c37274:18913
196
- batchedUpdates @ chunk-276SZO74.js?v=02c37274:3579
197
- dispatchEventForPluginEventSystem @ chunk-276SZO74.js?v=02c37274:7173
198
- dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay @ chunk-276SZO74.js?v=02c37274:5478
199
- dispatchEvent @ chunk-276SZO74.js?v=02c37274:5472
200
- dispatchDiscreteEvent @ chunk-276SZO74.js?v=02c37274:5449
201
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos → 408 (30.01s)
202
- core.ts:169 POST https://kamau1-swiftops-backend.hf.space/api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/upload-photos → 408 (30.02s)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ chunk-276SZO74.js?v=02c37274:21551 Download the React DevTools for a better development experience: https://reactjs.org/link/react-devtools
2
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me
3
+ react-router-dom.js?v=02c37274: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=02c37274:4393
5
+ logDeprecation @ react-router-dom.js?v=02c37274:4396
6
+ logV6DeprecationWarnings @ react-router-dom.js?v=02c37274:4399
7
+ (anonymous) @ react-router-dom.js?v=02c37274:5271
8
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
9
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
10
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
11
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
12
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
13
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
14
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
15
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:19328
16
+ workLoop @ chunk-276SZO74.js?v=02c37274:197
17
+ flushWork @ chunk-276SZO74.js?v=02c37274:176
18
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=02c37274:384
19
+ react-router-dom.js?v=02c37274: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=02c37274:4393
21
+ logDeprecation @ react-router-dom.js?v=02c37274:4396
22
+ logV6DeprecationWarnings @ react-router-dom.js?v=02c37274:4402
23
+ (anonymous) @ react-router-dom.js?v=02c37274:5271
24
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
25
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
26
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
27
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
28
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
29
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
30
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
31
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:19328
32
+ workLoop @ chunk-276SZO74.js?v=02c37274:197
33
+ flushWork @ chunk-276SZO74.js?v=02c37274:176
34
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=02c37274:384
35
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me 200 (1.31s)
36
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences
37
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences → 200 (392ms)
38
+ core.ts:119 ℹ️ [15:26:15] [COMPONENT] Dashboard component selected {role: 'project_manager', componentName: 'ProjectManagerDashboard', componentExists: true}
39
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/analytics/user/overview
40
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/analytics/user/overview → 200 (341ms)
41
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/projects?page=1&per_page=100
42
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/projects?page=1&per_page=100 200 (317ms)
43
+ core.ts:119 ℹ️ [15:27:49] [COMPONENT] ProjectList: Project selected {projectId: '0ade6bd1-e492-4e25-b681-59f42058d29a', title: 'Atomio Fttx', status: 'active', willNavigateToSetup: false}
44
+ core.ts:119 ℹ️ [15:27:49] [COMPONENT] ProjectList: Switching to project {projectId: '0ade6bd1-e492-4e25-b681-59f42058d29a'}
45
+ core.ts:119 ℹ️ [15:27:49] [AUTH] Updating user preferences {last_active_project_id: '0ade6bd1-e492-4e25-b681-59f42058d29a'}
46
+ core.ts:169 %cPUT%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences
47
+ core.ts:169 PUT https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences 200 (416ms)
48
+ core.ts:119 ℹ️ [15:27:49] [AUTH] Preferences updated successfully {last_active_project_id: '0ade6bd1-e492-4e25-b681-59f42058d29a'}
49
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me
50
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard
51
+ core.ts:119 ℹ️ [15:27:49] [COMPONENT] ProjectDashboardPage: Project dashboard loaded {projectId: '0ade6bd1-e492-4e25-b681-59f42058d29a', currentProject: 'Atomio Fttx'}
52
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard → 200 (102.21s)
53
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me → 200 (1.01s)
54
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a
55
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a → 200 (633ms)
56
+ core.ts:119 ℹ️ [15:27:52] [COMPONENT] AppLauncher: App clicked {appCode: 'timesheets', route: '/timesheets', primaryProject: '0ade6bd1-e492-4e25-b681-59f42058d29a', currentPath: '/project/0ade6bd1-e492-4e25-b681-59f42058d29a', metaApps: Array(6)}
57
+ core.ts:119 ℹ️ [15:27:52] [COMPONENT] AppLauncher: Navigation decision {hasProject: true, isInProjectContext: true, isMetaApp: false, appCode: 'timesheets', metaApps: Array(6)}
58
+ core.ts:119 ℹ️ [15:27:52] [COMPONENT] AppLauncher: Navigating to project-scoped route {projectRoute: '/project/0ade6bd1-e492-4e25-b681-59f42058d29a/timesheets', appCode: 'timesheets'}
59
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-07&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a
60
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-07&date_to=2025-12-14
61
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-07&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a 404 (Not Found)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  request @ api-client.ts:124
63
+ get @ api-client.ts:202
64
+ getTeamStats @ timesheet.service.ts:69
65
+ queryFn @ useTimesheets.ts:64
66
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
67
+ run @ @tanstack_react-query.js?v=02c37274:513
68
+ start @ @tanstack_react-query.js?v=02c37274:555
69
+ fetch @ @tanstack_react-query.js?v=02c37274:969
70
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
71
+ onSubscribe @ @tanstack_react-query.js?v=02c37274:1983
72
+ subscribe @ @tanstack_react-query.js?v=02c37274:24
73
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3147
74
+ subscribeToStore @ chunk-276SZO74.js?v=02c37274:11984
75
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
76
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
77
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
78
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
79
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
80
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
81
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
82
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:19328
83
+ workLoop @ chunk-276SZO74.js?v=02c37274:197
84
+ flushWork @ chunk-276SZO74.js?v=02c37274:176
85
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=02c37274:384
86
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-07&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a → 404 (520ms)
87
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-07&date_to=2025-12-14 403 (Forbidden)
88
+ request @ api-client.ts:124
89
+ get @ api-client.ts:202
90
+ getTimesheets @ timesheet.service.ts:48
91
+ queryFn @ useTimesheets.ts:53
92
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
93
+ run @ @tanstack_react-query.js?v=02c37274:513
94
+ start @ @tanstack_react-query.js?v=02c37274:555
95
+ fetch @ @tanstack_react-query.js?v=02c37274:969
96
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
97
+ onSubscribe @ @tanstack_react-query.js?v=02c37274:1983
98
+ subscribe @ @tanstack_react-query.js?v=02c37274:24
99
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3147
100
+ subscribeToStore @ chunk-276SZO74.js?v=02c37274:11984
101
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
102
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
103
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
104
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
105
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
106
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
107
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
108
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:19328
109
+ workLoop @ chunk-276SZO74.js?v=02c37274:197
110
+ flushWork @ chunk-276SZO74.js?v=02c37274:176
111
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=02c37274:384
112
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-07&date_to=2025-12-14 → 403 (537ms)
113
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-07&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a
114
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-07&date_to=2025-12-14
115
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-07&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a 404 (Not Found)
116
+ request @ api-client.ts:124
117
+ get @ api-client.ts:202
118
+ getTeamStats @ timesheet.service.ts:69
119
+ queryFn @ useTimesheets.ts:64
120
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
121
+ run @ @tanstack_react-query.js?v=02c37274:513
122
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:538
123
+ Promise.then
124
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:534
125
  Promise.catch
126
+ run @ @tanstack_react-query.js?v=02c37274:517
127
+ start @ @tanstack_react-query.js?v=02c37274:555
128
+ fetch @ @tanstack_react-query.js?v=02c37274:969
129
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
130
+ onSubscribe @ @tanstack_react-query.js?v=02c37274:1983
131
+ subscribe @ @tanstack_react-query.js?v=02c37274:24
132
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3147
133
+ subscribeToStore @ chunk-276SZO74.js?v=02c37274:11984
134
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
135
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
136
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
137
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
138
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
139
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
140
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
141
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:19328
142
+ workLoop @ chunk-276SZO74.js?v=02c37274:197
143
+ flushWork @ chunk-276SZO74.js?v=02c37274:176
144
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=02c37274:384
145
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-07&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a → 404 (281ms)
146
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-07&date_to=2025-12-14 403 (Forbidden)
147
+ request @ api-client.ts:124
148
+ get @ api-client.ts:202
149
+ getTimesheets @ timesheet.service.ts:48
150
+ queryFn @ useTimesheets.ts:53
151
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
152
+ run @ @tanstack_react-query.js?v=02c37274:513
153
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:538
154
+ Promise.then
155
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:534
156
+ Promise.catch
157
+ run @ @tanstack_react-query.js?v=02c37274:517
158
+ start @ @tanstack_react-query.js?v=02c37274:555
159
+ fetch @ @tanstack_react-query.js?v=02c37274:969
160
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
161
+ onSubscribe @ @tanstack_react-query.js?v=02c37274:1983
162
+ subscribe @ @tanstack_react-query.js?v=02c37274:24
163
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3147
164
+ subscribeToStore @ chunk-276SZO74.js?v=02c37274:11984
165
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
166
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
167
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
168
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
169
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
170
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
171
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
172
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:19328
173
+ workLoop @ chunk-276SZO74.js?v=02c37274:197
174
+ flushWork @ chunk-276SZO74.js?v=02c37274:176
175
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=02c37274:384
176
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-07&date_to=2025-12-14 → 403 (303ms)
177
+ chunk-276SZO74.js?v=02c37274:1861 The specified value "Sun Dec 07 2025 03:00:00 GMT+0300 (East Africa Time)" does not conform to the required format, "yyyy-MM-dd".
178
+ set @ chunk-276SZO74.js?v=02c37274:1861
179
+ updateWrapper @ chunk-276SZO74.js?v=02c37274:1987
180
+ updateProperties @ chunk-276SZO74.js?v=02c37274:7762
181
+ commitUpdate @ chunk-276SZO74.js?v=02c37274:8419
182
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17763
183
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
184
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
185
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
186
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
187
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
188
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
189
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
190
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
191
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
192
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
193
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
194
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
195
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
196
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
197
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
198
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
199
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
200
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17813
201
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
202
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
203
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
204
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
205
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
206
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
207
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
208
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
209
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
210
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
211
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
212
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
213
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
214
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17851
215
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
216
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17818
217
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
218
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
219
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
220
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
221
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
222
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
223
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
224
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
225
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
226
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
227
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
228
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
229
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
230
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
231
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
232
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
233
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
234
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
235
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
236
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
237
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
238
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
239
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
240
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
241
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
242
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
243
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
244
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
245
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
246
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
247
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
248
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
249
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
250
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
251
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
252
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
253
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
254
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
255
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
256
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
257
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
258
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
259
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
260
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
261
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
262
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17794
263
+ commitMutationEffects @ chunk-276SZO74.js?v=02c37274:17663
264
+ commitRootImpl @ chunk-276SZO74.js?v=02c37274:19347
265
+ commitRoot @ chunk-276SZO74.js?v=02c37274:19277
266
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=02c37274:18895
267
+ flushSyncCallbacks @ chunk-276SZO74.js?v=02c37274:9119
268
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:18627
269
+ chunk-276SZO74.js?v=02c37274:1861 The specified value "Sun Dec 14 2025 03:00:00 GMT+0300 (East Africa Time)" does not conform to the required format, "yyyy-MM-dd".
270
+ set @ chunk-276SZO74.js?v=02c37274:1861
271
+ updateWrapper @ chunk-276SZO74.js?v=02c37274:1987
272
+ updateProperties @ chunk-276SZO74.js?v=02c37274:7762
273
+ commitUpdate @ chunk-276SZO74.js?v=02c37274:8419
274
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17763
275
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
276
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
277
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
278
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
279
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
280
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
281
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
282
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
283
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
284
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
285
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
286
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
287
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
288
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
289
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
290
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
291
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
292
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17813
293
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
294
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
295
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
296
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
297
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
298
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
299
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
300
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17737
301
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
302
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
303
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
304
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
305
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
306
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17851
307
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
308
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17818
309
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
310
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
311
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
312
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
313
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
314
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
315
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
316
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
317
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
318
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
319
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
320
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
321
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
322
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
323
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
324
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
325
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
326
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
327
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
328
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
329
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
330
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
331
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
332
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
333
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
334
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
335
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
336
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
337
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
338
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
339
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
340
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
341
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
342
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
343
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
344
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
345
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
346
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
347
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
348
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17896
349
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
350
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
351
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
352
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17699
353
+ recursivelyTraverseMutationEffects @ chunk-276SZO74.js?v=02c37274:17685
354
+ commitMutationEffectsOnFiber @ chunk-276SZO74.js?v=02c37274:17794
355
+ commitMutationEffects @ chunk-276SZO74.js?v=02c37274:17663
356
+ commitRootImpl @ chunk-276SZO74.js?v=02c37274:19347
357
+ commitRoot @ chunk-276SZO74.js?v=02c37274:19277
358
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=02c37274:18895
359
+ flushSyncCallbacks @ chunk-276SZO74.js?v=02c37274:9119
360
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:18627
361
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a
362
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14
363
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a 404 (Not Found)
364
+ request @ api-client.ts:124
365
+ get @ api-client.ts:202
366
+ getTeamStats @ timesheet.service.ts:69
367
+ queryFn @ useTimesheets.ts:64
368
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
369
+ run @ @tanstack_react-query.js?v=02c37274:513
370
+ start @ @tanstack_react-query.js?v=02c37274:555
371
+ fetch @ @tanstack_react-query.js?v=02c37274:969
372
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
373
+ setOptions @ @tanstack_react-query.js?v=02c37274:2040
374
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3157
375
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
376
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
377
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
378
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
379
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
380
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
381
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
382
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:19328
383
+ workLoop @ chunk-276SZO74.js?v=02c37274:197
384
+ flushWork @ chunk-276SZO74.js?v=02c37274:176
385
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=02c37274:384
386
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a → 404 (727ms)
387
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 403 (Forbidden)
388
+ request @ api-client.ts:124
389
+ get @ api-client.ts:202
390
+ getTimesheets @ timesheet.service.ts:48
391
+ queryFn @ useTimesheets.ts:53
392
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
393
+ run @ @tanstack_react-query.js?v=02c37274:513
394
+ start @ @tanstack_react-query.js?v=02c37274:555
395
+ fetch @ @tanstack_react-query.js?v=02c37274:969
396
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
397
+ setOptions @ @tanstack_react-query.js?v=02c37274:2040
398
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3157
399
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
400
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
401
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
402
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
403
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
404
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
405
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
406
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:19328
407
+ workLoop @ chunk-276SZO74.js?v=02c37274:197
408
+ flushWork @ chunk-276SZO74.js?v=02c37274:176
409
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=02c37274:384
410
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 → 403 (1.28s)
411
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a
412
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a 404 (Not Found)
413
+ request @ api-client.ts:124
414
+ get @ api-client.ts:202
415
+ getTeamStats @ timesheet.service.ts:69
416
+ queryFn @ useTimesheets.ts:64
417
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
418
+ run @ @tanstack_react-query.js?v=02c37274:513
419
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:538
420
+ Promise.then
421
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:534
422
+ Promise.catch
423
+ run @ @tanstack_react-query.js?v=02c37274:517
424
+ start @ @tanstack_react-query.js?v=02c37274:555
425
+ fetch @ @tanstack_react-query.js?v=02c37274:969
426
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
427
+ setOptions @ @tanstack_react-query.js?v=02c37274:2040
428
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3157
429
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
430
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
431
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
432
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
433
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
434
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
435
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
436
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:19328
437
+ workLoop @ chunk-276SZO74.js?v=02c37274:197
438
+ flushWork @ chunk-276SZO74.js?v=02c37274:176
439
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=02c37274:384
440
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a → 404 (247ms)
441
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14
442
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 403 (Forbidden)
443
+ request @ api-client.ts:124
444
+ get @ api-client.ts:202
445
+ getTimesheets @ timesheet.service.ts:48
446
+ queryFn @ useTimesheets.ts:53
447
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
448
+ run @ @tanstack_react-query.js?v=02c37274:513
449
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:538
450
+ Promise.then
451
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:534
452
+ Promise.catch
453
+ run @ @tanstack_react-query.js?v=02c37274:517
454
+ start @ @tanstack_react-query.js?v=02c37274:555
455
+ fetch @ @tanstack_react-query.js?v=02c37274:969
456
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
457
+ setOptions @ @tanstack_react-query.js?v=02c37274:2040
458
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3157
459
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
460
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
461
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
462
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
463
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
464
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
465
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
466
+ (anonymous) @ chunk-276SZO74.js?v=02c37274:19328
467
+ workLoop @ chunk-276SZO74.js?v=02c37274:197
468
+ flushWork @ chunk-276SZO74.js?v=02c37274:176
469
+ performWorkUntilDeadline @ chunk-276SZO74.js?v=02c37274:384
470
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 → 403 (300ms)
471
+ TimesheetsDashboard.tsx?t=1765726152802:45 Uncaught ReferenceError: startOfWeek is not defined
472
+ at TimesheetsDashboard (TimesheetsDashboard.tsx?t=1765726152802:45:30)
473
+ at renderWithHooks (chunk-276SZO74.js?v=02c37274:11548:26)
474
+ at updateFunctionComponent (chunk-276SZO74.js?v=02c37274:14582:28)
475
+ at beginWork (chunk-276SZO74.js?v=02c37274:15924:22)
476
+ at HTMLUnknownElement.callCallback2 (chunk-276SZO74.js?v=02c37274:3674:22)
477
+ at Object.invokeGuardedCallbackDev (chunk-276SZO74.js?v=02c37274:3699:24)
478
+ at invokeGuardedCallback (chunk-276SZO74.js?v=02c37274:3733:39)
479
+ at beginWork$1 (chunk-276SZO74.js?v=02c37274:19765:15)
480
+ at performUnitOfWork (chunk-276SZO74.js?v=02c37274:19198:20)
481
+ at workLoopSync (chunk-276SZO74.js?v=02c37274:19137:13)
482
+ TimesheetsDashboard @ TimesheetsDashboard.tsx?t=1765726152802:45
483
+ renderWithHooks @ chunk-276SZO74.js?v=02c37274:11548
484
+ updateFunctionComponent @ chunk-276SZO74.js?v=02c37274:14582
485
+ beginWork @ chunk-276SZO74.js?v=02c37274:15924
486
  callCallback2 @ chunk-276SZO74.js?v=02c37274:3674
487
  invokeGuardedCallbackDev @ chunk-276SZO74.js?v=02c37274:3699
488
  invokeGuardedCallback @ chunk-276SZO74.js?v=02c37274:3733
489
+ beginWork$1 @ chunk-276SZO74.js?v=02c37274:19765
490
+ performUnitOfWork @ chunk-276SZO74.js?v=02c37274:19198
491
+ workLoopSync @ chunk-276SZO74.js?v=02c37274:19137
492
+ renderRootSync @ chunk-276SZO74.js?v=02c37274:19116
493
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=02c37274:18874
494
+ flushSyncCallbacks @ chunk-276SZO74.js?v=02c37274:9119
495
+ flushSync @ chunk-276SZO74.js?v=02c37274:18959
496
+ scheduleRefresh @ chunk-276SZO74.js?v=02c37274:20004
497
+ (anonymous) @ @react-refresh:228
498
+ performReactRefresh @ @react-refresh:217
499
+ (anonymous) @ @react-refresh:608
500
+ setTimeout
501
+ (anonymous) @ @react-refresh:598
502
+ validateRefreshBoundaryAndEnqueueUpdate @ @react-refresh:648
503
+ (anonymous) @ TimesheetsDashboard.tsx:177
504
+ (anonymous) @ client:34
505
+ (anonymous) @ client:218
506
+ (anonymous) @ client:193
507
+ queueUpdate @ client:193
508
+ await in queueUpdate
509
+ (anonymous) @ client:642
510
+ handleMessage @ client:640
511
+ (anonymous) @ client:550
512
+ TimesheetsDashboard.tsx?t=1765726152802:45 Uncaught ReferenceError: startOfWeek is not defined
513
+ at TimesheetsDashboard (TimesheetsDashboard.tsx?t=1765726152802:45:30)
514
+ at renderWithHooks (chunk-276SZO74.js?v=02c37274:11548:26)
515
+ at updateFunctionComponent (chunk-276SZO74.js?v=02c37274:14582:28)
516
+ at beginWork (chunk-276SZO74.js?v=02c37274:15924:22)
517
+ at HTMLUnknownElement.callCallback2 (chunk-276SZO74.js?v=02c37274:3674:22)
518
+ at Object.invokeGuardedCallbackDev (chunk-276SZO74.js?v=02c37274:3699:24)
519
+ at invokeGuardedCallback (chunk-276SZO74.js?v=02c37274:3733:39)
520
+ at beginWork$1 (chunk-276SZO74.js?v=02c37274:19765:15)
521
+ at performUnitOfWork (chunk-276SZO74.js?v=02c37274:19198:20)
522
+ at workLoopSync (chunk-276SZO74.js?v=02c37274:19137:13)
523
+ TimesheetsDashboard @ TimesheetsDashboard.tsx?t=1765726152802:45
524
+ renderWithHooks @ chunk-276SZO74.js?v=02c37274:11548
525
+ updateFunctionComponent @ chunk-276SZO74.js?v=02c37274:14582
526
+ beginWork @ chunk-276SZO74.js?v=02c37274:15924
527
  callCallback2 @ chunk-276SZO74.js?v=02c37274:3674
528
  invokeGuardedCallbackDev @ chunk-276SZO74.js?v=02c37274:3699
529
  invokeGuardedCallback @ chunk-276SZO74.js?v=02c37274:3733
530
+ beginWork$1 @ chunk-276SZO74.js?v=02c37274:19765
531
+ performUnitOfWork @ chunk-276SZO74.js?v=02c37274:19198
532
+ workLoopSync @ chunk-276SZO74.js?v=02c37274:19137
533
+ renderRootSync @ chunk-276SZO74.js?v=02c37274:19116
534
+ recoverFromConcurrentError @ chunk-276SZO74.js?v=02c37274:18736
535
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=02c37274:18879
536
+ flushSyncCallbacks @ chunk-276SZO74.js?v=02c37274:9119
537
+ flushSync @ chunk-276SZO74.js?v=02c37274:18959
538
+ scheduleRefresh @ chunk-276SZO74.js?v=02c37274:20004
539
+ (anonymous) @ @react-refresh:228
540
+ performReactRefresh @ @react-refresh:217
541
+ (anonymous) @ @react-refresh:608
542
+ setTimeout
543
+ (anonymous) @ @react-refresh:598
544
+ validateRefreshBoundaryAndEnqueueUpdate @ @react-refresh:648
545
+ (anonymous) @ TimesheetsDashboard.tsx:177
546
+ (anonymous) @ client:34
547
+ (anonymous) @ client:218
548
+ (anonymous) @ client:193
549
+ queueUpdate @ client:193
550
+ await in queueUpdate
551
+ (anonymous) @ client:642
552
+ handleMessage @ client:640
553
+ (anonymous) @ client:550
554
+ @react-refresh:228 The above error occurred in the <TimesheetsDashboard> component:
555
+
556
+ at TimesheetsDashboard (http://localhost:8080/src/pages/project/timesheets/TimesheetsDashboard.tsx?t=1765726152802:35:27)
557
+ at ProtectedRoute (http://localhost:8080/src/components/auth/ProtectedRoute.tsx:30:34)
558
+ at Suspense
559
+ at AppShell (http://localhost:8080/src/App.tsx:181:21)
560
+ at RenderedRoute (http://localhost:8080/node_modules/.vite/deps/react-router-dom.js?v=02c37274:4088:5)
561
+ at Routes (http://localhost:8080/node_modules/.vite/deps/react-router-dom.js?v=02c37274:4558:5)
562
+ at TopbarProvider (http://localhost:8080/src/contexts/TopbarContext.tsx:25:34)
563
+ at Router (http://localhost:8080/node_modules/.vite/deps/react-router-dom.js?v=02c37274:4501:15)
564
+ at BrowserRouter (http://localhost:8080/node_modules/.vite/deps/react-router-dom.js?v=02c37274:5247:5)
565
+ at Provider (http://localhost:8080/node_modules/.vite/deps/chunk-6JTMSBF5.js?v=02c37274:38:15)
566
+ at TooltipProvider (http://localhost:8080/node_modules/.vite/deps/@radix-ui_react-tooltip.js?v=02c37274:64:5)
567
+ at ThemeProvider (http://localhost:8080/src/contexts/ThemeProvider.tsx:29:33)
568
+ at LocationTrackerProvider (http://localhost:8080/src/contexts/LocationTrackerContext.tsx:34:43)
569
+ at UserPreferencesProvider (http://localhost:8080/src/contexts/UserPreferencesContext.tsx:28:43)
570
+ at QueryClientProvider (http://localhost:8080/node_modules/.vite/deps/@tanstack_react-query.js?v=02c37274:2934:3)
571
+ at App (http://localhost:8080/src/App.tsx:243:35)
572
+
573
+ Consider adding an error boundary to your tree to customize error handling behavior.
574
+ Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.
575
+ logCapturedError @ chunk-276SZO74.js?v=02c37274:14032
576
+ update.callback @ chunk-276SZO74.js?v=02c37274:14052
577
+ callCallback @ chunk-276SZO74.js?v=02c37274:11248
578
+ commitUpdateQueue @ chunk-276SZO74.js?v=02c37274:11265
579
+ commitLayoutEffectOnFiber @ chunk-276SZO74.js?v=02c37274:17093
580
+ commitLayoutMountEffects_complete @ chunk-276SZO74.js?v=02c37274:17980
581
+ commitLayoutEffects_begin @ chunk-276SZO74.js?v=02c37274:17969
582
+ commitLayoutEffects @ chunk-276SZO74.js?v=02c37274:17920
583
+ commitRootImpl @ chunk-276SZO74.js?v=02c37274:19353
584
+ commitRoot @ chunk-276SZO74.js?v=02c37274:19277
585
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=02c37274:18895
586
+ flushSyncCallbacks @ chunk-276SZO74.js?v=02c37274:9119
587
+ flushSync @ chunk-276SZO74.js?v=02c37274:18959
588
+ scheduleRefresh @ chunk-276SZO74.js?v=02c37274:20004
589
+ (anonymous) @ @react-refresh:228
590
+ performReactRefresh @ @react-refresh:217
591
+ (anonymous) @ @react-refresh:608
592
+ setTimeout
593
+ (anonymous) @ @react-refresh:598
594
+ validateRefreshBoundaryAndEnqueueUpdate @ @react-refresh:648
595
+ (anonymous) @ TimesheetsDashboard.tsx:177
596
+ (anonymous) @ client:34
597
+ (anonymous) @ client:218
598
+ (anonymous) @ client:193
599
+ queueUpdate @ client:193
600
+ await in queueUpdate
601
+ (anonymous) @ client:642
602
+ handleMessage @ client:640
603
+ (anonymous) @ client:550
604
+ TimesheetsDashboard.tsx?t=1765726152802:45 Uncaught (in promise) ReferenceError: startOfWeek is not defined
605
+ at TimesheetsDashboard (TimesheetsDashboard.tsx?t=1765726152802:45:30)
606
+ at renderWithHooks (chunk-276SZO74.js?v=02c37274:11548:26)
607
+ at updateFunctionComponent (chunk-276SZO74.js?v=02c37274:14582:28)
608
+ at beginWork (chunk-276SZO74.js?v=02c37274:15924:22)
609
+ at beginWork$1 (chunk-276SZO74.js?v=02c37274:19753:22)
610
+ at performUnitOfWork (chunk-276SZO74.js?v=02c37274:19198:20)
611
+ at workLoopSync (chunk-276SZO74.js?v=02c37274:19137:13)
612
+ at renderRootSync (chunk-276SZO74.js?v=02c37274:19116:15)
613
+ at recoverFromConcurrentError (chunk-276SZO74.js?v=02c37274:18736:28)
614
+ at performSyncWorkOnRoot (chunk-276SZO74.js?v=02c37274:18879:28)
615
+ TimesheetsDashboard @ TimesheetsDashboard.tsx?t=1765726152802:45
616
+ renderWithHooks @ chunk-276SZO74.js?v=02c37274:11548
617
+ updateFunctionComponent @ chunk-276SZO74.js?v=02c37274:14582
618
+ beginWork @ chunk-276SZO74.js?v=02c37274:15924
619
+ beginWork$1 @ chunk-276SZO74.js?v=02c37274:19753
620
+ performUnitOfWork @ chunk-276SZO74.js?v=02c37274:19198
621
+ workLoopSync @ chunk-276SZO74.js?v=02c37274:19137
622
+ renderRootSync @ chunk-276SZO74.js?v=02c37274:19116
623
+ recoverFromConcurrentError @ chunk-276SZO74.js?v=02c37274:18736
624
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=02c37274:18879
625
+ flushSyncCallbacks @ chunk-276SZO74.js?v=02c37274:9119
626
+ flushSync @ chunk-276SZO74.js?v=02c37274:18959
627
+ scheduleRefresh @ chunk-276SZO74.js?v=02c37274:20004
628
+ (anonymous) @ @react-refresh:228
629
+ performReactRefresh @ @react-refresh:217
630
+ (anonymous) @ @react-refresh:608
631
+ setTimeout
632
+ (anonymous) @ @react-refresh:598
633
+ validateRefreshBoundaryAndEnqueueUpdate @ @react-refresh:648
634
+ (anonymous) @ TimesheetsDashboard.tsx:177
635
+ (anonymous) @ client:34
636
+ (anonymous) @ client:218
637
+ (anonymous) @ client:193
638
+ queueUpdate @ client:193
639
+ await in queueUpdate
640
+ (anonymous) @ client:642
641
+ handleMessage @ client:640
642
+ (anonymous) @ client:550
643
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a
644
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14
645
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences
646
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a 404 (Not Found)
647
+ request @ api-client.ts:124
648
+ get @ api-client.ts:202
649
+ getTeamStats @ timesheet.service.ts:69
650
+ queryFn @ useTimesheets.ts:64
651
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
652
+ run @ @tanstack_react-query.js?v=02c37274:513
653
+ start @ @tanstack_react-query.js?v=02c37274:555
654
+ fetch @ @tanstack_react-query.js?v=02c37274:969
655
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
656
+ onSubscribe @ @tanstack_react-query.js?v=02c37274:1983
657
+ subscribe @ @tanstack_react-query.js?v=02c37274:24
658
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3147
659
+ subscribeToStore @ chunk-276SZO74.js?v=02c37274:11984
660
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
661
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
662
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
663
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
664
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
665
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
666
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
667
+ commitRootImpl @ chunk-276SZO74.js?v=02c37274:19416
668
+ commitRoot @ chunk-276SZO74.js?v=02c37274:19277
669
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=02c37274:18895
670
+ flushSyncCallbacks @ chunk-276SZO74.js?v=02c37274:9119
671
+ flushSync @ chunk-276SZO74.js?v=02c37274:18959
672
+ scheduleRoot @ chunk-276SZO74.js?v=02c37274:20015
673
+ (anonymous) @ @react-refresh:208
674
+ performReactRefresh @ @react-refresh:190
675
+ (anonymous) @ @react-refresh:608
676
+ setTimeout
677
+ (anonymous) @ @react-refresh:598
678
+ validateRefreshBoundaryAndEnqueueUpdate @ @react-refresh:648
679
+ (anonymous) @ TimesheetsDashboard.tsx?t=1765726152802:181
680
+ (anonymous) @ client:34
681
+ (anonymous) @ client:218
682
+ (anonymous) @ client:193
683
+ queueUpdate @ client:193
684
+ await in queueUpdate
685
+ (anonymous) @ client:642
686
+ handleMessage @ client:640
687
+ (anonymous) @ client:550
688
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a → 404 (1.34s)
689
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/auth/me/preferences → 200 (1.45s)
690
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 403 (Forbidden)
691
+ request @ api-client.ts:124
692
+ get @ api-client.ts:202
693
+ getTimesheets @ timesheet.service.ts:48
694
+ queryFn @ useTimesheets.ts:53
695
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
696
+ run @ @tanstack_react-query.js?v=02c37274:513
697
+ start @ @tanstack_react-query.js?v=02c37274:555
698
+ fetch @ @tanstack_react-query.js?v=02c37274:969
699
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
700
+ onSubscribe @ @tanstack_react-query.js?v=02c37274:1983
701
+ subscribe @ @tanstack_react-query.js?v=02c37274:24
702
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3147
703
+ subscribeToStore @ chunk-276SZO74.js?v=02c37274:11984
704
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
705
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
706
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
707
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
708
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
709
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
710
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
711
+ commitRootImpl @ chunk-276SZO74.js?v=02c37274:19416
712
+ commitRoot @ chunk-276SZO74.js?v=02c37274:19277
713
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=02c37274:18895
714
+ flushSyncCallbacks @ chunk-276SZO74.js?v=02c37274:9119
715
+ flushSync @ chunk-276SZO74.js?v=02c37274:18959
716
+ scheduleRoot @ chunk-276SZO74.js?v=02c37274:20015
717
+ (anonymous) @ @react-refresh:208
718
+ performReactRefresh @ @react-refresh:190
719
+ (anonymous) @ @react-refresh:608
720
+ setTimeout
721
+ (anonymous) @ @react-refresh:598
722
+ validateRefreshBoundaryAndEnqueueUpdate @ @react-refresh:648
723
+ (anonymous) @ TimesheetsDashboard.tsx?t=1765726152802:181
724
+ (anonymous) @ client:34
725
+ (anonymous) @ client:218
726
+ (anonymous) @ client:193
727
+ queueUpdate @ client:193
728
+ await in queueUpdate
729
+ (anonymous) @ client:642
730
+ handleMessage @ client:640
731
+ (anonymous) @ client:550
732
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 → 403 (1.59s)
733
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14
734
+ core.ts:169 %cGET%c https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a
735
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a 404 (Not Found)
736
+ request @ api-client.ts:124
737
+ get @ api-client.ts:202
738
+ getTeamStats @ timesheet.service.ts:69
739
+ queryFn @ useTimesheets.ts:64
740
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
741
+ run @ @tanstack_react-query.js?v=02c37274:513
742
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:538
743
+ Promise.then
744
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:534
745
+ Promise.catch
746
+ run @ @tanstack_react-query.js?v=02c37274:517
747
+ start @ @tanstack_react-query.js?v=02c37274:555
748
+ fetch @ @tanstack_react-query.js?v=02c37274:969
749
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
750
+ onSubscribe @ @tanstack_react-query.js?v=02c37274:1983
751
+ subscribe @ @tanstack_react-query.js?v=02c37274:24
752
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3147
753
+ subscribeToStore @ chunk-276SZO74.js?v=02c37274:11984
754
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
755
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
756
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
757
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
758
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
759
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
760
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
761
+ commitRootImpl @ chunk-276SZO74.js?v=02c37274:19416
762
+ commitRoot @ chunk-276SZO74.js?v=02c37274:19277
763
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=02c37274:18895
764
+ flushSyncCallbacks @ chunk-276SZO74.js?v=02c37274:9119
765
+ flushSync @ chunk-276SZO74.js?v=02c37274:18959
766
+ scheduleRoot @ chunk-276SZO74.js?v=02c37274:20015
767
+ (anonymous) @ @react-refresh:208
768
+ performReactRefresh @ @react-refresh:190
769
+ (anonymous) @ @react-refresh:608
770
+ setTimeout
771
+ (anonymous) @ @react-refresh:598
772
+ validateRefreshBoundaryAndEnqueueUpdate @ @react-refresh:648
773
+ (anonymous) @ TimesheetsDashboard.tsx?t=1765726152802:181
774
+ (anonymous) @ client:34
775
+ (anonymous) @ client:218
776
+ (anonymous) @ client:193
777
+ queueUpdate @ client:193
778
+ await in queueUpdate
779
+ (anonymous) @ client:642
780
+ handleMessage @ client:640
781
+ (anonymous) @ client:550
782
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a → 404 (1.79s)
783
+ api-client.ts:124 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 403 (Forbidden)
784
+ request @ api-client.ts:124
785
+ get @ api-client.ts:202
786
+ getTimesheets @ timesheet.service.ts:48
787
+ queryFn @ useTimesheets.ts:53
788
+ fetchFn @ @tanstack_react-query.js?v=02c37274:881
789
+ run @ @tanstack_react-query.js?v=02c37274:513
790
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:538
791
+ Promise.then
792
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:534
793
+ Promise.catch
794
+ run @ @tanstack_react-query.js?v=02c37274:517
795
+ start @ @tanstack_react-query.js?v=02c37274:555
796
+ fetch @ @tanstack_react-query.js?v=02c37274:969
797
+ executeFetch_fn @ @tanstack_react-query.js?v=02c37274:2280
798
+ onSubscribe @ @tanstack_react-query.js?v=02c37274:1983
799
+ subscribe @ @tanstack_react-query.js?v=02c37274:24
800
+ (anonymous) @ @tanstack_react-query.js?v=02c37274:3147
801
+ subscribeToStore @ chunk-276SZO74.js?v=02c37274:11984
802
+ commitHookEffectListMount @ chunk-276SZO74.js?v=02c37274:16915
803
+ commitPassiveMountOnFiber @ chunk-276SZO74.js?v=02c37274:18156
804
+ commitPassiveMountEffects_complete @ chunk-276SZO74.js?v=02c37274:18129
805
+ commitPassiveMountEffects_begin @ chunk-276SZO74.js?v=02c37274:18119
806
+ commitPassiveMountEffects @ chunk-276SZO74.js?v=02c37274:18109
807
+ flushPassiveEffectsImpl @ chunk-276SZO74.js?v=02c37274:19490
808
+ flushPassiveEffects @ chunk-276SZO74.js?v=02c37274:19447
809
+ commitRootImpl @ chunk-276SZO74.js?v=02c37274:19416
810
+ commitRoot @ chunk-276SZO74.js?v=02c37274:19277
811
+ performSyncWorkOnRoot @ chunk-276SZO74.js?v=02c37274:18895
812
+ flushSyncCallbacks @ chunk-276SZO74.js?v=02c37274:9119
813
+ flushSync @ chunk-276SZO74.js?v=02c37274:18959
814
+ scheduleRoot @ chunk-276SZO74.js?v=02c37274:20015
815
+ (anonymous) @ @react-refresh:208
816
+ performReactRefresh @ @react-refresh:190
817
+ (anonymous) @ @react-refresh:608
818
+ setTimeout
819
+ (anonymous) @ @react-refresh:598
820
+ validateRefreshBoundaryAndEnqueueUpdate @ @react-refresh:648
821
+ (anonymous) @ TimesheetsDashboard.tsx?t=1765726152802:181
822
+ (anonymous) @ client:34
823
+ (anonymous) @ client:218
824
+ (anonymous) @ client:193
825
+ queueUpdate @ client:193
826
+ await in queueUpdate
827
+ (anonymous) @ client:642
828
+ handleMessage @ client:640
829
+ (anonymous) @ client:550
830
+ core.ts:169 GET https://kamau1-swiftops-backend.hf.space/api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 → 403 (2.05s)
docs/devlogs/server/runtimeerror.txt CHANGED
@@ -1,194 +1,963 @@
1
- ===== Application Startup at 2025-12-13 12:40:46 =====
2
 
3
  INFO: Started server process [7]
4
  INFO: Waiting for application startup.
5
- INFO: 2025-12-13T12:41:03 - app.main: ============================================================
6
- INFO: 2025-12-13T12:41:03 - app.main: 🚀 SwiftOps API v1.0.0 | PRODUCTION
7
- INFO: 2025-12-13T12:41:03 - app.main: 📊 Dashboard: Enabled
8
- INFO: 2025-12-13T12:41:03 - app.main: ============================================================
9
- INFO: 2025-12-13T12:41:03 - app.main: 📦 Database:
10
- INFO: 2025-12-13T12:41:04 - app.main: ✓ Connected | 45 tables | 6 users
11
- INFO: 2025-12-13T12:41:04 - app.main: 💾 Cache & Sessions:
12
- INFO: 2025-12-13T12:41:04 - app.services.otp_service: ✅ OTP Service initialized with Redis storage
13
- INFO: 2025-12-13T12:41:05 - app.main: ✓ Redis: Connected
14
- INFO: 2025-12-13T12:41:05 - app.main: 🔌 External Services:
15
- INFO: 2025-12-13T12:41:05 - app.main: ✓ Cloudinary: Connected
16
- INFO: 2025-12-13T12:41:05 - app.main: ✓ Resend: Configured
17
- INFO: 2025-12-13T12:41:05 - app.main: ○ WASender: Disconnected
18
- INFO: 2025-12-13T12:41:05 - app.main: ✓ Supabase: Connected | 6 buckets
19
- INFO: 2025-12-13T12:41:05 - app.main: ============================================================
20
- INFO: 2025-12-13T12:41:05 - app.main: ✅ Startup complete | Ready to serve requests
21
- INFO: 2025-12-13T12:41:05 - 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.37.13:26853 - "GET /?logs=container HTTP/1.1" 200 OK
25
- INFO: 10.16.37.13:52279 - "GET /health HTTP/1.1" 200 OK
26
- INFO: 10.16.37.13:44681 - "GET /health HTTP/1.1" 200 OK
27
- INFO: 10.16.37.13:44535 - "GET /health HTTP/1.1" 200 OK
28
- INFO: 2025-12-13T12:42:11 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
29
- INFO: 2025-12-13T12:42:11 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
30
- INFO: 10.16.13.79:59603 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
31
- INFO: 10.16.13.79:59603 - "GET /api/v1/ticket-expenses/stats/summary?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=20&status=pending HTTP/1.1" 200 OK
32
- INFO: 10.16.37.13:41928 - "GET /api/v1/ticket-expenses?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=20&is_approved=false HTTP/1.1" 200 OK
33
- INFO: 2025-12-13T12:42:32 - app.services.ticket_expense_service: Expense rejected: 6d64a8fc-219c-465b-b1a1-7e710b391a70 by c5cf92be-4172-4fe2-af5c-f05d83b3a938, reason: too high
34
- INFO: 2025-12-13T12:42:32 - app.services.timesheet_realtime_service: Timesheet 28c04dd5-8f0b-4771-be1e-be59664507dc updated for expense_rejected. Entity: ticket_expense:6d64a8fc-219c-465b-b1a1-7e710b391a70
35
- INFO: 10.16.37.13:44743 - "POST /api/v1/ticket-expenses/6d64a8fc-219c-465b-b1a1-7e710b391a70/approve HTTP/1.1" 200 OK
36
- INFO: 10.16.37.13:44743 - "GET /api/v1/ticket-expenses/stats/summary?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=20&status=pending HTTP/1.1" 200 OK
37
- INFO: 10.16.13.79:12751 - "GET /api/v1/ticket-expenses?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=20&is_approved=false HTTP/1.1" 200 OK
38
- INFO: 10.16.37.13:44743 - "GET /api/v1/ticket-expenses?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=20&is_approved=false HTTP/1.1" 200 OK
39
- INFO: 10.16.13.79:35742 - "GET /health HTTP/1.1" 200 OK
40
- INFO: 10.16.37.13:22513 - "GET /health HTTP/1.1" 200 OK
41
- INFO: 2025-12-13T12:43:42 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
42
- INFO: 2025-12-13T12:43:42 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
43
- INFO: 10.16.13.79:49434 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
44
- INFO: 2025-12-13T12:43:43 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
45
- INFO: 2025-12-13T12:43:43 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
46
- INFO: 10.16.37.13:22513 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
47
- INFO: 2025-12-13T12:43:44 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
48
- INFO: 2025-12-13T12:43:44 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
49
- INFO: 10.16.13.79:49434 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
50
- INFO: 10.16.37.13:22513 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
51
- INFO: 10.16.37.13:38127 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
52
- INFO: 2025-12-13T12:44:01 - app.services.ticket_service: Listed 7 tickets (total: 7) for user 43b778b0-2062-4724-abbb-916a4835a9b0
53
- INFO: 10.16.13.79:5235 - "GET /api/v1/tickets?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=50&status=open%2Cpending_review HTTP/1.1" 200 OK
54
- INFO: 2025-12-13T12:44:01 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
55
- INFO: 2025-12-13T12:44:01 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
56
- INFO: 10.16.13.79:5235 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions HTTP/1.1" 200 OK
57
- INFO: 10.16.37.13:3466 - "GET /api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&status=open%2Cpending_review HTTP/1.1" 200 OK
58
- INFO: 10.16.13.79:35404 - "GET /api/v1/tickets/11367b6d-6d4e-435f-9c8e-f03ae90d429e/detail HTTP/1.1" 200 OK
59
- INFO: 10.16.13.79:35404 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
60
- INFO: 10.16.37.13:45238 - "GET /health HTTP/1.1" 200 OK
61
- INFO: 2025-12-13T12:44:48 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
62
- INFO: 2025-12-13T12:44:48 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
63
- INFO: 10.16.37.13:53259 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions HTTP/1.1" 200 OK
64
- INFO: 2025-12-13T12:44:48 - app.services.ticket_service: Listed 7 tickets (total: 7) for user c5cf92be-4172-4fe2-af5c-f05d83b3a938
65
- INFO: 10.16.13.79:41314 - "GET /api/v1/tickets?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=50&status=open%2Cin_progress HTTP/1.1" 200 OK
66
- INFO: 10.16.13.79:60427 - "GET /api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&status=open%2Cin_progress HTTP/1.1" 200 OK
67
- INFO: 10.16.13.79:49375 - "GET /api/v1/tickets/11367b6d-6d4e-435f-9c8e-f03ae90d429e/detail HTTP/1.1" 200 OK
68
- INFO: 10.16.13.79:49375 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
69
- INFO: 2025-12-13T12:44:58 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
70
- INFO: 2025-12-13T12:44:58 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
71
- INFO: 10.16.37.13:8638 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/team HTTP/1.1" 200 OK
72
- INFO: 10.16.37.13:53445 - "POST /api/v1/ticket-assignments/tickets/11367b6d-6d4e-435f-9c8e-f03ae90d429e/assign HTTP/1.1" 500 Internal Server Error
73
- ERROR: Exception in ASGI application
74
- Traceback (most recent call last):
75
- File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
76
- result = await app( # type: ignore[func-returns-value]
77
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
78
- File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
79
- return await self.app(scope, receive, send)
80
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
81
- File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
82
- await super().__call__(scope, receive, send)
83
- File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
84
- await self.middleware_stack(scope, receive, send)
85
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
86
- raise exc
87
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
88
- await self.app(scope, receive, _send)
89
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 91, in __call__
90
- await self.simple_response(scope, receive, send, request_headers=headers)
91
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 146, in simple_response
92
- await self.app(scope, receive, send)
93
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
94
- raise exc
95
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
96
- await self.app(scope, receive, sender)
97
- File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
98
- raise e
99
- File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
100
- await self.app(scope, receive, send)
101
- File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
102
- await route.handle(scope, receive, send)
103
- File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
104
- await self.app(scope, receive, send)
105
- File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
106
- response = await func(request)
107
- ^^^^^^^^^^^^^^^^^^^
108
- File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
109
- raw_response = await run_endpoint_function(
110
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
111
- File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 193, in run_endpoint_function
112
- return await run_in_threadpool(dependant.call, **values)
113
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
114
- File "/usr/local/lib/python3.11/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
115
- return await anyio.to_thread.run_sync(func, *args)
116
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
117
- File "/usr/local/lib/python3.11/site-packages/anyio/to_thread.py", line 33, in run_sync
118
- return await get_asynclib().run_sync_in_worker_thread(
119
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
120
- File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 877, in run_sync_in_worker_thread
121
- return await future
122
- ^^^^^^^^^^^^
123
- File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 807, in run
124
- result = context.run(func, *args)
125
- ^^^^^^^^^^^^^^^^^^^^^^^^
126
- File "/app/src/app/api/v1/ticket_assignments.py", line 99, in assign_ticket
127
- require_dispatcher_or_pm(current_user)
128
- File "/app/src/app/api/v1/ticket_assignments.py", line 50, in require_dispatcher_or_pm
129
- if user.app_role not in [AppRole.PLATFORM_ADMIN.value, AppRole.PROJECT_MANAGER.value, AppRole.DISPATCHER.value]:
130
- ^^^^^^^^^^^^^
131
- AttributeError: 'User' object has no attribute 'app_role'
132
- INFO: 10.16.13.79:42112 - "GET /health HTTP/1.1" 200 OK
133
- INFO: 10.16.13.79:21599 - "POST /api/v1/ticket-assignments/tickets/11367b6d-6d4e-435f-9c8e-f03ae90d429e/assign HTTP/1.1" 500 Internal Server Error
134
- ERROR: Exception in ASGI application
135
- Traceback (most recent call last):
136
- File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
137
- result = await app( # type: ignore[func-returns-value]
138
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
139
- File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
140
- return await self.app(scope, receive, send)
141
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
142
- File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
143
- await super().__call__(scope, receive, send)
144
- File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
145
- await self.middleware_stack(scope, receive, send)
146
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
147
- raise exc
148
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
149
- await self.app(scope, receive, _send)
150
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 91, in __call__
151
- await self.simple_response(scope, receive, send, request_headers=headers)
152
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 146, in simple_response
153
- await self.app(scope, receive, send)
154
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
155
- raise exc
156
- File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
157
- await self.app(scope, receive, sender)
158
- File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
159
- raise e
160
- File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
161
- await self.app(scope, receive, send)
162
- File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
163
- await route.handle(scope, receive, send)
164
- File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
165
- await self.app(scope, receive, send)
166
- File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
167
- response = await func(request)
168
- ^^^^^^^^^^^^^^^^^^^
169
- File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
170
- raw_response = await run_endpoint_function(
171
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
172
- File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 193, in run_endpoint_function
173
- return await run_in_threadpool(dependant.call, **values)
174
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
175
- File "/usr/local/lib/python3.11/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
176
- return await anyio.to_thread.run_sync(func, *args)
177
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
178
- File "/usr/local/lib/python3.11/site-packages/anyio/to_thread.py", line 33, in run_sync
179
- return await get_asynclib().run_sync_in_worker_thread(
180
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
181
- File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 877, in run_sync_in_worker_thread
182
- return await future
183
- ^^^^^^^^^^^^
184
- File "/usr/local/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 807, in run
185
- result = context.run(func, *args)
186
- ^^^^^^^^^^^^^^^^^^^^^^^^
187
- File "/app/src/app/api/v1/ticket_assignments.py", line 99, in assign_ticket
188
- require_dispatcher_or_pm(current_user)
189
- File "/app/src/app/api/v1/ticket_assignments.py", line 50, in require_dispatcher_or_pm
190
- if user.app_role not in [AppRole.PLATFORM_ADMIN.value, AppRole.PROJECT_MANAGER.value, AppRole.DISPATCHER.value]:
191
- ^^^^^^^^^^^^^
192
- AttributeError: 'User' object has no attribute 'app_role'
193
- INFO: 10.16.37.13:60311 - "GET /health HTTP/1.1" 200 OK
194
- INFO: 10.16.13.79:11998 - "GET /health HTTP/1.1" 200 OK
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ===== Application Startup at 2025-12-13 12:50:49 =====
2
 
3
  INFO: Started server process [7]
4
  INFO: Waiting for application startup.
5
+ INFO: 2025-12-13T12:51:02 - app.main: ============================================================
6
+ INFO: 2025-12-13T12:51:02 - app.main: 🚀 SwiftOps API v1.0.0 | PRODUCTION
7
+ INFO: 2025-12-13T12:51:02 - app.main: 📊 Dashboard: Enabled
8
+ INFO: 2025-12-13T12:51:02 - app.main: ============================================================
9
+ INFO: 2025-12-13T12:51:02 - app.main: 📦 Database:
10
+ INFO: 2025-12-13T12:51:02 - app.main: ✓ Connected | 45 tables | 6 users
11
+ INFO: 2025-12-13T12:51:02 - app.main: 💾 Cache & Sessions:
12
+ INFO: 2025-12-13T12:51:03 - app.services.otp_service: ✅ OTP Service initialized with Redis storage
13
+ INFO: 2025-12-13T12:51:03 - app.main: ✓ Redis: Connected
14
+ INFO: 2025-12-13T12:51:03 - app.main: 🔌 External Services:
15
+ INFO: 2025-12-13T12:51:04 - app.main: ✓ Cloudinary: Connected
16
+ INFO: 2025-12-13T12:51:04 - app.main: ✓ Resend: Configured
17
+ INFO: 2025-12-13T12:51:04 - app.main: ○ WASender: Disconnected
18
+ INFO: 2025-12-13T12:51:04 - app.main: ✓ Supabase: Connected | 6 buckets
19
+ INFO: 2025-12-13T12:51:04 - app.main: ============================================================
20
+ INFO: 2025-12-13T12:51:04 - app.main: ✅ Startup complete | Ready to serve requests
21
+ INFO: 2025-12-13T12:51:04 - 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.13.79:1515 - "GET /health HTTP/1.1" 200 OK
25
+ INFO: 10.16.13.79:33230 - "GET /health HTTP/1.1" 200 OK
26
+ INFO: 10.16.37.13:29054 - "GET /health HTTP/1.1" 200 OK
27
+ INFO: 10.16.37.13:60015 - "GET /health HTTP/1.1" 200 OK
28
+ INFO: 10.16.37.13:15374 - "GET /health HTTP/1.1" 200 OK
29
+ INFO: 10.16.13.79:51701 - "GET /health HTTP/1.1" 200 OK
30
+ INFO: 10.16.37.13:62346 - "GET /health HTTP/1.1" 200 OK
31
+ INFO: 10.16.13.79:16683 - "GET /health HTTP/1.1" 200 OK
32
+ INFO: 2025-12-13T12:55:53 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
33
+ INFO: 2025-12-13T12:55:53 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
34
+ INFO: 10.16.13.79:50630 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/team HTTP/1.1" 200 OK
35
+ INFO: 10.16.37.13:31510 - "GET /health HTTP/1.1" 200 OK
36
+ INFO: 10.16.37.13:44472 - "GET /health HTTP/1.1" 200 OK
37
+ INFO: 2025-12-13T12:57:05 - app.services.timesheet_realtime_service: Timesheet 7d9fa491-c16d-42b2-8115-b02d98873b64 updated for assignment_created. Entity: ticket_assignment:cef4dc07-81ee-402e-b385-b27198523108
38
+ INFO: 2025-12-13T12:57:05 - app.services.ticket_assignment_service: Ticket 11367b6d-6d4e-435f-9c8e-f03ae90d429e assigned to viya - notification queued
39
+ INFO: 10.16.37.13:44472 - "POST /api/v1/ticket-assignments/tickets/11367b6d-6d4e-435f-9c8e-f03ae90d429e/assign HTTP/1.1" 201 Created
40
+ INFO: 10.16.13.79:14199 - "GET /api/v1/tickets/11367b6d-6d4e-435f-9c8e-f03ae90d429e/detail HTTP/1.1" 200 OK
41
+ INFO: 10.16.37.13:38714 - "GET /health HTTP/1.1" 200 OK
42
+ INFO: 2025-12-13T12:57:25 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
43
+ INFO: 2025-12-13T12:57:25 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
44
+ INFO: 10.16.37.13:27734 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions HTTP/1.1" 200 OK
45
+ INFO: 2025-12-13T12:57:25 - app.services.ticket_service: Listed 6 tickets (total: 6) for user 43b778b0-2062-4724-abbb-916a4835a9b0
46
+ INFO: 10.16.13.79:21909 - "GET /api/v1/tickets?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=50&status=open%2Cpending_review HTTP/1.1" 200 OK
47
+ INFO: 10.16.13.79:27642 - "GET /api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&status=open%2Cpending_review HTTP/1.1" 200 OK
48
+ INFO: 2025-12-13T12:57:28 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
49
+ INFO: 2025-12-13T12:57:28 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
50
+ INFO: 2025-12-13T12:57:28 - app.services.dashboard_service: Dashboard cache MISS for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user 43b778b0-2062-4724-abbb-916a4835a9b0 - building fresh data
51
+ INFO: 2025-12-13T12:57:28 - app.services.dashboard_service: Built and cached dashboard for project 0ade6bd1-e492-4e25-b681-59f42058d29a
52
+ INFO: 10.16.37.13:31959 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
53
+ INFO: 10.16.37.13:31959 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
54
+ INFO: 10.16.13.79:34657 - "GET /health HTTP/1.1" 200 OK
55
+ INFO: 2025-12-13T12:57:55 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
56
+ INFO: 2025-12-13T12:57:55 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
57
+ INFO: 10.16.37.13:16488 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
58
+ INFO: 2025-12-13T12:57:56 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
59
+ INFO: 2025-12-13T12:57:56 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
60
+ INFO: 10.16.37.13:16488 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
61
+ INFO: 2025-12-13T12:57:56 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
62
+ INFO: 2025-12-13T12:57:56 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
63
+ INFO: 10.16.13.79:34657 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
64
+ INFO: 10.16.37.13:16488 - "GET /api/v1/tickets/11367b6d-6d4e-435f-9c8e-f03ae90d429e/detail HTTP/1.1" 200 OK
65
+ INFO: 10.16.13.79:34657 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
66
+ INFO: 10.16.37.13:23615 - "GET /health HTTP/1.1" 200 OK
67
+ INFO: 10.16.13.79:24227 - "GET /health HTTP/1.1" 200 OK
68
+ INFO: 10.16.37.13:12926 - "GET /health HTTP/1.1" 200 OK
69
+ INFO: 10.16.13.79:9571 - "GET /health HTTP/1.1" 200 OK
70
+ INFO: 10.16.13.79:23058 - "GET /health HTTP/1.1" 200 OK
71
+ INFO: 2025-12-13T13:02:26 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
72
+ INFO: 2025-12-13T13:02:26 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
73
+ INFO: 2025-12-13T13:02:26 - app.services.dashboard_service: Dashboard cache HIT for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user 43b778b0-2062-4724-abbb-916a4835a9b0
74
+ INFO: 10.16.37.13:38998 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
75
+ INFO: 10.16.37.13:48026 - "GET /api/v1/tickets/2de41ce7-dff1-4151-9710-87958d18b5c4/detail HTTP/1.1" 200 OK
76
+ INFO: 10.16.13.79:31516 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/4cd27765-5720-4cc0-872e-bf0da3cd1898 HTTP/1.1" 200 OK
77
+ INFO: 10.16.37.13:49675 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
78
+ INFO: 10.16.13.79:43107 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
79
+ INFO: 10.16.13.79:8275 - "GET /health HTTP/1.1" 200 OK
80
+ INFO: 10.16.13.79:13891 - "GET /health HTTP/1.1" 200 OK
81
+ INFO: 10.16.13.79:25629 - "GET /health HTTP/1.1" 200 OK
82
+ INFO: 10.16.37.13:43291 - "GET /health HTTP/1.1" 200 OK
83
+ INFO: 10.16.13.79:32273 - "GET /health HTTP/1.1" 200 OK
84
+ INFO: 10.16.37.13:62668 - "GET /health HTTP/1.1" 200 OK
85
+ INFO: 2025-12-13T13:08:32 - app.core.supabase_auth: Session refreshed successfully
86
+ INFO: 2025-12-13T13:08:32 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
87
+ INFO: 10.16.37.13:59966 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
88
+ INFO: 2025-12-13T13:10:22 - app.core.supabase_auth: Session refreshed successfully
89
+ INFO: 2025-12-13T13:10:22 - app.api.v1.auth: Token refreshed successfully for: nadina73@nembors.com
90
+ INFO: 10.16.37.13:12201 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
91
+ INFO: 10.16.13.79:19406 - "GET /health HTTP/1.1" 200 OK
92
+ INFO: 10.16.37.13:65090 - "GET /health HTTP/1.1" 200 OK
93
+ INFO: 10.16.13.79:55398 - "GET /health HTTP/1.1" 200 OK
94
+ INFO: 10.16.37.13:8205 - "GET /health HTTP/1.1" 200 OK
95
+ INFO: 10.16.13.79:4569 - "GET /health HTTP/1.1" 200 OK
96
+ INFO: 10.16.37.13:46876 - "GET /health HTTP/1.1" 200 OK
97
+ INFO: 10.16.13.79:2648 - "GET /health HTTP/1.1" 200 OK
98
+ INFO: 10.16.37.13:21839 - "GET /health HTTP/1.1" 200 OK
99
+ INFO: 10.16.13.79:49883 - "GET /health HTTP/1.1" 200 OK
100
+ INFO: 10.16.37.13:56870 - "GET /health HTTP/1.1" 200 OK
101
+ INFO: 10.16.13.79:44817 - "GET /health HTTP/1.1" 200 OK
102
+ INFO: 10.16.37.13:21731 - "GET /health HTTP/1.1" 200 OK
103
+ INFO: 10.16.37.13:8029 - "GET /health HTTP/1.1" 200 OK
104
+ INFO: 10.16.37.13:20594 - "GET / HTTP/1.1" 200 OK
105
+ INFO: 10.16.13.79:7048 - "GET /health HTTP/1.1" 200 OK
106
+ INFO: 10.16.13.79:52634 - "GET /health HTTP/1.1" 200 OK
107
+ INFO: 10.16.37.13:30693 - "GET /health HTTP/1.1" 200 OK
108
+ INFO: 10.16.13.79:6778 - "GET /health HTTP/1.1" 200 OK
109
+ INFO: 10.16.37.13:15178 - "GET /health HTTP/1.1" 200 OK
110
+ INFO: 10.16.37.13:15178 - "GET /health HTTP/1.1" 200 OK
111
+ INFO: 10.16.37.13:48211 - "GET /health HTTP/1.1" 200 OK
112
+ INFO: 10.16.13.79:62244 - "GET /health HTTP/1.1" 200 OK
113
+ INFO: 10.16.37.13:11095 - "GET /health HTTP/1.1" 200 OK
114
+ INFO: 10.16.13.79:35135 - "GET /health HTTP/1.1" 200 OK
115
+ INFO: 2025-12-13T14:03:33 - app.core.supabase_auth: Session refreshed successfully
116
+ INFO: 2025-12-13T14:03:33 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
117
+ INFO: 10.16.37.13:40505 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
118
+ INFO: 2025-12-13T14:05:23 - app.core.supabase_auth: Session refreshed successfully
119
+ INFO: 2025-12-13T14:05:23 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
120
+ INFO: 10.16.13.79:30326 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
121
+ INFO: 10.16.13.79:40787 - "GET /health HTTP/1.1" 200 OK
122
+ INFO: 10.16.37.13:41666 - "GET /health HTTP/1.1" 200 OK
123
+ INFO: 10.16.13.79:36662 - "GET /health HTTP/1.1" 200 OK
124
+ INFO: 10.16.37.13:58513 - "GET /health HTTP/1.1" 200 OK
125
+ INFO: 10.16.37.13:4072 - "GET /health HTTP/1.1" 200 OK
126
+ INFO: 10.16.13.79:7100 - "GET /health HTTP/1.1" 200 OK
127
+ INFO: 10.16.37.13:14145 - "GET /health HTTP/1.1" 200 OK
128
+ INFO: 10.16.13.79:9218 - "GET /health HTTP/1.1" 200 OK
129
+ INFO: 10.16.37.13:26994 - "GET /health HTTP/1.1" 200 OK
130
+ INFO: 10.16.13.79:45806 - "GET /health HTTP/1.1" 200 OK
131
+ INFO: 10.16.13.79:41985 - "GET /health HTTP/1.1" 200 OK
132
+ INFO: 10.16.37.13:34750 - "GET /health HTTP/1.1" 200 OK
133
+ INFO: 10.16.13.79:37177 - "GET /health HTTP/1.1" 200 OK
134
+ INFO: 10.16.13.79:49565 - "GET /health HTTP/1.1" 200 OK
135
+ INFO: 10.16.37.13:45390 - "GET /health HTTP/1.1" 200 OK
136
+ INFO: 10.16.13.79:51042 - "GET /health HTTP/1.1" 200 OK
137
+ INFO: 10.16.37.13:27460 - "GET /health HTTP/1.1" 200 OK
138
+ INFO: 10.16.13.79:13115 - "GET /health HTTP/1.1" 200 OK
139
+ INFO: 10.16.37.13:23299 - "GET /health HTTP/1.1" 200 OK
140
+ INFO: 10.16.37.13:10751 - "GET /health HTTP/1.1" 200 OK
141
+ INFO: 10.16.37.13:16426 - "GET /health HTTP/1.1" 200 OK
142
+ INFO: 10.16.37.13:8028 - "GET /health HTTP/1.1" 200 OK
143
+ INFO: 2025-12-13T14:58:35 - app.core.supabase_auth: Session refreshed successfully
144
+ INFO: 2025-12-13T14:58:35 - app.api.v1.auth: Token refreshed successfully for: viyisa8151@feralrex.com
145
+ INFO: 10.16.37.13:52842 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
146
+ INFO: 2025-12-13T15:00:25 - app.core.supabase_auth: Session refreshed successfully
147
+ INFO: 2025-12-13T15:00:25 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
148
+ INFO: 10.16.37.13:55158 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
149
+ INFO: 10.16.37.13:27321 - "GET /health HTTP/1.1" 200 OK
150
+ INFO: 10.16.37.13:1867 - "GET /health HTTP/1.1" 200 OK
151
+ INFO: 10.16.13.79:47834 - "GET /health HTTP/1.1" 200 OK
152
+ INFO: 10.16.13.79:22727 - "GET /health HTTP/1.1" 200 OK
153
+ INFO: 10.16.13.79:27213 - "GET /health HTTP/1.1" 200 OK
154
+ INFO: 10.16.37.13:29666 - "GET /health HTTP/1.1" 200 OK
155
+ INFO: 10.16.13.79:20455 - "GET /health HTTP/1.1" 200 OK
156
+ INFO: 10.16.37.13:27046 - "GET /health HTTP/1.1" 200 OK
157
+ INFO: 10.16.37.13:11604 - "GET /health HTTP/1.1" 200 OK
158
+ INFO: 10.16.37.13:47785 - "GET /health HTTP/1.1" 200 OK
159
+ INFO: 10.16.37.13:18832 - "GET /health HTTP/1.1" 200 OK
160
+ INFO: 10.16.37.13:25430 - "GET /health HTTP/1.1" 200 OK
161
+ INFO: 10.16.25.209:32335 - "GET /health HTTP/1.1" 200 OK
162
+ INFO: 10.16.25.209:62197 - "GET /health HTTP/1.1" 200 OK
163
+ INFO: 10.16.37.13:30824 - "GET /health HTTP/1.1" 200 OK
164
+ INFO: 10.16.25.209:34056 - "GET /health HTTP/1.1" 200 OK
165
+ INFO: 10.16.43.133:50034 - "GET /health HTTP/1.1" 200 OK
166
+ INFO: 10.16.34.155:10830 - "GET /health HTTP/1.1" 200 OK
167
+ INFO: 10.16.13.79:13914 - "GET /health HTTP/1.1" 200 OK
168
+ INFO: 10.16.13.79:13914 - "GET /health HTTP/1.1" 200 OK
169
+ INFO: 10.16.13.79:2493 - "GET /health HTTP/1.1" 200 OK
170
+ INFO: 10.16.37.13:54532 - "GET /health HTTP/1.1" 200 OK
171
+ INFO: 2025-12-13T15:53:39 - app.core.supabase_auth: Session refreshed successfully
172
+ INFO: 2025-12-13T15:53:39 - app.api.v1.auth: Token refreshed successfully for: viyisa8151@feralrex.com
173
+ INFO: 10.16.13.79:17752 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
174
+ INFO: 2025-12-13T15:55:28 - app.core.supabase_auth: Session refreshed successfully
175
+ INFO: 2025-12-13T15:55:28 - app.api.v1.auth: Token refreshed successfully for: nadina73@nembors.com
176
+ INFO: 10.16.37.13:60661 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
177
+ INFO: 10.16.37.13:11024 - "GET /health HTTP/1.1" 200 OK
178
+ INFO: 10.16.37.13:11024 - "GET /health HTTP/1.1" 200 OK
179
+ INFO: 10.16.37.13:30475 - "GET /health HTTP/1.1" 200 OK
180
+ INFO: 10.16.13.79:4141 - "GET /health HTTP/1.1" 200 OK
181
+ INFO: 10.16.43.133:58702 - "GET /health HTTP/1.1" 200 OK
182
+ INFO: 10.16.37.13:52256 - "GET /health HTTP/1.1" 200 OK
183
+ INFO: 10.16.25.209:25427 - "GET /health HTTP/1.1" 200 OK
184
+ INFO: 10.16.12.109:56027 - "GET /health HTTP/1.1" 200 OK
185
+ INFO: 10.16.34.155:24827 - "GET /health HTTP/1.1" 200 OK
186
+ INFO: 10.16.13.79:48542 - "GET /health HTTP/1.1" 200 OK
187
+ INFO: 10.16.25.209:13105 - "GET /health HTTP/1.1" 200 OK
188
+ INFO: 10.16.43.133:64961 - "GET /health HTTP/1.1" 200 OK
189
+ INFO: 10.16.26.144:65459 - "GET /health HTTP/1.1" 200 OK
190
+ INFO: 10.16.25.209:23419 - "GET /health HTTP/1.1" 200 OK
191
+ INFO: 10.16.25.209:2882 - "GET /health HTTP/1.1" 200 OK
192
+ INFO: 10.16.34.155:41788 - "GET /health HTTP/1.1" 200 OK
193
+ INFO: 10.16.26.144:35006 - "GET /health HTTP/1.1" 200 OK
194
+ INFO: 10.16.13.79:28932 - "GET /health HTTP/1.1" 200 OK
195
+ INFO: 10.16.37.13:13169 - "GET /health HTTP/1.1" 200 OK
196
+ INFO: 10.16.12.109:4373 - "GET /health HTTP/1.1" 200 OK
197
+ INFO: 10.16.43.133:26893 - "GET /health HTTP/1.1" 200 OK
198
+ INFO: 10.16.12.109:35287 - "GET /health HTTP/1.1" 200 OK
199
+ INFO: 2025-12-13T16:48:42 - app.core.supabase_auth: Session refreshed successfully
200
+ INFO: 2025-12-13T16:48:42 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
201
+ INFO: 10.16.34.155:15127 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
202
+ INFO: 2025-12-13T16:50:31 - app.core.supabase_auth: Session refreshed successfully
203
+ INFO: 2025-12-13T16:50:31 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
204
+ INFO: 10.16.12.109:64741 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
205
+ INFO: 10.16.12.109:24653 - "GET /health HTTP/1.1" 200 OK
206
+ INFO: 10.16.34.155:61079 - "GET /health HTTP/1.1" 200 OK
207
+ INFO: 10.16.37.13:15131 - "GET /health HTTP/1.1" 200 OK
208
+ INFO: 10.16.12.109:17959 - "GET /health HTTP/1.1" 200 OK
209
+ INFO: 10.16.43.133:39086 - "GET /health HTTP/1.1" 200 OK
210
+ INFO: 10.16.43.133:39086 - "GET /health HTTP/1.1" 200 OK
211
+ INFO: 10.16.13.79:42431 - "GET /health HTTP/1.1" 200 OK
212
+ INFO: 10.16.43.133:25824 - "GET /health HTTP/1.1" 200 OK
213
+ INFO: 10.16.43.133:62954 - "GET /health HTTP/1.1" 200 OK
214
+ INFO: 10.16.13.79:3510 - "GET /health HTTP/1.1" 200 OK
215
+ INFO: 10.16.25.209:23492 - "GET /health HTTP/1.1" 200 OK
216
+ INFO: 10.16.13.79:45718 - "GET /health HTTP/1.1" 200 OK
217
+ INFO: 10.16.25.209:2620 - "GET /health HTTP/1.1" 200 OK
218
+ INFO: 10.16.25.209:2620 - "GET /health HTTP/1.1" 200 OK
219
+ INFO: 10.16.13.79:28774 - "GET /health HTTP/1.1" 200 OK
220
+ INFO: 10.16.13.79:28774 - "GET /health HTTP/1.1" 200 OK
221
+ INFO: 10.16.13.79:14907 - "GET /health HTTP/1.1" 200 OK
222
+ INFO: 10.16.13.79:13703 - "GET /health HTTP/1.1" 200 OK
223
+ INFO: 10.16.13.79:36362 - "GET /health HTTP/1.1" 200 OK
224
+ INFO: 10.16.13.79:36362 - "GET /health HTTP/1.1" 200 OK
225
+ INFO: 10.16.13.79:24702 - "GET /health HTTP/1.1" 200 OK
226
+ INFO: 10.16.25.209:24975 - "GET /health HTTP/1.1" 200 OK
227
+ INFO: 2025-12-13T17:43:47 - app.core.supabase_auth: Session refreshed successfully
228
+ INFO: 2025-12-13T17:43:47 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
229
+ INFO: 10.16.13.79:39668 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
230
+ INFO: 2025-12-13T17:47:10 - app.core.supabase_auth: Session refreshed successfully
231
+ INFO: 2025-12-13T17:47:10 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
232
+ INFO: 10.16.13.79:27078 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
233
+ INFO: 10.16.13.79:63773 - "GET /health HTTP/1.1" 200 OK
234
+ INFO: 10.16.13.79:63773 - "GET /health HTTP/1.1" 200 OK
235
+ INFO: 10.16.25.209:12326 - "GET /health HTTP/1.1" 200 OK
236
+ INFO: 10.16.13.79:44150 - "GET /health HTTP/1.1" 200 OK
237
+ INFO: 10.16.25.209:54428 - "GET /health HTTP/1.1" 200 OK
238
+ INFO: 10.16.13.79:28075 - "GET /health HTTP/1.1" 200 OK
239
+ INFO: 10.16.13.79:30097 - "GET /health HTTP/1.1" 200 OK
240
+ INFO: 10.16.25.209:53598 - "GET /health HTTP/1.1" 200 OK
241
+ INFO: 10.16.25.209:21028 - "GET /health HTTP/1.1" 200 OK
242
+ INFO: 10.16.13.79:36516 - "GET /health HTTP/1.1" 200 OK
243
+ INFO: 10.16.13.79:18077 - "GET /health HTTP/1.1" 200 OK
244
+ INFO: 10.16.25.209:1527 - "GET /health HTTP/1.1" 200 OK
245
+ INFO: 10.16.13.79:13070 - "GET /health HTTP/1.1" 200 OK
246
+ INFO: 10.16.25.209:1561 - "GET /health HTTP/1.1" 200 OK
247
+ INFO: 10.16.25.209:2324 - "GET /health HTTP/1.1" 200 OK
248
+ INFO: 10.16.13.79:21267 - "GET /health HTTP/1.1" 200 OK
249
+ INFO: 10.16.13.79:42246 - "GET /health HTTP/1.1" 200 OK
250
+ INFO: 10.16.25.209:63529 - "GET /health HTTP/1.1" 200 OK
251
+ INFO: 10.16.25.209:23584 - "GET /health HTTP/1.1" 200 OK
252
+ INFO: 10.16.25.209:23584 - "GET /health HTTP/1.1" 200 OK
253
+ INFO: 10.16.25.209:35525 - "GET /health HTTP/1.1" 200 OK
254
+ INFO: 10.16.25.209:35525 - "GET /health HTTP/1.1" 200 OK
255
+ INFO: 2025-12-13T18:38:49 - app.core.supabase_auth: Session refreshed successfully
256
+ INFO: 2025-12-13T18:38:49 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
257
+ INFO: 10.16.25.209:52027 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
258
+ INFO: 2025-12-13T18:42:16 - app.core.supabase_auth: Session refreshed successfully
259
+ INFO: 2025-12-13T18:42:16 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
260
+ INFO: 10.16.25.209:59451 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
261
+ INFO: 10.16.25.209:41454 - "GET /health HTTP/1.1" 200 OK
262
+ INFO: 10.16.13.79:20769 - "GET /health HTTP/1.1" 200 OK
263
+ INFO: 10.16.13.79:31662 - "GET /health HTTP/1.1" 200 OK
264
+ INFO: 10.16.13.79:31662 - "GET /health HTTP/1.1" 200 OK
265
+ INFO: 10.16.25.209:46801 - "GET /health HTTP/1.1" 200 OK
266
+ INFO: 10.16.13.79:34337 - "GET /health HTTP/1.1" 200 OK
267
+ INFO: 10.16.13.79:48402 - "GET /health HTTP/1.1" 200 OK
268
+ INFO: 10.16.13.79:48402 - "GET /health HTTP/1.1" 200 OK
269
+ INFO: 10.16.25.209:24273 - "GET /health HTTP/1.1" 200 OK
270
+ INFO: 10.16.13.79:58850 - "GET /health HTTP/1.1" 200 OK
271
+ INFO: 10.16.25.209:27187 - "GET /health HTTP/1.1" 200 OK
272
+ INFO: 10.16.13.79:55276 - "GET /health HTTP/1.1" 200 OK
273
+ INFO: 10.16.25.209:63615 - "GET /health HTTP/1.1" 200 OK
274
+ INFO: 10.16.13.79:57477 - "GET /health HTTP/1.1" 200 OK
275
+ INFO: 10.16.13.79:37547 - "GET /health HTTP/1.1" 200 OK
276
+ INFO: 10.16.25.209:34629 - "GET /health HTTP/1.1" 200 OK
277
+ INFO: 10.16.13.79:61278 - "GET /health HTTP/1.1" 200 OK
278
+ INFO: 10.16.25.209:46661 - "GET /health HTTP/1.1" 200 OK
279
+ INFO: 10.16.13.79:58454 - "GET /health HTTP/1.1" 200 OK
280
+ INFO: 10.16.13.79:31996 - "GET /health HTTP/1.1" 200 OK
281
+ INFO: 10.16.13.79:22755 - "GET /health HTTP/1.1" 200 OK
282
+ INFO: 10.16.25.209:9555 - "GET /health HTTP/1.1" 200 OK
283
+ INFO: 2025-12-13T19:33:51 - app.core.supabase_auth: Session refreshed successfully
284
+ INFO: 2025-12-13T19:33:51 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
285
+ INFO: 10.16.25.209:28089 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
286
+ INFO: 2025-12-13T19:37:16 - app.core.supabase_auth: Session refreshed successfully
287
+ INFO: 2025-12-13T19:37:17 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
288
+ INFO: 10.16.25.209:17105 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
289
+ INFO: 10.16.25.209:11790 - "GET /health HTTP/1.1" 200 OK
290
+ INFO: 10.16.25.209:11790 - "GET /health HTTP/1.1" 200 OK
291
+ INFO: 10.16.13.79:57906 - "GET /health HTTP/1.1" 200 OK
292
+ INFO: 10.16.13.79:57906 - "GET /health HTTP/1.1" 200 OK
293
+ INFO: 10.16.25.209:57794 - "GET /health HTTP/1.1" 200 OK
294
+ INFO: 10.16.25.209:57794 - "GET /health HTTP/1.1" 200 OK
295
+ INFO: 10.16.13.79:51940 - "GET /health HTTP/1.1" 200 OK
296
+ INFO: 10.16.25.209:31296 - "GET /health HTTP/1.1" 200 OK
297
+ INFO: 10.16.13.79:33251 - "GET /health HTTP/1.1" 200 OK
298
+ INFO: 10.16.13.79:38330 - "GET /health HTTP/1.1" 200 OK
299
+ INFO: 10.16.25.209:26645 - "GET /health HTTP/1.1" 200 OK
300
+ INFO: 10.16.13.79:41717 - "GET /health HTTP/1.1" 200 OK
301
+ INFO: 10.16.13.79:58821 - "GET /health HTTP/1.1" 200 OK
302
+ INFO: 10.16.13.79:12900 - "GET /health HTTP/1.1" 200 OK
303
+ INFO: 10.16.13.79:10816 - "GET /health HTTP/1.1" 200 OK
304
+ INFO: 10.16.13.79:10816 - "GET /health HTTP/1.1" 200 OK
305
+ INFO: 10.16.13.79:1252 - "GET /health HTTP/1.1" 200 OK
306
+ INFO: 10.16.25.209:22828 - "GET /health HTTP/1.1" 200 OK
307
+ INFO: 10.16.13.79:2455 - "GET /health HTTP/1.1" 200 OK
308
+ INFO: 10.16.25.209:3087 - "GET /health HTTP/1.1" 200 OK
309
+ INFO: 10.16.25.209:58285 - "GET /health HTTP/1.1" 200 OK
310
+ INFO: 10.16.13.79:19162 - "GET /health HTTP/1.1" 200 OK
311
+ INFO: 2025-12-13T20:28:53 - app.core.supabase_auth: Session refreshed successfully
312
+ INFO: 2025-12-13T20:28:53 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
313
+ INFO: 10.16.13.79:37066 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
314
+ INFO: 2025-12-13T20:32:18 - app.core.supabase_auth: Session refreshed successfully
315
+ INFO: 2025-12-13T20:32:18 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
316
+ INFO: 10.16.13.79:47974 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
317
+ INFO: 10.16.25.209:48751 - "GET /health HTTP/1.1" 200 OK
318
+ INFO: 10.16.25.209:48751 - "GET /health HTTP/1.1" 200 OK
319
+ INFO: 10.16.13.79:60731 - "GET /health HTTP/1.1" 200 OK
320
+ INFO: 10.16.13.79:60731 - "GET /health HTTP/1.1" 200 OK
321
+ INFO: 10.16.25.209:45857 - "GET /health HTTP/1.1" 200 OK
322
+ INFO: 10.16.13.79:36867 - "GET /health HTTP/1.1" 200 OK
323
+ INFO: 10.16.25.209:57039 - "GET /health HTTP/1.1" 200 OK
324
+ INFO: 10.16.13.79:50358 - "GET /health HTTP/1.1" 200 OK
325
+ INFO: 10.16.13.79:1444 - "GET /health HTTP/1.1" 200 OK
326
+ INFO: 10.16.13.79:40873 - "GET /health HTTP/1.1" 200 OK
327
+ INFO: 10.16.25.209:11575 - "GET /health HTTP/1.1" 200 OK
328
+ INFO: 10.16.13.79:12310 - "GET /health HTTP/1.1" 200 OK
329
+ INFO: 10.16.25.209:34941 - "GET /health HTTP/1.1" 200 OK
330
+ INFO: 10.16.25.209:17143 - "GET /health HTTP/1.1" 200 OK
331
+ INFO: 10.16.25.209:55437 - "GET /health HTTP/1.1" 200 OK
332
+ INFO: 10.16.13.79:32607 - "GET /health HTTP/1.1" 200 OK
333
+ INFO: 10.16.25.209:20210 - "GET /health HTTP/1.1" 200 OK
334
+ INFO: 10.16.13.79:31708 - "GET /health HTTP/1.1" 200 OK
335
+ INFO: 10.16.13.79:46814 - "GET /health HTTP/1.1" 200 OK
336
+ INFO: 10.16.13.79:46814 - "GET /health HTTP/1.1" 200 OK
337
+ INFO: 10.16.13.79:53420 - "GET /health HTTP/1.1" 200 OK
338
+ INFO: 10.16.13.79:54527 - "GET /health HTTP/1.1" 200 OK
339
+ INFO: 2025-12-13T21:23:55 - app.core.supabase_auth: Session refreshed successfully
340
+ INFO: 2025-12-13T21:23:56 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
341
+ INFO: 10.16.13.79:21627 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
342
+ INFO: 2025-12-13T21:27:19 - app.core.supabase_auth: Session refreshed successfully
343
+ INFO: 2025-12-13T21:27:19 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
344
+ INFO: 10.16.13.79:54836 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
345
+ INFO: 10.16.13.79:62235 - "GET /health HTTP/1.1" 200 OK
346
+ INFO: 10.16.13.79:62235 - "GET /health HTTP/1.1" 200 OK
347
+ INFO: 10.16.25.209:18012 - "GET /health HTTP/1.1" 200 OK
348
+ INFO: 10.16.25.209:18012 - "GET /health HTTP/1.1" 200 OK
349
+ INFO: 10.16.13.79:62153 - "GET /health HTTP/1.1" 200 OK
350
+ INFO: 10.16.25.209:8992 - "GET /health HTTP/1.1" 200 OK
351
+ INFO: 10.16.25.209:51249 - "GET /health HTTP/1.1" 200 OK
352
+ INFO: 10.16.13.79:26005 - "GET /health HTTP/1.1" 200 OK
353
+ INFO: 10.16.25.209:40668 - "GET /health HTTP/1.1" 200 OK
354
+ INFO: 10.16.25.209:40668 - "GET /health HTTP/1.1" 200 OK
355
+ INFO: 10.16.25.209:53751 - "GET /health HTTP/1.1" 200 OK
356
+ INFO: 10.16.13.79:59803 - "GET /health HTTP/1.1" 200 OK
357
+ INFO: 10.16.13.79:11206 - "GET /health HTTP/1.1" 200 OK
358
+ INFO: 10.16.13.79:31073 - "GET /health HTTP/1.1" 200 OK
359
+ INFO: 10.16.13.79:29431 - "GET /health HTTP/1.1" 200 OK
360
+ INFO: 10.16.25.209:28394 - "GET /health HTTP/1.1" 200 OK
361
+ INFO: 10.16.25.209:52548 - "GET /health HTTP/1.1" 200 OK
362
+ INFO: 10.16.25.209:52548 - "GET /health HTTP/1.1" 200 OK
363
+ INFO: 10.16.13.79:7117 - "GET /health HTTP/1.1" 200 OK
364
+ INFO: 10.16.13.79:50455 - "GET /health HTTP/1.1" 200 OK
365
+ INFO: 10.16.25.209:27097 - "GET /health HTTP/1.1" 200 OK
366
+ INFO: 10.16.37.13:2044 - "GET /health HTTP/1.1" 200 OK
367
+ INFO: 2025-12-13T22:18:57 - app.core.supabase_auth: Session refreshed successfully
368
+ INFO: 2025-12-13T22:18:57 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
369
+ INFO: 10.16.25.209:50268 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
370
+ INFO: 2025-12-13T22:22:21 - app.core.supabase_auth: Session refreshed successfully
371
+ INFO: 2025-12-13T22:22:21 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
372
+ INFO: 10.16.37.13:51054 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
373
+ INFO: 10.16.13.79:42182 - "GET /health HTTP/1.1" 200 OK
374
+ INFO: 10.16.37.13:10081 - "GET /health HTTP/1.1" 200 OK
375
+ INFO: 10.16.13.79:14204 - "GET /health HTTP/1.1" 200 OK
376
+ INFO: 10.16.25.209:28578 - "GET /health HTTP/1.1" 200 OK
377
+ INFO: 10.16.25.209:42365 - "GET /health HTTP/1.1" 200 OK
378
+ INFO: 10.16.13.79:13104 - "GET /health HTTP/1.1" 200 OK
379
+ INFO: 10.16.13.79:14481 - "GET /health HTTP/1.1" 200 OK
380
+ INFO: 10.16.25.209:12483 - "GET /health HTTP/1.1" 200 OK
381
+ INFO: 10.16.25.209:6282 - "GET /health HTTP/1.1" 200 OK
382
+ INFO: 10.16.13.79:60750 - "GET /health HTTP/1.1" 200 OK
383
+ INFO: 10.16.25.209:9771 - "GET /health HTTP/1.1" 200 OK
384
+ INFO: 10.16.13.79:14860 - "GET /health HTTP/1.1" 200 OK
385
+ INFO: 10.16.25.209:62429 - "GET /health HTTP/1.1" 200 OK
386
+ INFO: 10.16.13.79:43744 - "GET /health HTTP/1.1" 200 OK
387
+ INFO: 10.16.25.209:65268 - "GET /health HTTP/1.1" 200 OK
388
+ INFO: 10.16.25.209:65268 - "GET /health HTTP/1.1" 200 OK
389
+ INFO: 10.16.13.79:56105 - "GET /health HTTP/1.1" 200 OK
390
+ INFO: 10.16.25.209:10662 - "GET /health HTTP/1.1" 200 OK
391
+ INFO: 10.16.25.209:13126 - "GET /health HTTP/1.1" 200 OK
392
+ INFO: 10.16.13.79:58672 - "GET /health HTTP/1.1" 200 OK
393
+ INFO: 10.16.13.79:45498 - "GET /health HTTP/1.1" 200 OK
394
+ INFO: 10.16.25.209:3140 - "GET /health HTTP/1.1" 200 OK
395
+ INFO: 2025-12-13T23:13:58 - app.core.supabase_auth: Session refreshed successfully
396
+ INFO: 2025-12-13T23:13:58 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
397
+ INFO: 10.16.13.79:45475 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
398
+ INFO: 2025-12-13T23:17:23 - app.core.supabase_auth: Session refreshed successfully
399
+ INFO: 2025-12-13T23:17:23 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
400
+ INFO: 10.16.25.209:55459 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
401
+ INFO: 10.16.25.209:13060 - "GET /health HTTP/1.1" 200 OK
402
+ INFO: 10.16.13.79:24525 - "GET /health HTTP/1.1" 200 OK
403
+ INFO: 10.16.25.209:39586 - "GET /health HTTP/1.1" 200 OK
404
+ INFO: 10.16.25.209:26668 - "GET /health HTTP/1.1" 200 OK
405
+ INFO: 10.16.25.209:27988 - "GET /health HTTP/1.1" 200 OK
406
+ INFO: 10.16.13.79:53037 - "GET /health HTTP/1.1" 200 OK
407
+ INFO: 10.16.13.79:4413 - "GET /health HTTP/1.1" 200 OK
408
+ INFO: 10.16.13.79:50561 - "GET /health HTTP/1.1" 200 OK
409
+ INFO: 10.16.25.209:13451 - "GET /health HTTP/1.1" 200 OK
410
+ INFO: 10.16.13.79:39935 - "GET /health HTTP/1.1" 200 OK
411
+ INFO: 10.16.25.209:43309 - "GET /health HTTP/1.1" 200 OK
412
+ INFO: 10.16.13.79:33392 - "GET /health HTTP/1.1" 200 OK
413
+ INFO: 10.16.25.209:11310 - "GET /health HTTP/1.1" 200 OK
414
+ INFO: 10.16.25.209:11310 - "GET /health HTTP/1.1" 200 OK
415
+ INFO: 10.16.25.209:57872 - "GET /health HTTP/1.1" 200 OK
416
+ INFO: 10.16.13.79:40296 - "GET /health HTTP/1.1" 200 OK
417
+ INFO: 10.16.25.209:36895 - "GET /health HTTP/1.1" 200 OK
418
+ INFO: 10.16.25.209:36895 - "GET /health HTTP/1.1" 200 OK
419
+ INFO: 10.16.25.209:48855 - "GET /health HTTP/1.1" 200 OK
420
+ INFO: 10.16.25.209:57752 - "GET /health HTTP/1.1" 200 OK
421
+ INFO: 10.16.13.79:37012 - "GET /health HTTP/1.1" 200 OK
422
+ INFO: 10.16.25.209:56139 - "GET /health HTTP/1.1" 200 OK
423
+ INFO: 2025-12-14T00:09:00 - app.core.supabase_auth: Session refreshed successfully
424
+ INFO: 2025-12-14T00:09:00 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
425
+ INFO: 10.16.25.209:8767 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
426
+ INFO: 2025-12-14T00:12:24 - app.core.supabase_auth: Session refreshed successfully
427
+ INFO: 2025-12-14T00:12:24 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
428
+ INFO: 10.16.13.79:64783 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
429
+ INFO: 10.16.25.209:53119 - "GET /health HTTP/1.1" 200 OK
430
+ INFO: 10.16.25.209:41358 - "GET /health HTTP/1.1" 200 OK
431
+ INFO: 10.16.13.79:51441 - "GET /health HTTP/1.1" 200 OK
432
+ INFO: 10.16.25.209:14578 - "GET /health HTTP/1.1" 200 OK
433
+ INFO: 10.16.13.79:56190 - "GET /health HTTP/1.1" 200 OK
434
+ INFO: 10.16.13.79:56190 - "GET /health HTTP/1.1" 200 OK
435
+ INFO: 10.16.25.209:42145 - "GET /health HTTP/1.1" 200 OK
436
+ INFO: 10.16.13.79:61338 - "GET /health HTTP/1.1" 200 OK
437
+ INFO: 10.16.13.79:4255 - "GET /health HTTP/1.1" 200 OK
438
+ INFO: 10.16.25.209:64454 - "GET /health HTTP/1.1" 200 OK
439
+ INFO: 10.16.25.209:41300 - "GET /health HTTP/1.1" 200 OK
440
+ INFO: 10.16.13.79:14703 - "GET /health HTTP/1.1" 200 OK
441
+ INFO: 10.16.25.209:37510 - "GET /health HTTP/1.1" 200 OK
442
+ INFO: 10.16.25.209:35956 - "GET /health HTTP/1.1" 200 OK
443
+ INFO: 10.16.25.209:20108 - "GET /health HTTP/1.1" 200 OK
444
+ INFO: 10.16.25.209:20108 - "GET /health HTTP/1.1" 200 OK
445
+ INFO: 10.16.13.79:6573 - "GET /health HTTP/1.1" 200 OK
446
+ INFO: 10.16.25.209:14014 - "GET /health HTTP/1.1" 200 OK
447
+ INFO: 10.16.13.79:12863 - "GET /health HTTP/1.1" 200 OK
448
+ INFO: 10.16.25.209:8007 - "GET /health HTTP/1.1" 200 OK
449
+ INFO: 10.16.13.79:25351 - "GET /health HTTP/1.1" 200 OK
450
+ INFO: 10.16.13.79:25351 - "GET /health HTTP/1.1" 200 OK
451
+ INFO: 2025-12-14T01:04:01 - app.core.supabase_auth: Session refreshed successfully
452
+ INFO: 2025-12-14T01:04:01 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
453
+ INFO: 10.16.13.79:21447 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
454
+ INFO: 2025-12-14T01:07:26 - app.core.supabase_auth: Session refreshed successfully
455
+ INFO: 2025-12-14T01:07:26 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
456
+ INFO: 10.16.25.209:37114 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
457
+ INFO: 10.16.25.209:39197 - "GET /health HTTP/1.1" 200 OK
458
+ INFO: 10.16.25.209:39197 - "GET /health HTTP/1.1" 200 OK
459
+ INFO: 10.16.13.79:34861 - "GET /health HTTP/1.1" 200 OK
460
+ INFO: 10.16.13.79:54181 - "GET /health HTTP/1.1" 200 OK
461
+ INFO: 10.16.25.209:36528 - "GET /health HTTP/1.1" 200 OK
462
+ INFO: 10.16.13.79:48768 - "GET /health HTTP/1.1" 200 OK
463
+ INFO: 10.16.13.79:13297 - "GET /health HTTP/1.1" 200 OK
464
+ INFO: 10.16.13.79:19939 - "GET /health HTTP/1.1" 200 OK
465
+ INFO: 10.16.13.79:9900 - "GET /health HTTP/1.1" 200 OK
466
+ INFO: 10.16.13.79:9900 - "GET /health HTTP/1.1" 200 OK
467
+ INFO: 10.16.25.209:25922 - "GET /health HTTP/1.1" 200 OK
468
+ INFO: 10.16.13.79:61271 - "GET /health HTTP/1.1" 200 OK
469
+ INFO: 10.16.25.209:20454 - "GET /health HTTP/1.1" 200 OK
470
+ INFO: 10.16.13.79:15836 - "GET /health HTTP/1.1" 200 OK
471
+ INFO: 10.16.25.209:48029 - "GET /health HTTP/1.1" 200 OK
472
+ INFO: 10.16.25.209:42336 - "GET /health HTTP/1.1" 200 OK
473
+ INFO: 10.16.13.79:33785 - "GET /health HTTP/1.1" 200 OK
474
+ INFO: 10.16.13.79:33785 - "GET /health HTTP/1.1" 200 OK
475
+ INFO: 10.16.13.79:15501 - "GET /health HTTP/1.1" 200 OK
476
+ INFO: 10.16.13.79:25679 - "GET /health HTTP/1.1" 200 OK
477
+ INFO: 10.16.13.79:35778 - "GET /health HTTP/1.1" 200 OK
478
+ INFO: 10.16.25.209:4766 - "GET /health HTTP/1.1" 200 OK
479
+ INFO: 2025-12-14T01:59:02 - app.core.supabase_auth: Session refreshed successfully
480
+ INFO: 2025-12-14T01:59:02 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
481
+ INFO: 10.16.25.209:34440 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
482
+ INFO: 2025-12-14T02:02:27 - app.core.supabase_auth: Session refreshed successfully
483
+ INFO: 2025-12-14T02:02:28 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
484
+ INFO: 10.16.25.209:3074 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
485
+ INFO: 10.16.13.79:51707 - "GET /health HTTP/1.1" 200 OK
486
+ INFO: 10.16.25.209:21756 - "GET /health HTTP/1.1" 200 OK
487
+ INFO: 10.16.25.209:10158 - "GET /health HTTP/1.1" 200 OK
488
+ INFO: 10.16.13.79:46560 - "GET /health HTTP/1.1" 200 OK
489
+ INFO: 10.16.13.79:7381 - "GET /health HTTP/1.1" 200 OK
490
+ INFO: 10.16.13.79:7381 - "GET /health HTTP/1.1" 200 OK
491
+ INFO: 10.16.25.209:20025 - "GET /health HTTP/1.1" 200 OK
492
+ INFO: 10.16.25.209:20025 - "GET /health HTTP/1.1" 200 OK
493
+ INFO: 10.16.25.209:40958 - "GET /health HTTP/1.1" 200 OK
494
+ INFO: 10.16.25.209:43957 - "GET /health HTTP/1.1" 200 OK
495
+ INFO: 10.16.25.209:29619 - "GET /health HTTP/1.1" 200 OK
496
+ INFO: 10.16.13.79:15299 - "GET /health HTTP/1.1" 200 OK
497
+ INFO: 10.16.25.209:19168 - "GET /health HTTP/1.1" 200 OK
498
+ INFO: 10.16.25.209:19168 - "GET /health HTTP/1.1" 200 OK
499
+ INFO: 10.16.25.209:16442 - "GET /health HTTP/1.1" 200 OK
500
+ INFO: 10.16.25.209:25750 - "GET /health HTTP/1.1" 200 OK
501
+ INFO: 10.16.13.79:61881 - "GET /health HTTP/1.1" 200 OK
502
+ INFO: 10.16.13.79:61881 - "GET /health HTTP/1.1" 200 OK
503
+ INFO: 10.16.25.209:45879 - "GET /health HTTP/1.1" 200 OK
504
+ INFO: 10.16.13.79:1424 - "GET /health HTTP/1.1" 200 OK
505
+ INFO: 10.16.25.209:40999 - "GET /health HTTP/1.1" 200 OK
506
+ INFO: 10.16.13.79:29570 - "GET /health HTTP/1.1" 200 OK
507
+ INFO: 2025-12-14T02:54:04 - app.core.supabase_auth: Session refreshed successfully
508
+ INFO: 2025-12-14T02:54:04 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
509
+ INFO: 10.16.13.79:61876 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
510
+ INFO: 2025-12-14T02:57:29 - app.core.supabase_auth: Session refreshed successfully
511
+ INFO: 2025-12-14T02:57:29 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
512
+ INFO: 10.16.13.79:61752 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
513
+ INFO: 10.16.25.209:55982 - "GET /health HTTP/1.1" 200 OK
514
+ INFO: 10.16.13.79:29919 - "GET /health HTTP/1.1" 200 OK
515
+ INFO: 10.16.25.209:45873 - "GET /health HTTP/1.1" 200 OK
516
+ INFO: 10.16.25.209:27177 - "GET /health HTTP/1.1" 200 OK
517
+ INFO: 10.16.25.209:25008 - "GET /health HTTP/1.1" 200 OK
518
+ INFO: 10.16.25.209:32462 - "GET /health HTTP/1.1" 200 OK
519
+ INFO: 10.16.25.209:51931 - "GET /health HTTP/1.1" 200 OK
520
+ INFO: 10.16.25.209:51931 - "GET /health HTTP/1.1" 200 OK
521
+ INFO: 10.16.13.79:18545 - "GET /health HTTP/1.1" 200 OK
522
+ INFO: 10.16.25.209:17056 - "GET /health HTTP/1.1" 200 OK
523
+ INFO: 10.16.25.209:12928 - "GET /health HTTP/1.1" 200 OK
524
+ INFO: 10.16.25.209:12928 - "GET /health HTTP/1.1" 200 OK
525
+ INFO: 10.16.13.79:43609 - "GET /health HTTP/1.1" 200 OK
526
+ INFO: 10.16.13.79:43609 - "GET /health HTTP/1.1" 200 OK
527
+ INFO: 10.16.25.209:48244 - "GET /health HTTP/1.1" 200 OK
528
+ INFO: 10.16.13.79:55027 - "GET /health HTTP/1.1" 200 OK
529
+ INFO: 10.16.25.209:1125 - "GET /health HTTP/1.1" 200 OK
530
+ INFO: 10.16.25.209:13336 - "GET /health HTTP/1.1" 200 OK
531
+ INFO: 10.16.13.79:37058 - "GET /health HTTP/1.1" 200 OK
532
+ INFO: 10.16.25.209:57254 - "GET /health HTTP/1.1" 200 OK
533
+ INFO: 10.16.13.79:48183 - "GET /health HTTP/1.1" 200 OK
534
+ INFO: 10.16.25.209:48521 - "GET /health HTTP/1.1" 200 OK
535
+ INFO: 2025-12-14T03:49:06 - app.core.supabase_auth: Session refreshed successfully
536
+ INFO: 2025-12-14T03:49:06 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
537
+ INFO: 10.16.13.79:58343 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
538
+ INFO: 2025-12-14T03:52:31 - app.core.supabase_auth: Session refreshed successfully
539
+ INFO: 2025-12-14T03:52:31 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
540
+ INFO: 10.16.13.79:60953 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
541
+ INFO: 10.16.25.209:51385 - "GET /health HTTP/1.1" 200 OK
542
+ INFO: 10.16.13.79:36634 - "GET /health HTTP/1.1" 200 OK
543
+ INFO: 10.16.25.209:6726 - "GET /health HTTP/1.1" 200 OK
544
+ INFO: 10.16.13.79:40220 - "GET /health HTTP/1.1" 200 OK
545
+ INFO: 10.16.13.79:10199 - "GET /health HTTP/1.1" 200 OK
546
+ INFO: 10.16.25.209:62842 - "GET /health HTTP/1.1" 200 OK
547
+ INFO: 10.16.13.79:57972 - "GET /health HTTP/1.1" 200 OK
548
+ INFO: 10.16.25.209:34450 - "GET /health HTTP/1.1" 200 OK
549
+ INFO: 10.16.25.209:17777 - "GET /health HTTP/1.1" 200 OK
550
+ INFO: 10.16.13.79:1689 - "GET /health HTTP/1.1" 200 OK
551
+ INFO: 10.16.13.79:1096 - "GET /health HTTP/1.1" 200 OK
552
+ INFO: 10.16.13.79:1096 - "GET /health HTTP/1.1" 200 OK
553
+ INFO: 10.16.25.209:5751 - "GET /health HTTP/1.1" 200 OK
554
+ INFO: 10.16.13.79:13561 - "GET /health HTTP/1.1" 200 OK
555
+ INFO: 10.16.13.79:52545 - "GET /health HTTP/1.1" 200 OK
556
+ INFO: 10.16.25.209:11426 - "GET /health HTTP/1.1" 200 OK
557
+ INFO: 10.16.25.209:21992 - "GET /health HTTP/1.1" 200 OK
558
+ INFO: 10.16.13.79:11839 - "GET /health HTTP/1.1" 200 OK
559
+ INFO: 10.16.25.209:60538 - "GET /health HTTP/1.1" 200 OK
560
+ INFO: 10.16.13.79:37431 - "GET /health HTTP/1.1" 200 OK
561
+ INFO: 10.16.13.79:50820 - "GET /health HTTP/1.1" 200 OK
562
+ INFO: 10.16.25.209:39354 - "GET /health HTTP/1.1" 200 OK
563
+ INFO: 2025-12-14T04:44:08 - app.core.supabase_auth: Session refreshed successfully
564
+ INFO: 2025-12-14T04:44:08 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
565
+ INFO: 10.16.25.209:31743 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
566
+ INFO: 2025-12-14T04:47:34 - app.core.supabase_auth: Session refreshed successfully
567
+ INFO: 2025-12-14T04:47:34 - app.api.v1.auth: ✅ Token refreshed successfully for: nadina73@nembors.com
568
+ INFO: 10.16.13.79:23694 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
569
+ INFO: 10.16.25.209:14187 - "GET /health HTTP/1.1" 200 OK
570
+ INFO: 10.16.25.209:43637 - "GET /health HTTP/1.1" 200 OK
571
+ INFO: 10.16.25.209:13006 - "GET /health HTTP/1.1" 200 OK
572
+ INFO: 10.16.13.79:24411 - "GET /health HTTP/1.1" 200 OK
573
+ INFO: 10.16.13.79:55507 - "GET /health HTTP/1.1" 200 OK
574
+ INFO: 10.16.13.79:59459 - "GET /health HTTP/1.1" 200 OK
575
+ INFO: 10.16.25.209:49103 - "GET /health HTTP/1.1" 200 OK
576
+ INFO: 10.16.25.209:46433 - "GET /health HTTP/1.1" 200 OK
577
+ INFO: 10.16.13.79:58613 - "GET /health HTTP/1.1" 200 OK
578
+ INFO: 10.16.13.79:33747 - "GET /health HTTP/1.1" 200 OK
579
+ INFO: 10.16.25.209:59431 - "GET /health HTTP/1.1" 200 OK
580
+ INFO: 10.16.25.209:30512 - "GET /health HTTP/1.1" 200 OK
581
+ INFO: 10.16.25.209:43199 - "GET /health HTTP/1.1" 200 OK
582
+ INFO: 10.16.25.209:39442 - "GET /health HTTP/1.1" 200 OK
583
+ INFO: 10.16.25.209:7992 - "GET /health HTTP/1.1" 200 OK
584
+ INFO: 2025-12-14T05:39:09 - app.core.supabase_auth: Session refreshed successfully
585
+ INFO: 2025-12-14T05:39:09 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
586
+ INFO: 10.16.13.79:36468 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
587
+ INFO: 10.16.25.209:48618 - "GET /health HTTP/1.1" 200 OK
588
+ INFO: 10.16.13.79:52348 - "GET /health HTTP/1.1" 200 OK
589
+ INFO: 10.16.25.209:19469 - "GET /health HTTP/1.1" 200 OK
590
+ INFO: 10.16.13.79:46433 - "GET /health HTTP/1.1" 200 OK
591
+ INFO: 10.16.13.79:45638 - "GET /health HTTP/1.1" 200 OK
592
+ INFO: 10.16.13.79:61124 - "GET /health HTTP/1.1" 200 OK
593
+ INFO: 10.16.13.79:37210 - "GET /health HTTP/1.1" 200 OK
594
+ INFO: 10.16.13.79:21567 - "GET /health HTTP/1.1" 200 OK
595
+ INFO: 10.16.13.79:14258 - "GET /health HTTP/1.1" 200 OK
596
+ INFO: 10.16.25.209:55106 - "GET /health HTTP/1.1" 200 OK
597
+ INFO: 10.16.13.79:56904 - "GET /health HTTP/1.1" 200 OK
598
+ INFO: 2025-12-14T06:34:11 - app.core.supabase_auth: Session refreshed successfully
599
+ INFO: 2025-12-14T06:34:11 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
600
+ INFO: 10.16.25.209:8442 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
601
+ INFO: 10.16.13.79:32775 - "GET /health HTTP/1.1" 200 OK
602
+ INFO: 10.16.25.209:58889 - "GET /health HTTP/1.1" 200 OK
603
+ INFO: 10.16.13.79:25588 - "GET /health HTTP/1.1" 200 OK
604
+ INFO: 10.16.25.209:44353 - "GET /health HTTP/1.1" 200 OK
605
+ INFO: 10.16.25.209:64164 - "GET /health HTTP/1.1" 200 OK
606
+ INFO: 10.16.25.209:49184 - "GET /health HTTP/1.1" 200 OK
607
+ INFO: 10.16.13.79:13720 - "GET /health HTTP/1.1" 200 OK
608
+ INFO: 10.16.13.79:20885 - "GET /health HTTP/1.1" 200 OK
609
+ INFO: 10.16.13.79:57477 - "GET /health HTTP/1.1" 200 OK
610
+ INFO: 10.16.25.209:48914 - "GET /health HTTP/1.1" 200 OK
611
+ INFO: 10.16.25.209:19223 - "GET /health HTTP/1.1" 200 OK
612
+ INFO: 2025-12-14T07:29:14 - app.core.supabase_auth: Session refreshed successfully
613
+ INFO: 2025-12-14T07:29:14 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
614
+ INFO: 10.16.25.209:27197 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
615
+ INFO: 10.16.25.209:41414 - "GET /health HTTP/1.1" 200 OK
616
+ INFO: 10.16.13.79:33238 - "GET /health HTTP/1.1" 200 OK
617
+ INFO: 10.16.25.209:54570 - "GET /health HTTP/1.1" 200 OK
618
+ INFO: 10.16.25.209:50097 - "GET /health HTTP/1.1" 200 OK
619
+ INFO: 10.16.13.79:44557 - "GET /health HTTP/1.1" 200 OK
620
+ INFO: 10.16.25.209:4844 - "GET /health HTTP/1.1" 200 OK
621
+ INFO: 10.16.13.79:34912 - "GET /health HTTP/1.1" 200 OK
622
+ INFO: 10.16.13.79:13121 - "GET /health HTTP/1.1" 200 OK
623
+ INFO: 10.16.13.79:33709 - "GET /health HTTP/1.1" 200 OK
624
+ INFO: 10.16.13.79:48200 - "GET /health HTTP/1.1" 200 OK
625
+ INFO: 10.16.25.209:58998 - "GET /health HTTP/1.1" 200 OK
626
+ INFO: 2025-12-14T08:24:16 - app.core.supabase_auth: Session refreshed successfully
627
+ INFO: 2025-12-14T08:24:16 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
628
+ INFO: 10.16.13.79:23608 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
629
+ INFO: 10.16.25.209:25466 - "GET /health HTTP/1.1" 200 OK
630
+ INFO: 10.16.25.209:9588 - "GET /health HTTP/1.1" 200 OK
631
+ INFO: 10.16.13.79:52108 - "GET /health HTTP/1.1" 200 OK
632
+ INFO: 10.16.25.209:42493 - "GET /health HTTP/1.1" 200 OK
633
+ INFO: 10.16.25.209:7849 - "GET /health HTTP/1.1" 200 OK
634
+ INFO: 10.16.25.209:55139 - "GET /health HTTP/1.1" 200 OK
635
+ INFO: 10.16.13.79:37045 - "GET /health HTTP/1.1" 200 OK
636
+ INFO: 10.16.13.79:14773 - "GET /health HTTP/1.1" 200 OK
637
+ INFO: 10.16.13.79:11918 - "GET /health HTTP/1.1" 200 OK
638
+ INFO: 10.16.13.79:62109 - "GET /health HTTP/1.1" 200 OK
639
+ INFO: 10.16.13.79:31254 - "GET /health HTTP/1.1" 200 OK
640
+ INFO: 2025-12-14T09:19:23 - app.core.supabase_auth: Session refreshed successfully
641
+ INFO: 2025-12-14T09:19:23 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
642
+ INFO: 10.16.13.79:39774 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
643
+ INFO: 10.16.25.209:49277 - "GET /health HTTP/1.1" 200 OK
644
+ INFO: 10.16.25.209:26932 - "GET /health HTTP/1.1" 200 OK
645
+ INFO: 10.16.25.209:48333 - "GET /health HTTP/1.1" 200 OK
646
+ INFO: 10.16.13.79:25237 - "GET /health HTTP/1.1" 200 OK
647
+ INFO: 10.16.25.209:12273 - "GET /health HTTP/1.1" 200 OK
648
+ INFO: 10.16.25.209:52512 - "GET /health HTTP/1.1" 200 OK
649
+ INFO: 10.16.25.209:44701 - "GET /health HTTP/1.1" 200 OK
650
+ INFO: 10.16.25.209:7068 - "GET /health HTTP/1.1" 200 OK
651
+ INFO: 10.16.13.79:61259 - "GET /health HTTP/1.1" 200 OK
652
+ INFO: 10.16.13.79:32735 - "GET /health HTTP/1.1" 200 OK
653
+ INFO: 10.16.13.79:24391 - "GET /health HTTP/1.1" 200 OK
654
+ INFO: 2025-12-14T10:14:28 - app.core.supabase_auth: Session refreshed successfully
655
+ INFO: 2025-12-14T10:14:28 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
656
+ INFO: 10.16.13.79:64086 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
657
+ INFO: 10.16.25.209:4472 - "GET /health HTTP/1.1" 200 OK
658
+ INFO: 10.16.25.209:62331 - "GET /health HTTP/1.1" 200 OK
659
+ INFO: 10.16.13.79:1695 - "GET /health HTTP/1.1" 200 OK
660
+ INFO: 10.16.13.79:8995 - "GET /health HTTP/1.1" 200 OK
661
+ INFO: 10.16.25.209:1628 - "GET /health HTTP/1.1" 200 OK
662
+ INFO: 10.16.25.209:23967 - "GET /health HTTP/1.1" 200 OK
663
+ INFO: 10.16.25.209:20012 - "GET /health HTTP/1.1" 200 OK
664
+ INFO: 10.16.25.209:9016 - "GET /health HTTP/1.1" 200 OK
665
+ INFO: 10.16.13.79:21646 - "GET /health HTTP/1.1" 200 OK
666
+ INFO: 10.16.25.209:36774 - "GET /health HTTP/1.1" 200 OK
667
+ INFO: 10.16.25.209:34805 - "GET /health HTTP/1.1" 200 OK
668
+ INFO: 2025-12-14T11:09:29 - app.core.supabase_auth: Session refreshed successfully
669
+ INFO: 2025-12-14T11:09:29 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
670
+ INFO: 10.16.13.79:9187 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
671
+ INFO: 10.16.25.209:18265 - "GET /health HTTP/1.1" 200 OK
672
+ INFO: 10.16.25.209:13268 - "GET /health HTTP/1.1" 200 OK
673
+ INFO: 10.16.25.209:58752 - "GET /health HTTP/1.1" 200 OK
674
+ INFO: 10.16.25.209:5179 - "GET /health HTTP/1.1" 200 OK
675
+ INFO: 10.16.13.79:48336 - "GET /health HTTP/1.1" 200 OK
676
+ INFO: 10.16.13.79:2149 - "GET /health HTTP/1.1" 200 OK
677
+ INFO: 10.16.25.209:45472 - "GET /health HTTP/1.1" 200 OK
678
+ INFO: 10.16.13.79:41902 - "GET /health HTTP/1.1" 200 OK
679
+ INFO: 10.16.13.79:17298 - "GET /health HTTP/1.1" 200 OK
680
+ INFO: 10.16.13.79:7536 - "GET /health HTTP/1.1" 200 OK
681
+ INFO: 10.16.13.79:56522 - "GET /health HTTP/1.1" 200 OK
682
+ INFO: 2025-12-14T12:04:31 - app.core.supabase_auth: Session refreshed successfully
683
+ INFO: 2025-12-14T12:04:31 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
684
+ INFO: 10.16.13.79:58610 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
685
+ INFO: 10.16.25.209:12066 - "GET /health HTTP/1.1" 200 OK
686
+ INFO: 10.16.25.209:5352 - "GET /health HTTP/1.1" 200 OK
687
+ INFO: 10.16.13.79:45545 - "GET /health HTTP/1.1" 200 OK
688
+ INFO: 10.16.13.79:58212 - "GET /health HTTP/1.1" 200 OK
689
+ INFO: 10.16.13.79:46681 - "GET /health HTTP/1.1" 200 OK
690
+ INFO: 10.16.25.209:39315 - "GET /health HTTP/1.1" 200 OK
691
+ INFO: 10.16.13.79:28418 - "GET /health HTTP/1.1" 200 OK
692
+ INFO: 10.16.13.79:32613 - "GET /robots.txt HTTP/1.1" 404 Not Found
693
+ INFO: 10.16.25.209:54198 - "GET /?logs=container HTTP/1.1" 200 OK
694
+ INFO: 10.16.13.79:64121 - "GET /?logs=container HTTP/1.1" 200 OK
695
+ INFO: 10.16.13.79:60665 - "GET /health HTTP/1.1" 200 OK
696
+ ERROR: 2025-12-14T14:26:00 - app.core.supabase_auth: Session refresh error: Invalid Refresh Token: Already Used
697
+ ERROR: 2025-12-14T14:26:00 - app.api.v1.auth: ❌ Token refresh error: Invalid Refresh Token: Already Used
698
+ INFO: 10.16.13.79:60665 - "POST /api/v1/auth/refresh-token HTTP/1.1" 401 Unauthorized
699
+ INFO: 10.16.25.209:60584 - "GET /health HTTP/1.1" 200 OK
700
+ INFO: 2025-12-14T14:26:06 - app.core.supabase_auth: User signed in successfully: viyisa8151@feralrex.com
701
+ INFO: 2025-12-14T14:26:07 - app.services.audit_service: Audit log created: login on auth by viyisa8151@feralrex.com
702
+ INFO: 2025-12-14T14:26:07 - app.api.v1.auth: User logged in successfully: viyisa8151@feralrex.com
703
+ INFO: 10.16.13.79:46983 - "POST /api/v1/auth/login HTTP/1.1" 200 OK
704
+ INFO: 2025-12-14T14:26:08 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
705
+ INFO: 2025-12-14T14:26:08 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
706
+ INFO: 10.16.13.79:46983 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
707
+ INFO: 2025-12-14T14:26:08 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
708
+ INFO: 2025-12-14T14:26:08 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
709
+ INFO: 10.16.25.209:49638 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
710
+ INFO: 2025-12-14T14:26:08 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
711
+ INFO: 2025-12-14T14:26:08 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
712
+ INFO: 10.16.13.79:46983 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
713
+ INFO: 2025-12-14T14:26:09 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
714
+ INFO: 2025-12-14T14:26:09 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
715
+ INFO: 10.16.25.209:49638 - "GET /api/v1/analytics/user/overview?limit=50 HTTP/1.1" 200 OK
716
+ INFO: 2025-12-14T14:26:11 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
717
+ INFO: 2025-12-14T14:26:11 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
718
+ INFO: 10.16.13.79:46983 - "GET /api/v1/profile/me/validation HTTP/1.1" 200 OK
719
+ INFO: 2025-12-14T14:26:11 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
720
+ INFO: 2025-12-14T14:26:11 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
721
+ INFO: 2025-12-14T14:26:11 - app.services.project_service: Listed 1 projects (total: 1) for user 43b778b0-2062-4724-abbb-916a4835a9b0
722
+ INFO: 10.16.25.209:49638 - "GET /api/v1/projects?page=1&per_page=100&status=active HTTP/1.1" 200 OK
723
+ INFO: 2025-12-14T14:26:14 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
724
+ INFO: 2025-12-14T14:26:14 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
725
+ INFO: 2025-12-14T14:26:14 - app.services.dashboard_service: Dashboard cache MISS for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user 43b778b0-2062-4724-abbb-916a4835a9b0 - building fresh data
726
+ INFO: 2025-12-14T14:26:14 - app.services.dashboard_service: Built and cached dashboard for project 0ade6bd1-e492-4e25-b681-59f42058d29a
727
+ INFO: 10.16.25.209:32334 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
728
+ INFO: 10.16.13.79:4014 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
729
+ INFO: 10.16.13.79:4014 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
730
+ INFO: 10.16.25.209:53765 - "GET /health HTTP/1.1" 200 OK
731
+ INFO: 10.16.13.79:47714 - "GET /health HTTP/1.1" 200 OK
732
+ INFO: 10.16.25.209:21539 - "GET /health HTTP/1.1" 200 OK
733
+ INFO: 10.16.25.209:65140 - "GET /health HTTP/1.1" 200 OK
734
+ INFO: 10.16.25.209:62036 - "GET /health HTTP/1.1" 200 OK
735
+ INFO: 10.16.25.209:11372 - "GET /health HTTP/1.1" 200 OK
736
+ INFO: 10.16.13.79:49750 - "GET /health HTTP/1.1" 200 OK
737
+ INFO: 10.16.13.79:3826 - "GET /health HTTP/1.1" 200 OK
738
+ INFO: 10.16.13.79:41241 - "GET /health HTTP/1.1" 200 OK
739
+ INFO: 10.16.25.209:1877 - "GET /health HTTP/1.1" 200 OK
740
+ INFO: 10.16.13.79:40747 - "GET /health HTTP/1.1" 200 OK
741
+ INFO: 10.16.13.79:2628 - "GET /health HTTP/1.1" 200 OK
742
+ INFO: 10.16.13.79:42775 - "GET /health HTTP/1.1" 200 OK
743
+ INFO: 10.16.25.209:5802 - "GET /health HTTP/1.1" 200 OK
744
+ INFO: 10.16.25.209:40925 - "GET /health HTTP/1.1" 200 OK
745
+ INFO: 10.16.13.79:58161 - "GET /health HTTP/1.1" 200 OK
746
+ INFO: 10.16.13.79:44864 - "GET /health HTTP/1.1" 200 OK
747
+ INFO: 2025-12-14T15:04:12 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
748
+ INFO: 2025-12-14T15:04:12 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
749
+ INFO: 10.16.25.209:14927 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
750
+ INFO: 2025-12-14T15:04:14 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
751
+ INFO: 2025-12-14T15:04:14 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
752
+ INFO: 10.16.25.209:14927 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
753
+ INFO: 2025-12-14T15:04:14 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
754
+ INFO: 2025-12-14T15:04:14 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
755
+ INFO: 10.16.13.79:44864 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
756
+ INFO: 10.16.25.209:14927 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
757
+ INFO: 10.16.25.209:14927 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
758
+ INFO: 10.16.13.79:63796 - "GET /health HTTP/1.1" 200 OK
759
+ INFO: 2025-12-14T15:04:40 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
760
+ INFO: 2025-12-14T15:04:40 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
761
+ INFO: 10.16.25.209:27012 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
762
+ INFO: 2025-12-14T15:04:41 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
763
+ INFO: 2025-12-14T15:04:41 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
764
+ INFO: 10.16.25.209:27012 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
765
+ INFO: 2025-12-14T15:04:41 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
766
+ INFO: 2025-12-14T15:04:41 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
767
+ INFO: 10.16.13.79:63796 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
768
+ INFO: 10.16.25.209:27012 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
769
+ INFO: 10.16.13.79:63796 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
770
+ INFO: 10.16.13.79:53891 - "GET /health HTTP/1.1" 200 OK
771
+ INFO: 2025-12-14T15:05:13 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
772
+ INFO: 2025-12-14T15:05:13 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
773
+ INFO: 10.16.13.79:53891 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
774
+ INFO: 2025-12-14T15:05:13 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
775
+ INFO: 2025-12-14T15:05:13 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
776
+ INFO: 10.16.13.79:53891 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
777
+ INFO: 2025-12-14T15:05:13 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
778
+ INFO: 2025-12-14T15:05:13 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
779
+ INFO: 10.16.25.209:8747 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
780
+ INFO: 10.16.13.79:53891 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
781
+ INFO: 10.16.13.79:53891 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
782
+ INFO: 10.16.25.209:19083 - "GET / HTTP/1.1" 200 OK
783
+ INFO: 10.16.25.209:34398 - "GET /health HTTP/1.1" 200 OK
784
+ INFO: 10.16.25.209:25827 - "GET /health HTTP/1.1" 200 OK
785
+ INFO: 2025-12-14T15:10:33 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
786
+ INFO: 2025-12-14T15:10:33 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
787
+ INFO: 10.16.13.79:24132 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
788
+ INFO: 2025-12-14T15:10:33 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
789
+ INFO: 2025-12-14T15:10:33 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
790
+ INFO: 10.16.13.79:24132 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
791
+ INFO: 2025-12-14T15:10:33 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
792
+ INFO: 2025-12-14T15:10:33 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
793
+ INFO: 10.16.25.209:25827 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
794
+ INFO: 10.16.25.209:25827 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
795
+ INFO: 10.16.25.209:25827 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
796
+ INFO: 10.16.25.209:23533 - "GET /health HTTP/1.1" 200 OK
797
+ INFO: 2025-12-14T15:12:05 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
798
+ INFO: 2025-12-14T15:12:05 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
799
+ INFO: 10.16.13.79:17570 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
800
+ INFO: 2025-12-14T15:12:07 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
801
+ INFO: 2025-12-14T15:12:07 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
802
+ INFO: 10.16.13.79:17570 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
803
+ INFO: 2025-12-14T15:12:07 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
804
+ INFO: 2025-12-14T15:12:07 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
805
+ INFO: 10.16.25.209:23533 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
806
+ INFO: 10.16.25.209:23533 - "GET /api/v1/tickets/1e622599-1909-49b9-9d8b-4c5cb483b29e/detail HTTP/1.1" 200 OK
807
+ INFO: 10.16.13.79:17570 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/regions/24510a5a-13a6-4334-9055-b4d476aa9e0a HTTP/1.1" 200 OK
808
+ INFO: 10.16.25.209:22959 - "GET /health HTTP/1.1" 200 OK
809
+ INFO: 10.16.25.209:11555 - "GET /health HTTP/1.1" 200 OK
810
+ INFO: 2025-12-14T15:13:40 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
811
+ INFO: 2025-12-14T15:13:40 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
812
+ INFO: 10.16.13.79:49397 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
813
+ INFO: 2025-12-14T15:13:41 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
814
+ INFO: 2025-12-14T15:13:41 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
815
+ INFO: 10.16.13.79:49397 - "GET /api/v1/timesheets/me/timesheets?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=20 HTTP/1.1" 200 OK
816
+ INFO: 2025-12-14T15:13:41 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
817
+ INFO: 2025-12-14T15:13:41 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
818
+ INFO: 10.16.25.209:50949 - "GET /api/v1/timesheets/stats?start_date=2025-12-01&end_date=2025-12-31&user_id=43b778b0-2062-4724-abbb-916a4835a9b0&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 200 OK
819
+ INFO: 10.16.25.209:22786 - "GET /health HTTP/1.1" 200 OK
820
+ INFO: 10.16.13.79:20689 - "GET /health HTTP/1.1" 200 OK
821
+ INFO: 10.16.25.209:40673 - "GET /health HTTP/1.1" 200 OK
822
+ INFO: 2025-12-14T15:20:13 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
823
+ INFO: 2025-12-14T15:20:13 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
824
+ INFO: 10.16.25.209:40673 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
825
+ INFO: 2025-12-14T15:20:14 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
826
+ INFO: 2025-12-14T15:20:14 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
827
+ INFO: 10.16.25.209:40673 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
828
+ INFO: 2025-12-14T15:20:14 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
829
+ INFO: 2025-12-14T15:20:14 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
830
+ INFO: 10.16.13.79:31572 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
831
+ INFO: 2025-12-14T15:20:14 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
832
+ INFO: 2025-12-14T15:20:14 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
833
+ INFO: 10.16.13.79:48324 - "GET /api/v1/timesheets/stats?start_date=2025-12-01&end_date=2025-12-31&user_id=43b778b0-2062-4724-abbb-916a4835a9b0&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 200 OK
834
+ INFO: 2025-12-14T15:20:14 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
835
+ INFO: 2025-12-14T15:20:14 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
836
+ INFO: 10.16.25.209:30191 - "GET /api/v1/timesheets/me/timesheets?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=20 HTTP/1.1" 200 OK
837
+ INFO: 10.16.25.209:48853 - "GET /health HTTP/1.1" 200 OK
838
+ INFO: 2025-12-14T15:21:09 - app.core.supabase_auth: Session refreshed successfully
839
+ INFO: 2025-12-14T15:21:09 - app.api.v1.auth: ✅ Token refreshed successfully for: viyisa8151@feralrex.com
840
+ INFO: 10.16.25.209:61578 - "POST /api/v1/auth/refresh-token HTTP/1.1" 200 OK
841
+ INFO: 10.16.13.79:32888 - "GET /health HTTP/1.1" 200 OK
842
+ INFO: 2025-12-14T15:22:05 - app.core.supabase_auth: User signed in successfully: nadina73@nembors.com
843
+ INFO: 2025-12-14T15:22:06 - app.services.audit_service: Audit log created: login on auth by nadina73@nembors.com
844
+ INFO: 2025-12-14T15:22:06 - app.api.v1.auth: User logged in successfully: nadina73@nembors.com
845
+ INFO: 10.16.25.209:62158 - "POST /api/v1/auth/login HTTP/1.1" 200 OK
846
+ INFO: 2025-12-14T15:22:07 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
847
+ INFO: 2025-12-14T15:22:07 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
848
+ INFO: 10.16.13.79:43055 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
849
+ INFO: 2025-12-14T15:22:08 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
850
+ INFO: 2025-12-14T15:22:08 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
851
+ INFO: 10.16.25.209:62158 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
852
+ INFO: 2025-12-14T15:22:08 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
853
+ INFO: 2025-12-14T15:22:08 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
854
+ INFO: 10.16.13.79:43055 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
855
+ INFO: 2025-12-14T15:22:09 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
856
+ INFO: 2025-12-14T15:22:09 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
857
+ INFO: 10.16.13.79:43055 - "GET /api/v1/analytics/user/overview HTTP/1.1" 200 OK
858
+ INFO: 2025-12-14T15:22:12 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
859
+ INFO: 2025-12-14T15:22:12 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
860
+ INFO: 2025-12-14T15:22:12 - app.services.project_service: Listed 1 projects (total: 1) for user c5cf92be-4172-4fe2-af5c-f05d83b3a938
861
+ INFO: 10.16.25.209:30374 - "GET /api/v1/projects?page=1&per_page=100 HTTP/1.1" 200 OK
862
+ INFO: 2025-12-14T15:22:16 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
863
+ INFO: 2025-12-14T15:22:16 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
864
+ INFO: 2025-12-14T15:22:16 - app.services.audit_service: Audit log created: update on user_preferences by nadina73@nembors.com
865
+ INFO: 2025-12-14T15:22:16 - app.api.v1.auth: Preferences updated for user: nadina73@nembors.com
866
+ INFO: 10.16.13.79:15595 - "PUT /api/v1/auth/me/preferences HTTP/1.1" 200 OK
867
+ INFO: 2025-12-14T15:22:16 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
868
+ INFO: 2025-12-14T15:22:16 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
869
+ INFO: 2025-12-14T15:22:16 - app.services.dashboard_service: Dashboard cache MISS for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user c5cf92be-4172-4fe2-af5c-f05d83b3a938 - building fresh data
870
+ INFO: 2025-12-14T15:22:16 - app.services.dashboard_service: Built and cached dashboard for project 0ade6bd1-e492-4e25-b681-59f42058d29a
871
+ INFO: 10.16.25.209:6202 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
872
+ INFO: 2025-12-14T15:22:17 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
873
+ INFO: 2025-12-14T15:22:17 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
874
+ INFO: 10.16.25.209:6202 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
875
+ INFO: 10.16.25.209:6202 - "GET /api/v1/notifications?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page_size=50&is_read=false HTTP/1.1" 200 OK
876
+ INFO: 10.16.13.79:15595 - "GET /api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 200 OK
877
+ INFO: 10.16.25.209:1728 - "GET /health HTTP/1.1" 200 OK
878
+ INFO: 10.16.13.79:53036 - "GET /health HTTP/1.1" 200 OK
879
+ INFO: 10.16.13.79:59924 - "GET /health HTTP/1.1" 200 OK
880
+ INFO: 2025-12-14T15:26:14 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
881
+ INFO: 2025-12-14T15:26:14 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
882
+ INFO: 10.16.13.79:35945 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
883
+ INFO: 10.16.25.209:40557 - "GET /health HTTP/1.1" 200 OK
884
+ INFO: 2025-12-14T15:26:15 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
885
+ INFO: 2025-12-14T15:26:15 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
886
+ INFO: 10.16.25.209:40557 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
887
+ INFO: 2025-12-14T15:26:15 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
888
+ INFO: 2025-12-14T15:26:15 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
889
+ INFO: 10.16.13.79:35945 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
890
+ INFO: 2025-12-14T15:26:15 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
891
+ INFO: 2025-12-14T15:26:15 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
892
+ INFO: 10.16.13.79:35945 - "GET /api/v1/analytics/user/overview HTTP/1.1" 200 OK
893
+ INFO: 2025-12-14T15:26:16 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
894
+ INFO: 2025-12-14T15:26:16 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
895
+ INFO: 2025-12-14T15:26:16 - app.services.project_service: Listed 1 projects (total: 1) for user c5cf92be-4172-4fe2-af5c-f05d83b3a938
896
+ INFO: 10.16.25.209:40557 - "GET /api/v1/projects?page=1&per_page=100 HTTP/1.1" 200 OK
897
+ INFO: 10.16.13.79:30398 - "GET /health HTTP/1.1" 200 OK
898
+ INFO: 10.16.13.79:36119 - "GET /health HTTP/1.1" 200 OK
899
+ INFO: 2025-12-14T15:27:49 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
900
+ INFO: 2025-12-14T15:27:49 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
901
+ INFO: 2025-12-14T15:27:49 - app.services.audit_service: Audit log created: update on user_preferences by nadina73@nembors.com
902
+ INFO: 2025-12-14T15:27:49 - app.api.v1.auth: Preferences updated for user: nadina73@nembors.com
903
+ INFO: 10.16.25.209:51672 - "PUT /api/v1/auth/me/preferences HTTP/1.1" 200 OK
904
+ INFO: 2025-12-14T15:27:50 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
905
+ INFO: 2025-12-14T15:27:50 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
906
+ INFO: 10.16.25.209:51672 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
907
+ INFO: 2025-12-14T15:27:50 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
908
+ INFO: 2025-12-14T15:27:50 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
909
+ INFO: 2025-12-14T15:27:50 - app.services.dashboard_service: Dashboard cache MISS for project 0ade6bd1-e492-4e25-b681-59f42058d29a, user c5cf92be-4172-4fe2-af5c-f05d83b3a938 - building fresh data
910
+ INFO: 2025-12-14T15:27:50 - app.services.dashboard_service: Built and cached dashboard for project 0ade6bd1-e492-4e25-b681-59f42058d29a
911
+ INFO: 10.16.13.79:36119 - "GET /api/v1/projects/0ade6bd1-e492-4e25-b681-59f42058d29a/dashboard HTTP/1.1" 200 OK
912
+ INFO: 10.16.13.79:36119 - "GET /api/v1/notifications?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page_size=50&is_read=false HTTP/1.1" 200 OK
913
+ INFO: 10.16.25.209:51672 - "GET /api/v1/tickets/stats?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 200 OK
914
+ INFO: 10.16.25.209:51672 - "GET /api/v1/timesheets/team/stats?start_date=2025-12-07&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 404 Not Found
915
+ INFO: 2025-12-14T15:27:53 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
916
+ INFO: 2025-12-14T15:27:53 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
917
+ WARNING: 2025-12-14T15:27:53 - app.core.permissions: Permission denied: User nadina73@nembors.com (role=project_manager) attempted list_timesheets requiring 'view_timesheets'
918
+ INFO: 10.16.13.79:36119 - "GET /api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-07&date_to=2025-12-14 HTTP/1.1" 403 Forbidden
919
+ INFO: 10.16.13.79:36119 - "GET /api/v1/timesheets/team/stats?start_date=2025-12-07&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 404 Not Found
920
+ INFO: 2025-12-14T15:27:54 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
921
+ INFO: 2025-12-14T15:27:54 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
922
+ WARNING: 2025-12-14T15:27:54 - app.core.permissions: Permission denied: User nadina73@nembors.com (role=project_manager) attempted list_timesheets requiring 'view_timesheets'
923
+ INFO: 10.16.25.209:51672 - "GET /api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-07&date_to=2025-12-14 HTTP/1.1" 403 Forbidden
924
+ INFO: 10.16.25.209:56295 - "GET /api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 404 Not Found
925
+ INFO: 2025-12-14T15:28:20 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
926
+ INFO: 2025-12-14T15:28:20 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
927
+ WARNING: 2025-12-14T15:28:20 - app.core.permissions: Permission denied: User nadina73@nembors.com (role=project_manager) attempted list_timesheets requiring 'view_timesheets'
928
+ INFO: 10.16.13.79:6554 - "GET /api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 HTTP/1.1" 403 Forbidden
929
+ INFO: 10.16.25.209:56295 - "GET /api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 404 Not Found
930
+ INFO: 2025-12-14T15:28:22 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
931
+ INFO: 2025-12-14T15:28:22 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
932
+ WARNING: 2025-12-14T15:28:22 - app.core.permissions: Permission denied: User nadina73@nembors.com (role=project_manager) attempted list_timesheets requiring 'view_timesheets'
933
+ INFO: 10.16.13.79:6554 - "GET /api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 HTTP/1.1" 403 Forbidden
934
+ INFO: 10.16.13.79:36247 - "GET /health HTTP/1.1" 200 OK
935
+ INFO: 2025-12-14T15:29:34 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
936
+ INFO: 2025-12-14T15:29:34 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
937
+ INFO: 10.16.25.209:59932 - "GET /api/v1/auth/me HTTP/1.1" 200 OK
938
+ INFO: 10.16.13.79:29739 - "GET /health HTTP/1.1" 200 OK
939
+ INFO: 2025-12-14T15:29:35 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
940
+ INFO: 2025-12-14T15:29:35 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
941
+ INFO: 10.16.13.79:29739 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
942
+ INFO: 2025-12-14T15:29:35 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
943
+ INFO: 2025-12-14T15:29:35 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
944
+ INFO: 10.16.25.209:59932 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
945
+ INFO: 2025-12-14T15:29:36 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
946
+ INFO: 2025-12-14T15:29:36 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
947
+ INFO: 10.16.25.209:59932 - "GET /api/v1/timesheets/stats?start_date=2025-12-01&end_date=2025-12-31&user_id=43b778b0-2062-4724-abbb-916a4835a9b0&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 200 OK
948
+ INFO: 2025-12-14T15:29:36 - app.api.deps: Checking active user: 43b778b0-2062-4724-abbb-916a4835a9b0, is_active: True, type: <class 'bool'>
949
+ INFO: 2025-12-14T15:29:36 - app.api.deps: User 43b778b0-2062-4724-abbb-916a4835a9b0 is active - proceeding
950
+ INFO: 10.16.13.79:29739 - "GET /api/v1/timesheets/me/timesheets?project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&page=1&page_size=20 HTTP/1.1" 200 OK
951
+ INFO: 10.16.25.209:25142 - "GET /api/v1/timesheets/team/stats?start_date=2025-12-08&end_date=2025-12-14&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a HTTP/1.1" 404 Not Found
952
+ INFO: 10.16.25.209:33363 - "GET /health HTTP/1.1" 200 OK
953
+ INFO: 2025-12-14T15:29:54 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
954
+ INFO: 2025-12-14T15:29:54 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
955
+ WARNING: 2025-12-14T15:29:54 - app.core.permissions: Permission denied: User nadina73@nembors.com (role=project_manager) attempted list_timesheets requiring 'view_timesheets'
956
+ INFO: 2025-12-14T15:29:54 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
957
+ INFO: 2025-12-14T15:29:54 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
958
+ INFO: 10.16.25.209:52449 - "GET /api/v1/auth/me/preferences HTTP/1.1" 200 OK
959
+ INFO: 2025-12-14T15:29:54 - app.api.deps: Checking active user: c5cf92be-4172-4fe2-af5c-f05d83b3a938, is_active: True, type: <class 'bool'>
960
+ INFO: 2025-12-14T15:29:54 - app.api.deps: User c5cf92be-4172-4fe2-af5c-f05d83b3a938 is active - proceeding
961
+ INFO: 10.16.13.79:14062 - "GET /api/v1/auth/me/preferences/available-apps HTTP/1.1" 200 OK
962
+ INFO: 10.16.13.79:21400 - "GET /api/v1/timesheets?page=1&page_size=50&project_id=0ade6bd1-e492-4e25-b681-59f42058d29a&date_from=2025-12-08&date_to=2025-12-14 HTTP/1.1" 403 Forbidden
963
+
src/app/api/v1/timesheets.py CHANGED
@@ -679,6 +679,153 @@ async def get_timesheet_stats(
679
  )
680
 
681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
682
  @router.get("/{timesheet_id}", response_model=TimesheetResponse)
683
  @require_permission("view_timesheets")
684
  async def get_timesheet(
@@ -1021,154 +1168,6 @@ async def generate_timesheets(
1021
  )
1022
 
1023
 
1024
-
1025
- # ============================================
1026
- # TEAM STATS (AGGREGATED)
1027
- # ============================================
1028
-
1029
- @router.get("/team/stats")
1030
- @require_permission("view_timesheets")
1031
- async def get_team_stats(
1032
- start_date: date = Query(..., description="Start date for statistics"),
1033
- end_date: date = Query(..., description="End date for statistics"),
1034
- project_id: Optional[UUID] = Query(None, description="Filter by specific project"),
1035
- current_user: User = Depends(get_current_active_user),
1036
- db: Session = Depends(get_db)
1037
- ):
1038
- """
1039
- Get aggregated team statistics (all team members' stats in one call).
1040
-
1041
- **Authorization:**
1042
- - Managers can view their team stats
1043
- - Admins can view all team stats
1044
-
1045
- **Query Parameters:**
1046
- - start_date: Start of date range (required)
1047
- - end_date: End of date range (required)
1048
- - project_id: Filter by specific project (optional)
1049
-
1050
- **Returns:**
1051
- Array of user stats with:
1052
- - user_id, user_name, user_email, role
1053
- - Day counts (present, absent, leave)
1054
- - Attendance/absence rates
1055
- - Hours worked
1056
- - Ticket metrics (assigned, completed, completion rate)
1057
-
1058
- **Use Cases:**
1059
- - Team performance dashboard
1060
- - Manager overview of all team members
1061
- - Comparative performance analysis
1062
- - Payroll preparation
1063
- """
1064
- try:
1065
- # Authorization check
1066
- if current_user.role not in [
1067
- AppRole.PLATFORM_ADMIN, AppRole.PROJECT_MANAGER, AppRole.DISPATCHER,
1068
- AppRole.CLIENT_ADMIN, AppRole.CONTRACTOR_ADMIN
1069
- ]:
1070
- raise HTTPException(
1071
- status_code=status.HTTP_403_FORBIDDEN,
1072
- detail="Only managers and administrators can view team statistics"
1073
- )
1074
-
1075
- # Build base query
1076
- query = db.query(Timesheet).filter(
1077
- Timesheet.deleted_at == None,
1078
- Timesheet.work_date >= start_date,
1079
- Timesheet.work_date <= end_date
1080
- )
1081
-
1082
- # Apply project filter if provided
1083
- if project_id:
1084
- query = query.filter(Timesheet.project_id == project_id)
1085
-
1086
- # Get all timesheets in range
1087
- timesheets = query.all()
1088
-
1089
- # Group by user_id
1090
- user_timesheets: Dict[UUID, List[Timesheet]] = {}
1091
- for ts in timesheets:
1092
- if ts.user_id not in user_timesheets:
1093
- user_timesheets[ts.user_id] = []
1094
- user_timesheets[ts.user_id].append(ts)
1095
-
1096
- # Calculate stats for each user
1097
- team_stats = []
1098
- for user_id, user_ts_list in user_timesheets.items():
1099
- # Get user info
1100
- user = db.query(User).filter(User.id == user_id).first()
1101
- if not user:
1102
- continue
1103
-
1104
- # Calculate metrics
1105
- total_days = len(user_ts_list)
1106
- present_days = sum(1 for t in user_ts_list if t.status == TimesheetStatus.PRESENT)
1107
- absent_days = sum(1 for t in user_ts_list if t.status == TimesheetStatus.ABSENT)
1108
- on_leave_days = sum(1 for t in user_ts_list if t.status == TimesheetStatus.ON_LEAVE)
1109
- sick_leave_days = sum(1 for t in user_ts_list if t.status == TimesheetStatus.SICK_LEAVE)
1110
- half_day_count = sum(1 for t in user_ts_list if t.status == TimesheetStatus.HALF_DAY)
1111
-
1112
- attendance_rate = (present_days / total_days * 100) if total_days > 0 else 0
1113
- absence_rate = (absent_days / total_days * 100) if total_days > 0 else 0
1114
-
1115
- total_hours_worked = sum(float(t.hours_worked or 0) for t in user_ts_list)
1116
- average_hours_per_day = (total_hours_worked / present_days) if present_days > 0 else 0
1117
-
1118
- total_tickets_assigned = sum(t.tickets_assigned for t in user_ts_list)
1119
- total_tickets_completed = sum(t.tickets_completed for t in user_ts_list)
1120
- total_tickets_rescheduled = sum(t.tickets_rescheduled for t in user_ts_list)
1121
- total_tickets_cancelled = sum(t.tickets_cancelled for t in user_ts_list)
1122
- total_tickets_rejected = sum(t.tickets_rejected for t in user_ts_list)
1123
-
1124
- average_tickets_per_day = (total_tickets_completed / present_days) if present_days > 0 else 0
1125
- completion_rate = (total_tickets_completed / total_tickets_assigned * 100) if total_tickets_assigned > 0 else 0
1126
-
1127
- team_stats.append({
1128
- "user_id": str(user_id),
1129
- "user_name": user.name,
1130
- "user_email": user.email,
1131
- "role": user.role.value if hasattr(user.role, 'value') else user.role,
1132
- "total_days": total_days,
1133
- "present_days": present_days,
1134
- "absent_days": absent_days,
1135
- "on_leave_days": on_leave_days,
1136
- "sick_leave_days": sick_leave_days,
1137
- "half_day_count": half_day_count,
1138
- "attendance_rate": round(attendance_rate, 2),
1139
- "absence_rate": round(absence_rate, 2),
1140
- "total_hours_worked": round(total_hours_worked, 2),
1141
- "average_hours_per_day": round(average_hours_per_day, 2),
1142
- "total_tickets_assigned": total_tickets_assigned,
1143
- "total_tickets_completed": total_tickets_completed,
1144
- "total_tickets_rescheduled": total_tickets_rescheduled,
1145
- "total_tickets_cancelled": total_tickets_cancelled,
1146
- "total_tickets_rejected": total_tickets_rejected,
1147
- "average_tickets_per_day": round(average_tickets_per_day, 2),
1148
- "completion_rate": round(completion_rate, 2)
1149
- })
1150
-
1151
- # Sort by completion rate descending (best performers first)
1152
- team_stats.sort(key=lambda x: x["completion_rate"], reverse=True)
1153
-
1154
- return {
1155
- "start_date": start_date,
1156
- "end_date": end_date,
1157
- "project_id": str(project_id) if project_id else None,
1158
- "team_size": len(team_stats),
1159
- "team_members": team_stats
1160
- }
1161
-
1162
- except HTTPException:
1163
- raise
1164
- except Exception as e:
1165
- logger.error(f"Error getting team stats: {str(e)}")
1166
- raise HTTPException(
1167
- status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
1168
- detail=f"Failed to get team stats: {str(e)}"
1169
- )
1170
-
1171
-
1172
  # ============================================
1173
  # BULK UPDATE / RECALCULATION
1174
  # ============================================
 
679
  )
680
 
681
 
682
+ # ============================================
683
+ # TEAM STATS (AGGREGATED)
684
+ # ============================================
685
+
686
+ @router.get("/team/stats")
687
+ @require_permission("view_timesheets")
688
+ async def get_team_stats(
689
+ start_date: date = Query(..., description="Start date for statistics"),
690
+ end_date: date = Query(..., description="End date for statistics"),
691
+ project_id: Optional[UUID] = Query(None, description="Filter by specific project"),
692
+ current_user: User = Depends(get_current_active_user),
693
+ db: Session = Depends(get_db)
694
+ ):
695
+ """
696
+ Get aggregated team statistics (all team members' stats in one call).
697
+
698
+ **Authorization:**
699
+ - Managers can view their team stats
700
+ - Admins can view all team stats
701
+
702
+ **Query Parameters:**
703
+ - start_date: Start of date range (required)
704
+ - end_date: End of date range (required)
705
+ - project_id: Filter by specific project (optional)
706
+
707
+ **Returns:**
708
+ Array of user stats with:
709
+ - user_id, user_name, user_email, role
710
+ - Day counts (present, absent, leave)
711
+ - Attendance/absence rates
712
+ - Hours worked
713
+ - Ticket metrics (assigned, completed, completion rate)
714
+
715
+ **Use Cases:**
716
+ - Team performance dashboard
717
+ - Manager overview of all team members
718
+ - Comparative performance analysis
719
+ - Payroll preparation
720
+ """
721
+ try:
722
+ # Authorization check
723
+ if current_user.role not in [
724
+ AppRole.PLATFORM_ADMIN, AppRole.PROJECT_MANAGER, AppRole.DISPATCHER,
725
+ AppRole.CLIENT_ADMIN, AppRole.CONTRACTOR_ADMIN
726
+ ]:
727
+ raise HTTPException(
728
+ status_code=status.HTTP_403_FORBIDDEN,
729
+ detail="Only managers and administrators can view team statistics"
730
+ )
731
+
732
+ # Build base query
733
+ query = db.query(Timesheet).filter(
734
+ Timesheet.deleted_at == None,
735
+ Timesheet.work_date >= start_date,
736
+ Timesheet.work_date <= end_date
737
+ )
738
+
739
+ # Apply project filter if provided
740
+ if project_id:
741
+ query = query.filter(Timesheet.project_id == project_id)
742
+
743
+ # Get all timesheets in range
744
+ timesheets = query.all()
745
+
746
+ # Group by user_id
747
+ user_timesheets: Dict[UUID, List[Timesheet]] = {}
748
+ for ts in timesheets:
749
+ if ts.user_id not in user_timesheets:
750
+ user_timesheets[ts.user_id] = []
751
+ user_timesheets[ts.user_id].append(ts)
752
+
753
+ # Calculate stats for each user
754
+ team_stats = []
755
+ for user_id, user_ts_list in user_timesheets.items():
756
+ # Get user info
757
+ user = db.query(User).filter(User.id == user_id).first()
758
+ if not user:
759
+ continue
760
+
761
+ # Calculate metrics
762
+ total_days = len(user_ts_list)
763
+ present_days = sum(1 for t in user_ts_list if t.status == TimesheetStatus.PRESENT)
764
+ absent_days = sum(1 for t in user_ts_list if t.status == TimesheetStatus.ABSENT)
765
+ on_leave_days = sum(1 for t in user_ts_list if t.status == TimesheetStatus.ON_LEAVE)
766
+ sick_leave_days = sum(1 for t in user_ts_list if t.status == TimesheetStatus.SICK_LEAVE)
767
+ half_day_count = sum(1 for t in user_ts_list if t.status == TimesheetStatus.HALF_DAY)
768
+
769
+ attendance_rate = (present_days / total_days * 100) if total_days > 0 else 0
770
+ absence_rate = (absent_days / total_days * 100) if total_days > 0 else 0
771
+
772
+ total_hours_worked = sum(float(t.hours_worked or 0) for t in user_ts_list)
773
+ average_hours_per_day = (total_hours_worked / present_days) if present_days > 0 else 0
774
+
775
+ total_tickets_assigned = sum(t.tickets_assigned for t in user_ts_list)
776
+ total_tickets_completed = sum(t.tickets_completed for t in user_ts_list)
777
+ total_tickets_rescheduled = sum(t.tickets_rescheduled for t in user_ts_list)
778
+ total_tickets_cancelled = sum(t.tickets_cancelled for t in user_ts_list)
779
+ total_tickets_rejected = sum(t.tickets_rejected for t in user_ts_list)
780
+
781
+ average_tickets_per_day = (total_tickets_completed / present_days) if present_days > 0 else 0
782
+ completion_rate = (total_tickets_completed / total_tickets_assigned * 100) if total_tickets_assigned > 0 else 0
783
+
784
+ team_stats.append({
785
+ "user_id": str(user_id),
786
+ "user_name": user.name,
787
+ "user_email": user.email,
788
+ "role": user.role.value if hasattr(user.role, 'value') else user.role,
789
+ "total_days": total_days,
790
+ "present_days": present_days,
791
+ "absent_days": absent_days,
792
+ "on_leave_days": on_leave_days,
793
+ "sick_leave_days": sick_leave_days,
794
+ "half_day_count": half_day_count,
795
+ "attendance_rate": round(attendance_rate, 2),
796
+ "absence_rate": round(absence_rate, 2),
797
+ "total_hours_worked": round(total_hours_worked, 2),
798
+ "average_hours_per_day": round(average_hours_per_day, 2),
799
+ "total_tickets_assigned": total_tickets_assigned,
800
+ "total_tickets_completed": total_tickets_completed,
801
+ "total_tickets_rescheduled": total_tickets_rescheduled,
802
+ "total_tickets_cancelled": total_tickets_cancelled,
803
+ "total_tickets_rejected": total_tickets_rejected,
804
+ "average_tickets_per_day": round(average_tickets_per_day, 2),
805
+ "completion_rate": round(completion_rate, 2)
806
+ })
807
+
808
+ # Sort by completion rate descending (best performers first)
809
+ team_stats.sort(key=lambda x: x["completion_rate"], reverse=True)
810
+
811
+ return {
812
+ "start_date": start_date,
813
+ "end_date": end_date,
814
+ "project_id": str(project_id) if project_id else None,
815
+ "team_size": len(team_stats),
816
+ "team_members": team_stats
817
+ }
818
+
819
+ except HTTPException:
820
+ raise
821
+ except Exception as e:
822
+ logger.error(f"Error getting team stats: {str(e)}")
823
+ raise HTTPException(
824
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
825
+ detail=f"Failed to get team stats: {str(e)}"
826
+ )
827
+
828
+
829
  @router.get("/{timesheet_id}", response_model=TimesheetResponse)
830
  @require_permission("view_timesheets")
831
  async def get_timesheet(
 
1168
  )
1169
 
1170
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1171
  # ============================================
1172
  # BULK UPDATE / RECALCULATION
1173
  # ============================================
src/app/constants/permissions.py CHANGED
@@ -1,4 +1,10 @@
1
  """
2
  PERMISSIONS Constants
 
 
 
3
  """
4
- # TODO: Define permissions constants
 
 
 
 
1
  """
2
  PERMISSIONS Constants
3
+
4
+ This module defines all permission strings used in the application.
5
+ These permissions are mapped to roles in app/core/permissions.py
6
  """
7
+
8
+ # Timesheet Permissions
9
+ VIEW_TIMESHEETS = "view_timesheets"
10
+ MANAGE_TIMESHEETS = "manage_timesheets"
src/app/core/permissions.py CHANGED
@@ -81,6 +81,9 @@ ROLE_PERMISSIONS: Dict[AppRole, List[str]] = {
81
  # Project Management
82
  "manage_projects",
83
  "view_reports",
 
 
 
84
  # Inventory Management
85
  "view_inventory", # View inventory lists and stats
86
  "manage_inventory", # Create, update, delete inventory
@@ -109,6 +112,9 @@ ROLE_PERMISSIONS: Dict[AppRole, List[str]] = {
109
  "accept_projects",
110
  "view_payroll",
111
  "manage_tickets",
 
 
 
112
  # Inventory Management
113
  "view_inventory", # View inventory lists and stats
114
  "manage_inventory", # Create, update, delete inventory
@@ -137,6 +143,9 @@ ROLE_PERMISSIONS: Dict[AppRole, List[str]] = {
137
  "create_tickets",
138
  "manage_tickets",
139
  "approve_expenses",
 
 
 
140
  # Inventory Management
141
  "view_inventory", # View inventory lists and stats
142
  "manage_inventory", # Create, update, delete inventory
@@ -167,6 +176,9 @@ ROLE_PERMISSIONS: Dict[AppRole, List[str]] = {
167
  "manage_tickets",
168
  "issue_equipment",
169
  "approve_expenses",
 
 
 
170
  # Inventory Management
171
  "view_inventory", # View inventory lists and stats
172
  "manage_inventory", # Manage distributions and assignments
@@ -188,6 +200,8 @@ ROLE_PERMISSIONS: Dict[AppRole, List[str]] = {
188
  "view_tickets",
189
  "update_ticket_status",
190
  "log_expenses",
 
 
191
  # Inventory Management (Self-Service)
192
  "record_collection", # Record what they collected from hub
193
  "view_inventory", # View available inventory at hubs
 
81
  # Project Management
82
  "manage_projects",
83
  "view_reports",
84
+ # Timesheet Management
85
+ "view_timesheets", # View team timesheets
86
+ "manage_timesheets", # Create, update timesheets
87
  # Inventory Management
88
  "view_inventory", # View inventory lists and stats
89
  "manage_inventory", # Create, update, delete inventory
 
112
  "accept_projects",
113
  "view_payroll",
114
  "manage_tickets",
115
+ # Timesheet Management
116
+ "view_timesheets", # View team timesheets
117
+ "manage_timesheets", # Create, update timesheets
118
  # Inventory Management
119
  "view_inventory", # View inventory lists and stats
120
  "manage_inventory", # Create, update, delete inventory
 
143
  "create_tickets",
144
  "manage_tickets",
145
  "approve_expenses",
146
+ # Timesheet Management
147
+ "view_timesheets", # View team timesheets
148
+ "manage_timesheets", # Create, update timesheets
149
  # Inventory Management
150
  "view_inventory", # View inventory lists and stats
151
  "manage_inventory", # Create, update, delete inventory
 
176
  "manage_tickets",
177
  "issue_equipment",
178
  "approve_expenses",
179
+ # Timesheet Management
180
+ "view_timesheets", # View team timesheets
181
+ "manage_timesheets", # Create, update timesheets
182
  # Inventory Management
183
  "view_inventory", # View inventory lists and stats
184
  "manage_inventory", # Manage distributions and assignments
 
200
  "view_tickets",
201
  "update_ticket_status",
202
  "log_expenses",
203
+ # Timesheet Management (Self-Service)
204
+ "view_timesheets", # View own timesheets only
205
  # Inventory Management (Self-Service)
206
  "record_collection", # Record what they collected from hub
207
  "view_inventory", # View available inventory at hubs