Adds category selector column
This column indicates where has the category came from.
This commit is contained in:
parent
9d33df78a8
commit
d409038072
54
alembic/versions/6863dda76ea2_category_selector.py
Normal file
54
alembic/versions/6863dda76ea2_category_selector.py
Normal file
@ -0,0 +1,54 @@
|
||||
"""Category selector
|
||||
|
||||
Revision ID: 6863dda76ea2
|
||||
Revises: 83f4c9837f6e
|
||||
Create Date: 2022-12-08 00:56:59.032641+00:00
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "6863dda76ea2"
|
||||
down_revision = "83f4c9837f6e"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.create_table(
|
||||
"categories_selector",
|
||||
sa.Column("id", sa.BigInteger(), nullable=False),
|
||||
sa.Column(
|
||||
"selector",
|
||||
sa.Enum(
|
||||
"unknown",
|
||||
"nullifier",
|
||||
"vacations",
|
||||
"rules",
|
||||
"algorithm",
|
||||
"manual",
|
||||
name="selector",
|
||||
schema="transactions",
|
||||
inherit_schema=True,
|
||||
),
|
||||
nullable=False,
|
||||
),
|
||||
sa.ForeignKeyConstraint(
|
||||
["id"],
|
||||
["transactions.categorized.id"],
|
||||
name=op.f("fk_categories_selector_id_categorized"),
|
||||
ondelete="CASCADE",
|
||||
),
|
||||
sa.PrimaryKeyConstraint("id", name=op.f("pk_categories_selector")),
|
||||
schema="transactions",
|
||||
)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_table("categories_selector", schema="transactions")
|
||||
# ### end Alembic commands ###
|
||||
@ -121,11 +121,18 @@ class TransactionCategory(Base):
|
||||
name: Mapped[str] = mapped_column(ForeignKey(Category.name))
|
||||
|
||||
original: Mapped[Transaction] = relationship(back_populates="category")
|
||||
selector: Mapped[CategorySelector] = relationship(back_populates="category")
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Category({self.name})"
|
||||
|
||||
|
||||
catfk = Annotated[
|
||||
int,
|
||||
mapped_column(BigInteger, ForeignKey(TransactionCategory.id, ondelete="CASCADE")),
|
||||
]
|
||||
|
||||
|
||||
class Note(Base):
|
||||
__tablename__ = "notes"
|
||||
|
||||
@ -165,3 +172,27 @@ class CategoryRule(Base):
|
||||
ForeignKey(Category.name, ondelete="CASCADE"), primary_key=True
|
||||
)
|
||||
rule: Mapped[str] = mapped_column(primary_key=True)
|
||||
|
||||
|
||||
class Selector(enum.Enum):
|
||||
unknown = enum.auto()
|
||||
nullifier = enum.auto()
|
||||
vacations = enum.auto()
|
||||
rules = enum.auto()
|
||||
algorithm = enum.auto()
|
||||
manual = enum.auto()
|
||||
|
||||
|
||||
categoryselector = Annotated[
|
||||
Selector,
|
||||
mapped_column(Enum(Selector, inherit_schema=True), default=Selector.unknown),
|
||||
]
|
||||
|
||||
|
||||
class CategorySelector(Base):
|
||||
__tablename__ = "categories_selector"
|
||||
|
||||
id: Mapped[catfk] = mapped_column(primary_key=True)
|
||||
selector: Mapped[categoryselector]
|
||||
|
||||
category: Mapped[TransactionCategory] = relationship(back_populates="selector")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user