Divar geo-coords to facility map + medical gate + RawListing FK/geo migrations
CI/CD / CI · dotnet build (push) Successful in 2m6s
CI/CD / Deploy · hamkadr (push) Successful in 2m3s

This commit is contained in:
soroush.asadi
2026-06-09 21:38:55 +03:30
parent cf5e0011c4
commit 380243b669
14 changed files with 3567 additions and 36 deletions
@@ -3,7 +3,7 @@ using JobsMedical.Web.Models;
namespace JobsMedical.Web.Services.Scraping;
public record ValidationResult(bool IsValid, bool IsSpam, int Confidence, List<string> Issues);
public record ValidationResult(bool IsValid, bool IsSpam, int Confidence, List<string> Issues, bool LooksMedical = false);
/// <summary>
/// Scores a parsed listing for completeness and screens out spam. A listing must look like a
@@ -64,7 +64,7 @@ public class ListingValidator
if (isPromo)
{
issues.Add("آگهی تبلیغاتی/آموزشی است، نه استخدام/شیفت");
return new ValidationResult(false, true, 0, issues); // IsSpam → auto-discard
return new ValidationResult(false, true, 0, issues, looksMedical); // IsSpam → auto-discard
}
// «آماده به کار»: a worker offering themselves. No facility/shift-date expected; the role
@@ -84,7 +84,7 @@ public class ListingValidator
if (tlen < 20) { ts -= 20; issues.Add("متن خیلی کوتاه است"); }
ts = Math.Clamp(ts, 0, 100);
bool tValid = !isSpam && looksMedical && ts >= 50; // role(40)+medical(10) passes w/o phone
return new ValidationResult(tValid, isSpam, ts, issues);
return new ValidationResult(tValid, isSpam, ts, issues, looksMedical);
}
int score = 0;
@@ -107,6 +107,6 @@ public class ListingValidator
// Valid enough for the queue if it's medical, not spam, and reasonably complete.
bool isValid = !isSpam && looksMedical && score >= 50;
return new ValidationResult(isValid, isSpam, score, issues);
return new ValidationResult(isValid, isSpam, score, issues, looksMedical);
}
}