7bb765b6ed
Add-from-post no longer appends straight into the run — it STAGES the post's
pages as pending (per-page status; page_number NULL), grouped by source post,
so the operator drops junk (text-free alts, bumpers) and places the keepers
into the sequence with clean series-global numbering.
- migration 0048: series_page.status ('placed' default | 'pending') + nullable
page_number.
- series_service: placed/pending split everywhere (list_pages returns the
placed run + a `pending` section grouped by source post; reorder/cover/
list_series operate on placed only); add_post stages pending; new
place_pending(image_ids, before_image_id=None) flips pending→placed spliced
before a page (or appended) and renumbers; junk removal reuses remove_images.
- api/tags: /add-post now returns staged count; new POST /series/<id>/pending/
place.
- frontend: PostSeriesMenu navigates to the series after staging; seriesManage
store surfaces `pending` + placePending; SeriesManageView gains a pending
tray (per-post groups, place-all / place-one / drop-junk).
- tests: pending staging, place (append + insert-before), ignore-already-
placed, drop-junk, route guard; updated add_post + match-accept expectations.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""series_page pending staging: status + nullable page_number (#789 Phase 2)
|
|
|
|
Pages added from a post no longer append straight into the run — they land
|
|
'pending' with a NULL page_number, staged grouped by their source post so the
|
|
operator can drop junk (text-free alts, bumpers) and place the keepers into the
|
|
sequence. A page only gets a series-global page_number once it's 'placed'.
|
|
|
|
Revision ID: 0048
|
|
Revises: 0047
|
|
Create Date: 2026-06-11
|
|
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
|
|
revision: str = "0048"
|
|
down_revision: Union[str, None] = "0047"
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.add_column(
|
|
"series_page",
|
|
sa.Column(
|
|
"status", sa.String(length=16), nullable=False,
|
|
server_default="placed",
|
|
),
|
|
)
|
|
op.alter_column(
|
|
"series_page", "page_number",
|
|
existing_type=sa.Integer(), nullable=True,
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
# Lossy: pending pages are unsorted staging rows with no order — drop them.
|
|
op.execute("DELETE FROM series_page WHERE status = 'pending'")
|
|
op.alter_column(
|
|
"series_page", "page_number",
|
|
existing_type=sa.Integer(), nullable=False,
|
|
)
|
|
op.drop_column("series_page", "status")
|