Applicants: auto-tags + deep search w/ highlight; never delete (archive instead)
CI/CD / CI · dotnet build (push) Successful in 2m1s
CI/CD / Deploy · hamkadr (push) Successful in 2m36s

- Tags: parser extracts cert/skill keywords (mmt, ICU/CCU, دیالیز, اتاق عمل,
  اورژانس, مسئول فنی, پروانه‌دار…) + role + city into TalentListing.Tags
  (+ migration); shown as chips on cards.
- Deep search on /Talent: «جستجوی عمیق» box does Postgres ILIKE across
  tags, description, person, area, role, city (every term must match);
  matches are highlighted with <mark> via SearchHighlight.
- Never delete: ShiftStatus.Archived + the admin «بایگانی گروهی» action now
  ARCHIVES aggregated posts (hidden from site, kept in DB) and leaves the
  raw crawl rows intact — a permanent archive for future analytics.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-08 11:25:32 +03:30
parent e4dc5180ad
commit 6b657c7795
15 changed files with 1752 additions and 22 deletions
+2 -1
View File
@@ -27,7 +27,8 @@ public enum ShiftStatus
Open = 0, // باز
Filled = 1, // پر شده
Expired = 2, // منقضی
Cancelled = 3 // لغو شده
Cancelled = 3, // لغو شده
Archived = 4 // بایگانی‌شده (پنهان از سایت، نگه‌داری برای تحلیل)
}
public enum ShiftSource
@@ -31,6 +31,11 @@ public class TalentListing
[MaxLength(150)]
public string? AreaNote { get; set; } // «فقط منطقه ۱» وقتی محله دقیق نگاشت نشد
/// <summary>Searchable keyword tags (space-separated): certs/skills (mmt, icu…), پروانه‌دار,
/// role, city. Drives deep search + tag chips.</summary>
[MaxLength(500)]
public string? Tags { get; set; }
public EmploymentType? Availability { get; set; } // تمام‌وقت/پاره‌وقت/قراردادی...
public Gender Gender { get; set; } = Gender.Any; // جنسیت فرد