- Add [Required], [StringLength], [RegularExpression] to all fields
- Name: Required, max 100 characters
- Phone: Required, Korean phone number regex validation
- Email: Optional, email format validation
- ServiceType: Optional, max 50 characters
- Message: Required, 10-5000 characters
- Status (UpdateInquiryDto): Required
- AdminMemo: Optional, max 1000 characters
Provides automatic validation at DTO layer via DataAnnotations.
All error messages are user-friendly in Korean.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Backend: MinMessageLength=10, MaxMessageLength=5000
- Frontend: Real-time character counter
- Frontend: Client-side validation before submission
- Frontend: Error messages for length violations
- Applied to both Submit and Update operations
Prevents empty or excessively long messages while maintaining
user-friendly feedback on character count.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Add comprehensive Korean phone number regex validation
- Support all area codes: 02, 031-064, 070, 0505-0509
- Support all mobile carriers: 010-019
- Intelligent formatting based on area code (2-3 digits)
- Client-side JavaScript: real-time formatting + validation
- Backend C#: robust validation + formatting for storage
Handles all Korean phone number formats:
- Landline: 02-123-4567, 031-1234-5678
- Mobile: 010-1234-5678
- VoIP: 070-1234-5678, 0505-1234-5678
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- 10-digit numbers: XXXX-XXX-XXXX (4-3-3) - landline format
- 11-digit numbers: XXX-XXXX-XXXX (3-4-4) - mobile format
Apply consistent formatting on both frontend and backend.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Accept phone numbers with or without hyphens/spaces (01012345678, 010-1234-5678, etc)
- Auto-format to standard 010-XXXX-XXXX or 010-XXXX-XXXXX format on backend
- Remove strict regex validation that forced user input format
- Better UX: accept user input as-is and normalize in backend
Closes issue with phone number validation being too strict.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Problem: Inquiry status values were hardcoded as strings in multiple places:
- InquiryList.razor: Status="new", Status="consulting", etc.
- InquiryDetail.razor: inquiry.Status = "consulting"
- Makes it error-prone to update status values globally
Solution:
- Add public const fields to InquiryStatusMapper for all status values
- Replace hardcoded strings with constants (StatusNew, StatusConsulting, etc.)
- InquiryList and InquiryDetail now use mapper constants
Result: Single source of truth for status values. Changing a status value now
requires only updating InquiryStatusMapper, and all usages automatically update.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Groups the repo root into src (buildable source), docs (already existed),
and everything else (db/, scripts/, tests/, deploy/ - deployment/ops/test
assets that aren't compiled, already organized as their own folders). CI
now only needs src/ to build: dotnet restore/build/test/publish all point
at src/TaxBaik.sln, src/TaxBaik.Web/, src/TaxBaik.Proxy/.
- git mv every project (Domain, Infrastructure, Application,
Application.Tests, Web, Web.Client, Proxy) and TaxBaik.sln into src/ as a
unit, so relative ProjectReference/.sln paths stay valid unchanged.
- .gitea/workflows/deploy.yml: 6 dotnet restore/clean/build/test/publish
invocations now point at src/. db/migrations and scripts/ stay at root
(deploy_gb.sh and browser-e2e.yml only touch published output and the
deployed URL, not source paths - verified, no changes needed there).
- scripts/validate_admin_render.sh: admin render-mode file paths now
src/TaxBaik.Web.Client/...
- scripts/validate_kst_timestamps.sh: dropped deploy.sh from its target
list - that script was removed in the prior cleanup commit (dead, no
CI workflow referenced it) but this validator still expected it to exist.
- CLAUDE.md, docs/ENGINEERING_HARNESS.md, docs/ADMIN_PATTERN_CRITIQUE_WBS.md:
updated project-structure diagram, dotnet run/build commands, and grep
targets to the new src/ paths (also fixed a pre-existing stale path in
ADMIN_PATTERN_CRITIQUE_WBS.md that still said TaxBaik.Web/Components/Admin
from before that ever moved to TaxBaik.Web.Client).
- Added a Repo Root harness rule + Architecture Guardrail entries: new files
belong under src/docs/tests/scripts/db/deploy, not loose at root; temp
work stays outside the repo (or under a gitignored .scratch/) and is
never committed.
Verified locally: dotnet build/test src/TaxBaik.sln (26/26 tests), and all
three scripts/validate_*.sh pass against the new layout.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>