feat: release regional radar and mailbox integrations
deploy / deploy (push) Canceled after 0s

This commit is contained in:
Jens
2026-07-22 05:12:07 +02:00
parent 598d3ec18a
commit 551d0f46c2
131 changed files with 6209 additions and 336 deletions
+21 -1
View File
@@ -8,6 +8,7 @@ from django.utils import timezone
from apps.jobs.models import Employer, FieldProvenance, JobPosting, JobSourceAlias, JobVersion
from apps.profiles.models import SearchProfile
from apps.sources.adapters.base import FieldEvidence
from apps.sources.adapters.registry import registry
from apps.sources.models import RawDocument, Source
from apps.sources.services.policy import is_denied_domain
@@ -89,7 +90,10 @@ def _source_is_direct(source: Source | None, draft: CanonicalJobDraft) -> bool:
host = (urlsplit(draft.canonical_url).hostname or "").lower()
if is_denied_domain(host):
return False
return bool(source and source.source_type == Source.Type.EMPLOYER)
if not source:
return False
metadata = source.metadata if isinstance(source.metadata, dict) else {}
return source.source_type == Source.Type.EMPLOYER or metadata.get("direct_employer") is True
def _alias_payload(
@@ -314,6 +318,22 @@ def process_raw_document(document: RawDocument) -> dict[str, int | str | list[st
)
created = updated = duplicates = 0
for extracted in result.jobs:
source_metadata = (
document.source.metadata
if document.source and isinstance(document.source.metadata, dict)
else {}
)
configured_employer = str(source_metadata.get("employer_name") or "").strip()
if configured_employer:
extracted.employer_name = configured_employer
extracted.evidence.append(
FieldEvidence(
"employer_name",
"reviewed-source-config",
0.99,
configured_employer,
)
)
draft = normalize_extracted_job(extracted)
_, decision, was_created = persist_draft(
draft,
+19 -1
View File
@@ -3,7 +3,7 @@ from __future__ import annotations
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.db.models import Q
from django.db.models import CharField, DecimalField, OuterRef, Q, Subquery
from django.http import Http404, HttpResponse
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
@@ -31,6 +31,24 @@ class JobListView(LoginRequiredMixin, ListView):
def get_queryset(self):
queryset = JobPosting.objects.select_related("employer").all()
profile = SearchProfile.objects.filter(user=self.request.user, is_active=True).first()
if profile:
latest_score = ScoreRun.objects.filter(job=OuterRef("pk"), profile=profile).order_by(
"-created_at"
)
queryset = queryset.annotate(
match_score=Subquery(
latest_score.values("score")[:1],
output_field=DecimalField(max_digits=5, decimal_places=2),
),
match_confidence=Subquery(
latest_score.values("confidence")[:1],
output_field=DecimalField(max_digits=4, decimal_places=3),
),
match_recommendation=Subquery(
latest_score.values("recommendation")[:1], output_field=CharField()
),
)
query = self.request.GET.get("q", "").strip()
status = self.request.GET.get("status", "active").strip()
workplace = self.request.GET.get("workplace", "").strip()