Files
hamkadr/src/JobsMedical.Web/Models/RawListing.cs
T
soroush.asadi 380243b669
CI/CD / CI · dotnet build (push) Successful in 2m6s
CI/CD / Deploy · hamkadr (push) Successful in 2m3s
Divar geo-coords to facility map + medical gate + RawListing FK/geo migrations
2026-06-09 21:38:55 +03:30

51 lines
2.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.ComponentModel.DataAnnotations;
namespace JobsMedical.Web.Models;
/// <summary>
/// Staging area for shift listings aggregated from Telegram / Bale / Divar channels.
/// An admin reviews and normalizes these into real <see cref="Shift"/> records.
/// This is how we beat the cold-start problem.
/// </summary>
public class RawListing
{
public int Id { get; set; }
[MaxLength(200)]
public string SourceChannel { get; set; } = ""; // نام کانال/منبع
[Required]
public string RawText { get; set; } = ""; // متن خام آگهی
public string? ParsedJson { get; set; } // نتیجه‌ی تجزیه‌ی خودکار (در صورت وجود)
public RawListingStatus Status { get; set; } = RawListingStatus.New;
public int? LinkedShiftId { get; set; } // شیفت ساخته‌شده از این آگهی
public Shift? LinkedShift { get; set; }
public int? LinkedTalentId { get; set; } // آگهی «آماده به کار» ساخته‌شده از این متن
public TalentListing? LinkedTalent { get; set; }
[MaxLength(500)]
public string? SourceUrl { get; set; }
/// <summary>Approximate coordinates harvested from the source (e.g. Divar's fuzzed map center).
/// Carried through the review queue so a manual publish can still place the facility on the map.</summary>
public double? Lat { get; set; }
public double? Lng { get; set; }
/// <summary>SHA-256 of the normalized text — used to dedupe across ingestion runs.</summary>
[MaxLength(64)]
public string? ContentHash { get; set; }
/// <summary>Parser+validator confidence 0100 (how complete/usable the listing looks).</summary>
public int Confidence { get; set; }
/// <summary>Human-readable validation findings (missing fields, spam flags, etc.).</summary>
[MaxLength(1000)]
public string? ValidationNotes { get; set; }
public DateTime FetchedAt { get; set; } = DateTime.UtcNow;
}