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
@@ -24,13 +24,13 @@
@{ int publishedCount = Model.Counts.GetValueOrDefault(JobsMedical.Web.Models.RawListingStatus.Normalized); }
@if (publishedCount > 0)
{
<form method="post" asp-page-handler="DeletePublished"
onsubmit="return confirm('همه آگهی‌های منتشرشده از جمع‌آوری (شیفت/استخدام/آماده‌به‌کار) و آیتم‌های تأییدشده‌ی متناظر حذف می‌شوند. این کار بازگشت‌ناپذیر است. ادامه می‌دهی؟');"
<form method="post" asp-page-handler="ArchivePublished"
onsubmit="return confirm('همه آگهی‌های منتشرشده از جمع‌آوری از سایت پنهان (بایگانی) می‌شوند. داده‌ها حذف نمی‌شوند و برای تحلیل باقی می‌مانند. ادامه می‌دهی؟');"
style="margin-bottom:14px;">
<button type="submit" class="btn btn-outline" style="color:var(--danger); border-color:var(--danger);">
🗑 حذف گروهی همه‌ی منتشرشده‌ها (@JalaliDate.ToPersianDigits(publishedCount.ToString()))
<button type="submit" class="btn btn-outline">
🗄 بایگانی گروهی همه‌ی منتشرشده‌ها (@JalaliDate.ToPersianDigits(publishedCount.ToString()))
</button>
<span class="muted" style="font-size:12px; margin-inline-start:8px;">آگهی‌های منتشرشده روی سایت را که از جمع‌آوری ساخته شده‌اند یکجا حذف می‌کند.</span>
<span class="muted" style="font-size:12px; margin-inline-start:8px;">از سایت پنهان می‌کند ولی هیچ‌چیز حذف نمی‌شود (آرشیو برای تحلیل).</span>
</form>
}