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))
|
name: Mapped[str] = mapped_column(ForeignKey(Category.name))
|
||||||
|
|
||||||
original: Mapped[Transaction] = relationship(back_populates="category")
|
original: Mapped[Transaction] = relationship(back_populates="category")
|
||||||
|
selector: Mapped[CategorySelector] = relationship(back_populates="category")
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"Category({self.name})"
|
return f"Category({self.name})"
|
||||||
|
|
||||||
|
|
||||||
|
catfk = Annotated[
|
||||||
|
int,
|
||||||
|
mapped_column(BigInteger, ForeignKey(TransactionCategory.id, ondelete="CASCADE")),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class Note(Base):
|
class Note(Base):
|
||||||
__tablename__ = "notes"
|
__tablename__ = "notes"
|
||||||
|
|
||||||
@ -165,3 +172,27 @@ class CategoryRule(Base):
|
|||||||
ForeignKey(Category.name, ondelete="CASCADE"), primary_key=True
|
ForeignKey(Category.name, ondelete="CASCADE"), primary_key=True
|
||||||
)
|
)
|
||||||
rule: Mapped[str] = mapped_column(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