# SPDX-FileCopyrightText: 2026 Dennis Fink # # SPDX-License-Identifier: BSD-3-Clause """Webmention sender Revision ID: 681a2a9a1bc0 Revises: f63641044cc1 Create Date: 2026-08-14 13:40:55.149604 """ import sqlalchemy as sa from alembic import op # revision identifiers, used by Alembic. revision = "681a2a9a1bc0" down_revision = "f63641044cc1" branch_labels = None depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table( "sources", sa.Column("uuid", sa.Uuid(), nullable=False), sa.Column("path", sa.Text(), nullable=False), sa.Column("url", sa.Text(), nullable=False), sa.Column("content_hash", sa.String(length=32), nullable=False), sa.Column("revision", sa.Integer(), nullable=False), sa.Column("last_seen_at", sa.DateTime(timezone=True), nullable=False), sa.Column("revised_at", sa.DateTime(timezone=True), nullable=False), sa.Column("deleted_at", sa.DateTime(timezone=True), nullable=True), sa.PrimaryKeyConstraint("uuid"), sa.UniqueConstraint("path"), sa.UniqueConstraint("url"), ) op.create_table( "sent_webmentions", sa.Column("uuid", sa.Uuid(), nullable=False), sa.Column("source_id", sa.Uuid(), nullable=False), sa.Column("target", sa.Text(), nullable=False), sa.Column("active", sa.Boolean(), nullable=False), sa.Column("desired_revision", sa.Integer(), nullable=False), sa.Column("processed_revision", sa.Integer(), nullable=True), sa.Column("sent_revision", sa.Integer(), nullable=True), sa.Column( "status", sa.Enum( "sent", "unsupported", "failed", name="sent_webmention_status", native_enum=False, ), nullable=True, ), sa.Column("failure_reason", sa.Text(), nullable=True), sa.Column("endpoint", sa.Text(), nullable=True), sa.Column("response_status", sa.Integer(), nullable=True), sa.Column("status_url", sa.Text(), nullable=True), sa.Column("last_attempted_at", sa.DateTime(timezone=True), nullable=True), sa.Column("last_sent_at", sa.DateTime(timezone=True), nullable=True), sa.ForeignKeyConstraint(["source_id"], ["sources.uuid"], ondelete="CASCADE"), sa.PrimaryKeyConstraint("uuid"), sa.UniqueConstraint( "source_id", "target", name="uq_sent_webmention_source_target" ), ) with op.batch_alter_table("sent_webmentions", schema=None) as batch_op: batch_op.create_index( batch_op.f("ix_sent_webmentions_source_id"), ["source_id"], unique=False ) # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table("sent_webmentions", schema=None) as batch_op: batch_op.drop_index(batch_op.f("ix_sent_webmentions_source_id")) op.drop_table("sent_webmentions") op.drop_table("sources") # ### end Alembic commands ###