Commit Graph

31 Commits

Author SHA1 Message Date
claude 7908dad181 Fix error propagation: surface API validation messages in the UI
- UseJsonExceptionHandler now maps InvalidOperationException to 400 (was 500),
  so upstream business-rule rejections reach the browser as actionable messages.
- CvMatcherController forwards Refit 4xx bodies from cv-matcher-api instead
  of swallowing them in a generic 502.
- ErrorResponse.Score removed; CaptchaController puts the score in Detail.
- Frontend extractApiError helper reads the server Error/error/title field for
  4xx responses and falls back to a generic i18n string for 5xx / missing body.
- All four failure handlers (CV upload, CV match, contact form, subscribe form)
  updated to use extractApiError with the correct rate-limit i18n key.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 09:41:24 +03:00
claude e95ed36647 refactor: restructure solution into -models/-data/-api project taxonomy
Phases 1-10 of the planned refactoring:

Phase 1: rename shared-models -> common
  - namespace Shared.Models -> Common throughout
  - remove stale AspNetCore.Http.Features 5.0 reference

Phase 2: create shared-data with abstract BaseEntity
  - BaseEntity: required string Id { get; init; } + DateTime CreatedAt { get; init; }

Phase 3: rename myai-models -> myai-data
  - namespace MyAi.Models -> MyAi.Data
  - MigrationsAssembly("myai-data")

Phase 4: rename cv-search-models -> cv-search-data
  - namespace CvSearch.Models -> CvSearch.Data
  - move JobSearchSettings to cv-matcher-api-models
  - JobSearch*Entity now inherits BaseEntity

Phase 5: extract rag-data from rag-api
  - new project: Apis/rag-data with RagDbContext + entities + migrations
  - RagDocumentEntity inherits BaseEntity; cache entities use CacheKey PK
  - fix duplicate AddHttpClient<RagAiClient>/AddScoped registrations in rag-api
  - MigrationsAssembly("rag-data")

Phase 6: extract cv-matcher-data from cv-matcher-api
  - new project: Apis/cv-matcher-data with CvMatcherDbContext + entities + migrations
  - CvMatchResultEntity inherits BaseEntity; CvMatcherChatCacheEntity uses CacheKey PK
  - MigrationsAssembly("cv-matcher-data")

Phase 7: create empty cv-cleanup-job-models and cv-search-job-models

Phase 8: update all 5 Dockerfiles for renamed/new projects

Phase 9: reorganise .sln virtual folders (Apis/Jobs/Models/Data/Helpers)
  - update root CLAUDE.md with new project taxonomy and migration commands
  - update cv-matcher-api/CLAUDE.md and cv-search-job/CLAUDE.md

Phase 10: add Directory.Packages.props for centralised NuGet versions
  - remove Version= from all PackageReference elements in active .csproj files

No database changes. No runtime behaviour changes.
All MigrationId strings in __EFMigrationsHistory are unaffected.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-27 15:26:03 +03:00
claude 2cada13fe3 Fix footer vertical misalignment — zero p margin inside footer-wrap
The <p> wrapping the copyright line had default browser margins (1em top/bottom)
which offset it above the sibling flex items despite align-items: center.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 17:11:54 +03:00
claude b6878e3b45 Respect UI language in match result — LLM responds in user's selected language
The frontend sends the active language code (currentLang()) with every match
request. CvMatcherService injects a language instruction into the system prompt
so the LLM returns summary, strengths, gaps, recommendations, and evidence in
the correct language. The match result cache (CvMatchResults) now includes
Language as part of the lookup key so Romanian and English results are stored
and retrieved independently. Existing cached rows default to 'en'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 17:04:21 +03:00
claude 6deb8dd4c8 Move version display to GET /api/health/version in HealthController
Uses GetApplicationVersion(Assembly.GetExecutingAssembly()) — the same
timestamp-based version already logged at startup and baked into the
assembly via the csproj <Version> property. Removes the minimal-API
/version endpoint from web/Program.cs and reverts the web Dockerfile
APP_VERSION build-arg (no longer needed).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 20:25:07 +03:00
claude 0154b56881 Add auto-incrementing version display to web UI footer
Exposes GET /version endpoint in the web container (reads APP_VERSION env var).
CI computes the version as 1.0.<git-commit-count> and passes it via --build-arg at build time.
Both index.html and cv-matcher/index.html show the version in the footer via a JS fetch.
docker-compose passes APP_VERSION through to the running container.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 20:18:31 +03:00
claude aa79b422e4 Changes
Build and Push Docker Images / build (push) Successful in 31s
2026-05-20 14:25:07 +03:00
claude be1dec7171 Changes
Build and Push Docker Images / build (push) Successful in 16s
2026-05-12 11:22:34 +03:00
claude 6fceeb4481 Diacritics
Build and Push Docker Images / build (push) Successful in 17s
2026-05-12 11:19:00 +03:00
claude 6470f7a9c5 Changes
Build and Push Docker Images / build (push) Successful in 40s
2026-05-12 11:16:21 +03:00
claude 19e3526430 Changes
Build and Push Docker Images / build (push) Successful in 18s
2026-05-12 11:11:06 +03:00
claude 4eaae45cba Changes 2026-05-12 10:38:04 +03:00
claude 44aa19a92e Changes
Build and Push Docker Images / build (push) Successful in 17s
2026-05-11 13:09:09 +03:00
claude e512317f33 Changes
Build and Push Docker Images / build (push) Successful in 43s
2026-05-11 12:33:51 +03:00
claude 68de34c092 Changes
Build and Push Docker Images / build (push) Failing after 17s
2026-05-08 15:23:06 +03:00
claude 25127f92a3 Changes
Build and Push Docker Images / build (push) Failing after 16s
2026-05-08 15:15:45 +03:00
claude c2896ce77b Changes
Build and Push Docker Images / build (push) Failing after 0s
2026-05-08 14:09:58 +03:00
claude 51e668bf1d Changes
Build and Push Docker Images / build (push) Failing after 0s
2026-05-08 13:46:25 +03:00
claude 845f41255f Changes
Build and Push Docker Images / build (push) Failing after 1s
2026-05-07 20:00:57 +03:00
claude 3d966a95ca Changes
Build and Push Docker Images / build (push) Successful in 29s
2026-05-06 15:41:58 +03:00
claude a926c214e1 Changes
Build and Push Docker Images / build (push) Successful in 28s
2026-05-06 15:26:25 +03:00
claude a10908364b Changes 2026-05-06 15:17:20 +03:00
claude 711810d8c2 Changes 2026-05-06 14:48:12 +03:00
claude 17266730fc Changes 2026-05-06 10:56:02 +03:00
claude 661bf461f9 Changes
Build and Push Docker Images / build (push) Successful in 13s
2026-05-04 21:46:37 +03:00
claude fa1ef23c02 Changes
Build and Push Docker Images / build (push) Successful in 37s
2026-05-04 21:02:35 +03:00
claude 3ed1588ef9 Changes
Build and Push Docker Images / build (push) Successful in 13s
2026-05-04 18:56:10 +03:00
claude 597a3f8d34 Small changes
Build and Push Docker Images / build (push) Successful in 14s
2026-05-04 17:02:37 +03:00
claude 86993fbc66 Changes
Build and Push Docker Images / build (push) Successful in 13s
2026-05-04 14:34:38 +03:00
claude ba57695e01 Changes
Build and Push Docker Images / build (push) Successful in 27s
2026-05-04 10:31:41 +03:00
claude fc2dd721e4 Initial commit
Build and Push Docker Images / build (push) Successful in 29s
2026-05-02 21:31:31 +03:00