Migrate TaskService + ResidenceService to ctx-aware repos
Every public method on TaskService and ResidenceService now takes ctx context.Context as the first arg and routes its repo calls through .WithContext(ctx). With otelgorm registered, this means every API endpoint backed by these two services produces a flame graph in Jaeger where the SQL spans nest under the parent HTTP request span — instead of appearing as orphaned queries. Endpoints now fully traced (HTTP → service → SQL): - GET /api/tasks/ (already shipped) - GET /api/tasks/by-residence/:id/ (already shipped) - GET /api/tasks/:id/ - POST /api/tasks/ - POST /api/tasks/bulk/ - PUT /api/tasks/:id/ - DELETE /api/tasks/:id/ - POST /api/tasks/:id/in-progress/ - POST /api/tasks/:id/cancel/ - POST /api/tasks/:id/uncancel/ - POST /api/tasks/:id/archive/ - POST /api/tasks/:id/unarchive/ - POST /api/tasks/:id/complete/ - POST /api/tasks/:id/quick-complete/ - GET /api/tasks/completions/* (CRUD) - GET /api/static_data/ (categories, priorities, frequencies) - GET /api/residences/ - GET /api/residences/my/ - GET /api/residences/summary/ - GET /api/residences/:id/ - POST /api/residences/ - PUT /api/residences/:id/ - DELETE /api/residences/:id/ - Share-code + member management endpoints - GET /api/residences/:id/report/ Mechanical work: ~50 method signatures, ~80 handler call sites, ~25 test call sites updated. Internal sendTaskCompletedNotification helper also takes ctx so background notification SQL nests correctly. The remaining services (ContractorService, DocumentService, AuthService, NotificationService, SubscriptionService) follow the same pattern; they continue to emit untraced SQL until migrated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -83,7 +83,7 @@ func (h *TaskHandler) GetTask(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_task_id")
|
||||
}
|
||||
|
||||
response, err := h.taskService.GetTask(uint(taskID), user.ID)
|
||||
response, err := h.taskService.GetTask(c.Request().Context(), uint(taskID), user.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -144,7 +144,7 @@ func (h *TaskHandler) CreateTask(c echo.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
response, err := h.taskService.CreateTask(&req, user.ID, userNow)
|
||||
response, err := h.taskService.CreateTask(c.Request().Context(), &req, user.ID, userNow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -169,7 +169,7 @@ func (h *TaskHandler) BulkCreateTasks(c echo.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
response, err := h.taskService.BulkCreateTasks(&req, user.ID, userNow)
|
||||
response, err := h.taskService.BulkCreateTasks(c.Request().Context(), &req, user.ID, userNow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -197,7 +197,7 @@ func (h *TaskHandler) UpdateTask(c echo.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
response, err := h.taskService.UpdateTask(uint(taskID), user.ID, &req, userNow)
|
||||
response, err := h.taskService.UpdateTask(c.Request().Context(), uint(taskID), user.ID, &req, userNow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -215,7 +215,7 @@ func (h *TaskHandler) DeleteTask(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_task_id")
|
||||
}
|
||||
|
||||
response, err := h.taskService.DeleteTask(uint(taskID), user.ID)
|
||||
response, err := h.taskService.DeleteTask(c.Request().Context(), uint(taskID), user.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -235,7 +235,7 @@ func (h *TaskHandler) MarkInProgress(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_task_id")
|
||||
}
|
||||
|
||||
response, err := h.taskService.MarkInProgress(uint(taskID), user.ID, userNow)
|
||||
response, err := h.taskService.MarkInProgress(c.Request().Context(), uint(taskID), user.ID, userNow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -255,7 +255,7 @@ func (h *TaskHandler) CancelTask(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_task_id")
|
||||
}
|
||||
|
||||
response, err := h.taskService.CancelTask(uint(taskID), user.ID, userNow)
|
||||
response, err := h.taskService.CancelTask(c.Request().Context(), uint(taskID), user.ID, userNow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -275,7 +275,7 @@ func (h *TaskHandler) UncancelTask(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_task_id")
|
||||
}
|
||||
|
||||
response, err := h.taskService.UncancelTask(uint(taskID), user.ID, userNow)
|
||||
response, err := h.taskService.UncancelTask(c.Request().Context(), uint(taskID), user.ID, userNow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -295,7 +295,7 @@ func (h *TaskHandler) ArchiveTask(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_task_id")
|
||||
}
|
||||
|
||||
response, err := h.taskService.ArchiveTask(uint(taskID), user.ID, userNow)
|
||||
response, err := h.taskService.ArchiveTask(c.Request().Context(), uint(taskID), user.ID, userNow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -315,7 +315,7 @@ func (h *TaskHandler) UnarchiveTask(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_task_id")
|
||||
}
|
||||
|
||||
response, err := h.taskService.UnarchiveTask(uint(taskID), user.ID, userNow)
|
||||
response, err := h.taskService.UnarchiveTask(c.Request().Context(), uint(taskID), user.ID, userNow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -334,7 +334,7 @@ func (h *TaskHandler) QuickComplete(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_task_id")
|
||||
}
|
||||
|
||||
err = h.taskService.QuickComplete(uint(taskID), user.ID)
|
||||
err = h.taskService.QuickComplete(c.Request().Context(), uint(taskID), user.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -354,7 +354,7 @@ func (h *TaskHandler) GetTaskCompletions(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_task_id")
|
||||
}
|
||||
|
||||
response, err := h.taskService.GetCompletionsByTask(uint(taskID), user.ID)
|
||||
response, err := h.taskService.GetCompletionsByTask(c.Request().Context(), uint(taskID), user.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -367,7 +367,7 @@ func (h *TaskHandler) ListCompletions(c echo.Context) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
response, err := h.taskService.ListCompletions(user.ID)
|
||||
response, err := h.taskService.ListCompletions(c.Request().Context(), user.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -385,7 +385,7 @@ func (h *TaskHandler) GetCompletion(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_completion_id")
|
||||
}
|
||||
|
||||
response, err := h.taskService.GetCompletion(uint(completionID), user.ID)
|
||||
response, err := h.taskService.GetCompletion(c.Request().Context(), uint(completionID), user.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -465,7 +465,7 @@ func (h *TaskHandler) CreateCompletion(c echo.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
response, err := h.taskService.CreateCompletion(&req, user.ID, userNow)
|
||||
response, err := h.taskService.CreateCompletion(c.Request().Context(), &req, user.ID, userNow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -491,7 +491,7 @@ func (h *TaskHandler) UpdateCompletion(c echo.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
response, err := h.taskService.UpdateCompletion(uint(completionID), user.ID, &req)
|
||||
response, err := h.taskService.UpdateCompletion(c.Request().Context(), uint(completionID), user.ID, &req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -509,7 +509,7 @@ func (h *TaskHandler) DeleteCompletion(c echo.Context) error {
|
||||
return apperrors.BadRequest("error.invalid_completion_id")
|
||||
}
|
||||
|
||||
response, err := h.taskService.DeleteCompletion(uint(completionID), user.ID)
|
||||
response, err := h.taskService.DeleteCompletion(c.Request().Context(), uint(completionID), user.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -520,7 +520,7 @@ func (h *TaskHandler) DeleteCompletion(c echo.Context) error {
|
||||
|
||||
// GetCategories handles GET /api/tasks/categories/
|
||||
func (h *TaskHandler) GetCategories(c echo.Context) error {
|
||||
categories, err := h.taskService.GetCategories()
|
||||
categories, err := h.taskService.GetCategories(c.Request().Context())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -529,7 +529,7 @@ func (h *TaskHandler) GetCategories(c echo.Context) error {
|
||||
|
||||
// GetPriorities handles GET /api/tasks/priorities/
|
||||
func (h *TaskHandler) GetPriorities(c echo.Context) error {
|
||||
priorities, err := h.taskService.GetPriorities()
|
||||
priorities, err := h.taskService.GetPriorities(c.Request().Context())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -538,7 +538,7 @@ func (h *TaskHandler) GetPriorities(c echo.Context) error {
|
||||
|
||||
// GetFrequencies handles GET /api/tasks/frequencies/
|
||||
func (h *TaskHandler) GetFrequencies(c echo.Context) error {
|
||||
frequencies, err := h.taskService.GetFrequencies()
|
||||
frequencies, err := h.taskService.GetFrequencies(c.Request().Context())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user