Add section field to boss battles for run progression dividers

Adds a nullable `section` column to boss battles (e.g. "Main Story",
"Endgame") with dividers rendered in the run view between sections.
Admin UI gets a Section column in the table and a text input in the form.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-08 14:55:26 +01:00
parent a01d01c565
commit a4f814e66e
9 changed files with 199 additions and 24 deletions

View File

@@ -0,0 +1,26 @@
"""add section to boss battles
Revision ID: f5a6b7c8d9e0
Revises: e4f5a6b7c8d9
Create Date: 2026-02-08 20:00:00.000000
"""
from typing import Sequence, Union
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision: str = 'f5a6b7c8d9e0'
down_revision: Union[str, Sequence[str], None] = 'e4f5a6b7c8d9'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.add_column('boss_battles', sa.Column('section', sa.String(100), nullable=True))
def downgrade() -> None:
op.drop_column('boss_battles', 'section')

View File

@@ -24,6 +24,7 @@ class BossBattle(Base):
ForeignKey("routes.id"), index=True, default=None
)
location: Mapped[str] = mapped_column(String(200))
section: Mapped[str | None] = mapped_column(String(100), default=None)
sprite_url: Mapped[str | None] = mapped_column(String(500))
version_group: Mapped["VersionGroup"] = relationship(

View File

@@ -23,6 +23,7 @@ class BossBattleResponse(CamelModel):
order: int
after_route_id: int | None
location: str
section: str | None
sprite_url: str | None
pokemon: list[BossPokemonResponse] = []
@@ -48,6 +49,7 @@ class BossBattleCreate(CamelModel):
order: int
after_route_id: int | None = None
location: str
section: str | None = None
sprite_url: str | None = None
@@ -60,6 +62,7 @@ class BossBattleUpdate(CamelModel):
order: int | None = None
after_route_id: int | None = None
location: str | None = None
section: str | None = None
sprite_url: str | None = None
@@ -75,6 +78,15 @@ class BossResultCreate(CamelModel):
attempts: int = 1
class BossReorderItem(CamelModel):
id: int
order: int
class BossReorderRequest(CamelModel):
bosses: list[BossReorderItem]
class BossResultUpdate(CamelModel):
result: str | None = None
attempts: int | None = None