-
Notifications
You must be signed in to change notification settings - Fork 71
feat/user-exception #193
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat/user-exception #193
Conversation
WalkthroughIntroduces a new domain exception class for the user module. The file defines InvalidUserDataException extending DomainException, with a constructor accepting field and value and formatting the message as "Invalid {field}: {value}". Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~2 minutes Poem
✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (1)
src/modules/user/domain/exceptions/user.exceptions.ts (1)
5-5: Broadenvaluetype or make it optional.If you must keep it, prefer
unknown(notstring) to handle numbers/dates/etc. Keep it out of the message; expose only via safe metadata.- constructor(field: string, value: string) { + constructor(field: string, value?: unknown) {
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
src/modules/user/domain/exceptions/user.exceptions.ts(1 hunks)
🔇 Additional comments (1)
src/modules/user/domain/exceptions/user.exceptions.ts (1)
4-4: Good addition: domain-typed user exception.Clear, scoped exception improves intent and catch specificity.
| @@ -0,0 +1,8 @@ | |||
| import { DomainException } from "@/modules/shared/domain/exceptions/domain.exception"; | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Verify “@” path alias resolution in build/tests.
Ensure tsconfig paths and test runners map "@/..." correctly to avoid runtime/import failures.
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Check TS path alias mapping (@/*) in tsconfig*:"
rg -nP '"paths"\s*:\s*{[^}]*"@/\*"\s*:\s*\["src/\*"\]' tsconfig*.json -C2 || echo "Missing @ alias mapping"
echo "Check baseUrl set to src in tsconfig*:"
rg -nP '"baseUrl"\s*:\s*"src"' tsconfig*.json || echo "Missing baseUrl src"
echo "Check Jest/Vitest moduleNameMapper for @/*:"
fd -a -p -t f -E node_modules '(jest|vitest).*\.config\.(js|ts|mjs|cjs)' \
| xargs -I{} rg -nP '@/(.*)' {} -C2 || echo "Missing moduleNameMapper for @/*"Length of output: 860
Add missing TypeScript path alias in tsconfig.json
In tsconfig.json, set compilerOptions.baseUrl to "src" and add under compilerOptions.paths
"@/*": ["src/*"]so that imports like @/… resolve at build time.
🤖 Prompt for AI Agents
In src/modules/user/domain/exceptions/user.exceptions.ts around line 1, imports
use the "@/..." path alias which isn't configured; update tsconfig.json by
setting compilerOptions.baseUrl to "src" and add compilerOptions.paths entry
mapping "@/*" to ["src/*"] so the "@/..." imports resolve at build time (then
restart the TS server / rebuild to pick up the change).
| constructor(field: string, value: string) { | ||
| super(`Invalid ${field}: ${value}`); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don’t interpolate user-provided values into error messages (PII leak).
Including raw values (e.g., email, phone, token) in messages/logs is risky. Prefer generic messages and carry details as structured, non-sensitive metadata.
Apply this diff:
-export class InvalidUserDataException extends DomainException {
- constructor(field: string, value: string) {
- super(`Invalid ${field}: ${value}`);
- }
-}
+export class InvalidUserDataException extends DomainException {
+ readonly code = 'USER_INVALID_DATA' as const;
+ readonly field: string;
+
+ constructor(field: string, _value?: unknown) {
+ super(`Invalid ${field}`);
+ this.name = new.target.name;
+ this.field = field;
+ }
+}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| constructor(field: string, value: string) { | |
| super(`Invalid ${field}: ${value}`); | |
| export class InvalidUserDataException extends DomainException { | |
| readonly code = 'USER_INVALID_DATA' as const; | |
| readonly field: string; | |
| constructor(field: string, _value?: unknown) { | |
| super(`Invalid ${field}`); | |
| this.name = new.target.name; | |
| this.field = field; | |
| } | |
| } |
🤖 Prompt for AI Agents
In src/modules/user/domain/exceptions/user.exceptions.ts around lines 5-6, the
constructor currently interpolates user-provided values into the error message
(super(`Invalid ${field}: ${value}`)); remove direct interpolation to avoid PII
leakage by using a generic message (e.g., "Invalid field value") and add
non-sensitive structured metadata on the exception instance (store field name
and, if necessary, a redacted or flagged indicator rather than the raw value) so
callers/loggers can access details without embedding raw user data in the
message.
🚀 Volunchain Pull Request
Mark with an
xall the checkboxes that apply (like[x])📌 Type of Change
📝 Changes description
Create user exception
Summary by CodeRabbit