Tighten raw rewrite selection UI

This commit is contained in:
Your Name
2026-08-05 14:45:57 +05:00
parent d65d1498a9
commit 34f339d434
2 changed files with 23 additions and 11 deletions
+8 -2
View File
@@ -1123,6 +1123,13 @@ def prepare_raw_post(row: Any) -> dict[str, Any]:
post["qualified_at_fmt"] = format_dt(post.get("qualified_at")) post["qualified_at_fmt"] = format_dt(post.get("qualified_at"))
post["stage"] = pipeline_stage(post) post["stage"] = pipeline_stage(post)
post["ai_badge"] = ai_badge(post) post["ai_badge"] = ai_badge(post)
post["can_send_to_rewrite"] = (
post.get("status") == "storage_ready"
and (
(post.get("qualification_status") or "pending") == "rejected"
or (post.get("editorial_status") or "review") == "rejected"
)
)
return post return post
@@ -2727,8 +2734,7 @@ async def raw_send_to_rewrite(
WHERE id=ANY($1::bigint[]) WHERE id=ANY($1::bigint[])
AND status='storage_ready' AND status='storage_ready'
AND ( AND (
COALESCE(rewrite_status, 'pending') IN ('pending', 'failed') COALESCE(qualification_status, 'pending')='rejected'
OR COALESCE(qualification_status, 'pending')='rejected'
OR COALESCE(editorial_status, 'review')='rejected' OR COALESCE(editorial_status, 'review')='rejected'
) )
FOR UPDATE FOR UPDATE
@@ -107,7 +107,11 @@
{% for p in posts %} {% for p in posts %}
<div class="block p-4 hover:bg-app-surfaceHover transition-colors"> <div class="block p-4 hover:bg-app-surfaceHover transition-colors">
<div class="flex items-start justify-between gap-3"> <div class="flex items-start justify-between gap-3">
<input type="checkbox" name="raw_post_id" value="{{ p.id }}" form="raw-rewrite-form" class="checkbox mt-1" aria-label="Выбрать raw #{{ p.id }}"> {% if p.can_send_to_rewrite %}
<input type="checkbox" name="raw_post_id" value="{{ p.id }}" form="raw-rewrite-form" class="checkbox mt-1" aria-label="Выбрать raw #{{ p.id }}">
{% else %}
<span class="mt-1 h-4 w-4 flex-shrink-0"></span>
{% endif %}
<div class="min-w-0"> <div class="min-w-0">
<div class="font-mono text-xs text-app-primary">#{{ p.id }}</div> <div class="font-mono text-xs text-app-primary">#{{ p.id }}</div>
<div class="mt-1 font-semibold text-app-textMain truncate">{{ p.source_name }}</div> <div class="mt-1 font-semibold text-app-textMain truncate">{{ p.source_name }}</div>
@@ -131,7 +135,7 @@
</div> </div>
<details class="mt-3 group"> <details class="mt-3 group">
<summary class="list-none cursor-pointer text-xs text-app-textMain/80 leading-relaxed"> <summary class="list-none cursor-pointer text-xs text-app-textMain/80 leading-relaxed">
<span class="block group-open:hidden line-clamp-3">{{ p.raw_text }}</span> <span class="block group-open:hidden" style="display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden;">{{ p.raw_text }}</span>
<span class="hidden group-open:block whitespace-pre-wrap">{{ p.raw_text }}</span> <span class="hidden group-open:block whitespace-pre-wrap">{{ p.raw_text }}</span>
</summary> </summary>
{% if p.media_items %} {% if p.media_items %}
@@ -173,19 +177,21 @@
{% for p in posts %} {% for p in posts %}
<tr class="hover:bg-app-surfaceHover transition-colors group"> <tr class="hover:bg-app-surfaceHover transition-colors group">
<td class="px-4 py-3 align-top"> <td class="px-4 py-3 align-top">
<input type="checkbox" name="raw_post_id" value="{{ p.id }}" form="raw-rewrite-form" class="checkbox" aria-label="Выбрать raw #{{ p.id }}"> {% if p.can_send_to_rewrite %}
<input type="checkbox" name="raw_post_id" value="{{ p.id }}" form="raw-rewrite-form" class="checkbox" aria-label="Выбрать raw #{{ p.id }}">
{% endif %}
</td> </td>
<td class="px-4 py-3 font-mono text-xs"> <td class="px-4 py-3 align-top font-mono text-xs">
<span class="text-app-primary">#{{ p.id }}</span> <span class="text-app-primary">#{{ p.id }}</span>
</td> </td>
<td class="px-4 py-3 whitespace-normal min-w-[200px]"> <td class="px-4 py-3 align-top whitespace-normal min-w-[200px]">
<a href="{{ p.original_url }}" target="_blank" class="font-semibold text-app-textMain hover:text-app-primary transition-colors">{{ p.source_name }}</a> <a href="{{ p.original_url }}" target="_blank" class="font-semibold text-app-textMain hover:text-app-primary transition-colors">{{ p.source_name }}</a>
<div class="flex items-center gap-2 mt-1"> <div class="flex items-center gap-2 mt-1">
<span class="text-[10px] text-app-textMuted font-mono bg-app-bg px-1 rounded">{{ p.source_platform }}</span> <span class="text-[10px] text-app-textMuted font-mono bg-app-bg px-1 rounded">{{ p.source_platform }}</span>
<span class="text-[10px] text-blue-400 font-mono">#{{ p.source_tag or "—" }}</span> <span class="text-[10px] text-blue-400 font-mono">#{{ p.source_tag or "—" }}</span>
</div> </div>
</td> </td>
<td class="px-4 py-3"> <td class="px-4 py-3 align-top">
<div class="flex flex-col items-start gap-1"> <div class="flex flex-col items-start gap-1">
<span class="badge badge-neutral text-[9px] uppercase tracking-wider">{{ p.status }}</span> <span class="badge badge-neutral text-[9px] uppercase tracking-wider">{{ p.status }}</span>
{% if p.qualification_status %} {% if p.qualification_status %}
@@ -199,10 +205,10 @@
<div class="text-[10px] text-app-error mt-1 max-w-[200px] whitespace-normal leading-tight">{{ p.error }}</div> <div class="text-[10px] text-app-error mt-1 max-w-[200px] whitespace-normal leading-tight">{{ p.error }}</div>
{% endif %} {% endif %}
</td> </td>
<td class="px-4 py-3 whitespace-normal w-full max-w-sm lg:max-w-xl xl:max-w-2xl"> <td class="px-4 py-3 align-top whitespace-normal w-full max-w-sm lg:max-w-xl xl:max-w-2xl">
<details class="group"> <details class="group">
<summary class="list-none cursor-pointer text-xs text-app-textMain/80 leading-relaxed font-sans"> <summary class="list-none cursor-pointer text-xs text-app-textMain/80 leading-relaxed font-sans">
<span class="block group-open:hidden line-clamp-3">{{ p.raw_text }}</span> <span class="block group-open:hidden" style="display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden;">{{ p.raw_text }}</span>
<span class="hidden group-open:block whitespace-pre-wrap">{{ p.raw_text }}</span> <span class="hidden group-open:block whitespace-pre-wrap">{{ p.raw_text }}</span>
</summary> </summary>
{% if p.media_items %} {% if p.media_items %}
@@ -223,7 +229,7 @@
<div class="text-[10px] text-app-textMuted mt-1">Создан: {{ p.created_at_fmt }}</div> <div class="text-[10px] text-app-textMuted mt-1">Создан: {{ p.created_at_fmt }}</div>
{% endif %} {% endif %}
</td> </td>
<td class="px-4 py-3 text-center"> <td class="px-4 py-3 align-top text-center">
{% if p.qualification_score is not none %} {% if p.qualification_score is not none %}
<div class="font-mono font-bold text-lg {% if p.qualification_score >= 8 %}text-app-success{% elif p.qualification_score >= 5 %}text-app-warning{% else %}text-app-error{% endif %}">{{ p.qualification_score }}</div> <div class="font-mono font-bold text-lg {% if p.qualification_score >= 8 %}text-app-success{% elif p.qualification_score >= 5 %}text-app-warning{% else %}text-app-error{% endif %}">{{ p.qualification_score }}</div>
{% else %} {% else %}