Refactoring Controllers Into Service Objects (Tasks + Rewards)

Refactored Tasks and Rewards controllers to service-driven flows, moving business logic out of controllers for consistency and maintainability.

This release focused on one architectural goal: controllers should orchestrate, not own business logic.

On the rewards side, redemption behavior was split into dedicated units: `Rewards::RedeemLevel`, `Rewards::RedeemAny`, `Rewards::RedeemTask`, and `Rewards::IndexData`. That removed branching and payload construction from the controller and made each redemption path easier to reason about in isolation.

On the tasks side, creation, repeating, updating, completion, deletion, and index filtering/sorting were all extracted into services: `Tasks::CreateTask`, `Tasks::UpdateTask`, `Tasks::CompleteOnTime`, `Tasks::DestroyTask`, and `Tasks::IndexData`. The controller now coordinates flow instead of implementing workflow internals.

The point of this refactor was consistency and maintainability: one process for business actions, smaller controller methods, and clearer boundaries for future changes and testing. No feature expansion, just tighter structure and less hidden behavior in controller actions.

Posted: February 04, 2026