Skip to content

Refactor (packages/console/app/src/routes/zen/util/handler.ts): Function with many parameters - #107

Open
iibrohim-hash wants to merge 7 commits into
CMU-17313Q:mainfrom
iibrohim-hash:refactor/select-provider-params
Open

iibrohim-hash wants to merge 7 commits into
CMU-17313Q:mainfrom
iibrohim-hash:refactor/select-provider-params

Conversation

@iibrohim-hash

@iibrohim-hash iibrohim-hash commented Sep 6, 2026

Copy link
Copy Markdown

P1B: Starter Task: Refactoring PR

1. Issue

Link to the associated GitHub issue:
#90

Full path to the refactored file:
packages/console/app/src/routes/zen/util/handler.ts

What do you think this file does?
Handles incoming API requests to the "zen" LLM proxy endpoint: authenticates the caller, validates the requested model, selects an upstream provider, forwards the request, and tracks usage/billing.

What is the scope of your refactoring within that file?
The selectProvider function and its single call site inside retriableRequest. I also moved selectProvider into its own module, selectProvider.ts, so it could be unit tested independently of handler.ts's database/config dependencies.

Which Qlty-reported issue did you address?
Qlty "Function with many parameters" — selectProvider had 11 positional parameters (BEFORE: count = 11).

2. Refactoring

How did the specific issue you chose impact the codebase's maintainability?
11 positional parameters made call sites error-prone (easy to mix up argument order) and made the function signature hard to read or safely extend.

What changes did you make to resolve the issue?
Introduced a SelectProviderParams interface bundling all 11 parameters into a single object, changed selectProvider to accept that one object, destructured it inside the function, and updated the single call site in retriableRequest to pass an object literal instead of positional arguments.

How do your changes improve maintainability? Did you consider alternatives?
A single named-parameter object makes the call site self-documenting and order-independent, and makes it easy to add new options later without breaking existing callers. I considered splitting the function into two smaller ones instead, but that would have added indirection without addressing the actual smell.

3. Validation

How did you validate that the change is correct?
Ran qlty smells before and after confirming the "many parameters" smell is resolved; ran bun lint (no new issues introduced in changed files); ran the full existing test suite (bun test, 23/25 pass — the 2 failures are in providerUsage.test.ts, pre-existing on main and unrelated to this change, confirmed by reproducing the identical failure with this branch's changes stashed); added app/test/selectProvider.test.ts with 4 new tests directly exercising selectProvider's new object-based signature (provider selection, exclusion via retry, sticky provider preference, and the no-provider-available error path).

Attach a screenshot of the test coverage showing the lines were executed by the tests.

Screenshot 2026-09-06 at 21 11 37

bun test

Screenshot 2026-09-06 at 21 17 15

bun lint
Full repo: 698 warnings, 2 errors, pre-existing on main, unrelated to this PR.

Scoped to this PR's changed files (handler.ts, selectProvider.ts): only 2 pre-existing warnings remain in handler.ts (unused destructured variables reqBody and reasoningTokens, not touched by this refactor). selectProvider.ts introduces zero lint issues.

before
Screenshot 2026-09-06 at 20 55 28

after
Screenshot 2026-09-06 at 20 55 43

Attach a screenshot showing the tests that cover the change passing during CI
Screenshot 2026-09-06 at 21 21 40
Screenshot 2026-09-06 at 21 33 21

Attach a screenshot of qlty smells --no-snippets <full/path/to/file.ts> showing fewer reported issues after the changes.
before
Screenshot 2026-09-06 at 20 48 52

after
Screenshot 2026-09-06 at 19 37 51

Reduces selectProvider's 11 positional parameters to a single
SelectProviderParams object, resolving the Qlty 'many parameters'
smell. Pure signature change — no behavioral changes. Updated the
single call site in retriableRequest accordingly.
Reduces selectProvider's 11 positional parameters to a single
SelectProviderParams object, resolving the Qlty 'many parameters'
smell. Moved selectProvider to its own module (selectProvider.ts)
so it can be unit tested without pulling in Database/SST-linked
dependencies from handler.ts. Added selectProvider.test.ts covering
provider selection, exclusion, sticky provider preference, and the
no-provider-available error path. Updated the single call site in
handler.ts's retriableRequest accordingly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant