diff --git a/brewman/alembic/versions/e4ee5746aea5_server_default.py b/brewman/alembic/versions/e4ee5746aea5_server_default.py new file mode 100644 index 00000000..665e87c2 --- /dev/null +++ b/brewman/alembic/versions/e4ee5746aea5_server_default.py @@ -0,0 +1,69 @@ +"""server_default + +Revision ID: e4ee5746aea5 +Revises: 52b98cebf96d +Create Date: 2025-06-27 14:01:10.027282 + +""" + +import sqlalchemy as sa + +from alembic import op + + +# revision identifiers, used by Alembic. +revision = "e4ee5746aea5" +down_revision = "52b98cebf96d" +branch_labels = None +depends_on = None + + +def upgrade(): + # Add server default to products + # Tables to update + tables_to_update = [ + "accounts", + "attendances", + "batches", + "clients", + "closing_stocks", + "cost_centres", + "employee_benefit", + "employees", + "fingerprints", + "images", + "incentives", + "inventories", + "journals", + "login_history", + "mozimo_stock_register", + "periods", + "permissions", + "prices", + "products", + "product_groups", + "product_versions", + "rate_contract_items", + "rate_contracts", + "recipe_items", + "recipe_tags", + "recipe_templates", + "recipes", + "role_permissions", + "roles", + "settings", + "stock_keeping_units", + "tags", + "user_roles", + "users", + "voucher_tags", + "vouchers", + ] + + # Apply gen_random_uuid() as server_default for all + for table in tables_to_update: + op.alter_column(table_name=table, column_name="id", server_default=sa.text("gen_random_uuid()")) + + +def downgrade(): + pass diff --git a/brewman/brewman/models/account_base.py b/brewman/brewman/models/account_base.py index f2d93167..b37b180c 100644 --- a/brewman/brewman/models/account_base.py +++ b/brewman/brewman/models/account_base.py @@ -2,7 +2,7 @@ import uuid from typing import TYPE_CHECKING -from sqlalchemy import Boolean, ForeignKey, Integer, Unicode, Uuid, func, select +from sqlalchemy import Boolean, ForeignKey, Integer, Unicode, Uuid, func, select, text from sqlalchemy.orm import Mapped, Session, mapped_column, relationship from ..db.base_class import reg @@ -21,7 +21,9 @@ if TYPE_CHECKING: class AccountBase: __tablename__ = "accounts" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) code: Mapped[int] = mapped_column(Integer, nullable=False) name: Mapped[str] = mapped_column(Unicode, unique=True, nullable=False) type_id: Mapped[int] = mapped_column("type", Integer, ForeignKey("account_types.id"), nullable=False) diff --git a/brewman/brewman/models/attendance.py b/brewman/brewman/models/attendance.py index 01a93606..5bf4bfd8 100644 --- a/brewman/brewman/models/attendance.py +++ b/brewman/brewman/models/attendance.py @@ -14,6 +14,7 @@ from sqlalchemy import ( Numeric, Uuid, select, + text, ) from sqlalchemy.orm import Mapped, Session, mapped_column, relationship @@ -30,7 +31,9 @@ if TYPE_CHECKING: @reg.mapped_as_dataclass(unsafe_hash=True) class Attendance: __tablename__ = "attendances" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) employee_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("employees.id"), nullable=False) date_: Mapped[date] = mapped_column("date", Date, nullable=False) attendance_type: Mapped[int] = mapped_column(Integer, nullable=False) diff --git a/brewman/brewman/models/batch.py b/brewman/brewman/models/batch.py index da48de23..f0296e2a 100644 --- a/brewman/brewman/models/batch.py +++ b/brewman/brewman/models/batch.py @@ -6,7 +6,7 @@ from datetime import date from decimal import Decimal from typing import TYPE_CHECKING -from sqlalchemy import Date, ForeignKey, Numeric, Uuid +from sqlalchemy import Date, ForeignKey, Numeric, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -21,7 +21,9 @@ if TYPE_CHECKING: class Batch: __tablename__ = "batches" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) name: Mapped[date] = mapped_column(Date, nullable=False) sku_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("stock_keeping_units.id"), nullable=False) quantity_remaining: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) diff --git a/brewman/brewman/models/client.py b/brewman/brewman/models/client.py index 3bc32fb8..05c7d1be 100644 --- a/brewman/brewman/models/client.py +++ b/brewman/brewman/models/client.py @@ -6,7 +6,7 @@ import uuid from datetime import UTC, datetime -from sqlalchemy import Boolean, DateTime, Integer, Unicode, Uuid, desc +from sqlalchemy import Boolean, DateTime, Integer, Unicode, Uuid, desc, text from sqlalchemy.orm import Mapped, Session, mapped_column, relationship from ..db.base_class import reg @@ -17,7 +17,9 @@ from .login_history import LoginHistory class Client: __tablename__ = "clients" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) code: Mapped[int] = mapped_column(Integer, unique=True, nullable=False) name: Mapped[str] = mapped_column(Unicode, unique=True, nullable=False) enabled: Mapped[bool] = mapped_column(Boolean, nullable=False) diff --git a/brewman/brewman/models/closing_stock.py b/brewman/brewman/models/closing_stock.py index 1529fefc..62bfc1cb 100644 --- a/brewman/brewman/models/closing_stock.py +++ b/brewman/brewman/models/closing_stock.py @@ -6,7 +6,7 @@ import uuid from decimal import Decimal from typing import TYPE_CHECKING -from sqlalchemy import Date, ForeignKey, Numeric, UniqueConstraint, Uuid +from sqlalchemy import Date, ForeignKey, Numeric, UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -21,7 +21,9 @@ if TYPE_CHECKING: class ClosingStock: __tablename__ = "closing_stocks" __table_args__ = (UniqueConstraint("date", "cost_centre_id", "sku_id"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) date_: Mapped[datetime.date] = mapped_column("date", Date, nullable=False) cost_centre_id: Mapped[uuid.UUID] = mapped_column( Uuid, diff --git a/brewman/brewman/models/cost_centre.py b/brewman/brewman/models/cost_centre.py index 36bd6bd8..c085d6c2 100644 --- a/brewman/brewman/models/cost_centre.py +++ b/brewman/brewman/models/cost_centre.py @@ -2,7 +2,7 @@ import uuid from typing import TYPE_CHECKING -from sqlalchemy import Boolean, Unicode, Uuid +from sqlalchemy import Boolean, Unicode, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -20,7 +20,9 @@ if TYPE_CHECKING: class CostCentre: __tablename__ = "cost_centres" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) name: Mapped[str] = mapped_column(Unicode, unique=True, nullable=False) is_fixture: Mapped[bool] = mapped_column(Boolean, nullable=False) diff --git a/brewman/brewman/models/db_image.py b/brewman/brewman/models/db_image.py index 1cca50ce..7bfaa848 100644 --- a/brewman/brewman/models/db_image.py +++ b/brewman/brewman/models/db_image.py @@ -2,7 +2,7 @@ import uuid from datetime import UTC, datetime -from sqlalchemy import DateTime, LargeBinary, Unicode, Uuid +from sqlalchemy import DateTime, LargeBinary, Unicode, Uuid, text from sqlalchemy.orm import Mapped, mapped_column from ..db.base_class import reg @@ -12,7 +12,9 @@ from ..db.base_class import reg class DbImage: __tablename__ = "images" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) resource_id: Mapped[uuid.UUID] = mapped_column(Uuid, nullable=False) resource_type: Mapped[str] = mapped_column(Unicode, nullable=False) image: Mapped[bytes] = mapped_column(LargeBinary, nullable=False) diff --git a/brewman/brewman/models/db_setting.py b/brewman/brewman/models/db_setting.py index 606349bf..5a7def76 100644 --- a/brewman/brewman/models/db_setting.py +++ b/brewman/brewman/models/db_setting.py @@ -2,7 +2,7 @@ import uuid from datetime import date -from sqlalchemy import Date, Enum, PickleType, Unicode, Uuid +from sqlalchemy import Date, Enum, PickleType, Unicode, Uuid, text from sqlalchemy.orm import Mapped, mapped_column from ..db.base_class import reg @@ -13,7 +13,9 @@ from .setting_type import SettingType class DbSetting: __tablename__ = "settings" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) name: Mapped[str] = mapped_column(Unicode, unique=True, nullable=False) data: Mapped[dict] = mapped_column(PickleType) # type: ignore[type-arg] setting_type: Mapped[SettingType] = mapped_column(Enum(SettingType), nullable=False) diff --git a/brewman/brewman/models/employee_benefit.py b/brewman/brewman/models/employee_benefit.py index 576db009..a8dfe09b 100644 --- a/brewman/brewman/models/employee_benefit.py +++ b/brewman/brewman/models/employee_benefit.py @@ -2,7 +2,7 @@ import uuid from typing import TYPE_CHECKING -from sqlalchemy import ForeignKey, Integer, Uuid +from sqlalchemy import ForeignKey, Integer, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -15,7 +15,9 @@ if TYPE_CHECKING: @reg.mapped_as_dataclass(unsafe_hash=True) class EmployeeBenefit: __tablename__ = "employee_benefit" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) voucher_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("vouchers.id"), nullable=False) journal_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("journals.id"), nullable=False) gross_salary: Mapped[int] = mapped_column(Integer, nullable=False) diff --git a/brewman/brewman/models/fingerprint.py b/brewman/brewman/models/fingerprint.py index 9184e425..147fa6a5 100644 --- a/brewman/brewman/models/fingerprint.py +++ b/brewman/brewman/models/fingerprint.py @@ -3,7 +3,7 @@ import uuid from datetime import datetime from typing import TYPE_CHECKING -from sqlalchemy import DateTime, ForeignKey, UniqueConstraint, Uuid +from sqlalchemy import DateTime, ForeignKey, UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -18,7 +18,9 @@ class Fingerprint: __tablename__ = "fingerprints" __table_args__ = (UniqueConstraint("date", "employee_id"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) employee_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("employees.id"), nullable=False) date_: Mapped[datetime] = mapped_column("date", DateTime, nullable=False) diff --git a/brewman/brewman/models/incentive.py b/brewman/brewman/models/incentive.py index 4b40965d..94e82fed 100644 --- a/brewman/brewman/models/incentive.py +++ b/brewman/brewman/models/incentive.py @@ -3,7 +3,7 @@ import uuid from decimal import Decimal from typing import TYPE_CHECKING -from sqlalchemy import ForeignKey, Numeric, Uuid +from sqlalchemy import ForeignKey, Numeric, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -16,7 +16,9 @@ if TYPE_CHECKING: @reg.mapped_as_dataclass(unsafe_hash=True) class Incentive: __tablename__ = "incentives" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) voucher_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("vouchers.id"), nullable=False) journal_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("journals.id"), nullable=False) days_worked: Mapped[Decimal] = mapped_column(Numeric(precision=5, scale=1), nullable=False) diff --git a/brewman/brewman/models/inventory.py b/brewman/brewman/models/inventory.py index 0e0ba3fa..1b76e009 100644 --- a/brewman/brewman/models/inventory.py +++ b/brewman/brewman/models/inventory.py @@ -9,6 +9,7 @@ from sqlalchemy import ( Numeric, UniqueConstraint, Uuid, + text, type_coerce, ) from sqlalchemy.ext.hybrid import hybrid_property @@ -26,7 +27,9 @@ if TYPE_CHECKING: class Inventory: __tablename__ = "inventories" __table_args__ = (UniqueConstraint("voucher_id", "batch_id"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) voucher_id: Mapped[uuid.UUID] = mapped_column( Uuid, ForeignKey("vouchers.id"), diff --git a/brewman/brewman/models/journal.py b/brewman/brewman/models/journal.py index e3d078c2..e1b39df8 100644 --- a/brewman/brewman/models/journal.py +++ b/brewman/brewman/models/journal.py @@ -3,7 +3,7 @@ import uuid from decimal import Decimal from typing import TYPE_CHECKING -from sqlalchemy import ColumnElement, ForeignKey, Integer, Numeric, Uuid, type_coerce +from sqlalchemy import ColumnElement, ForeignKey, Integer, Numeric, Uuid, text, type_coerce from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -22,7 +22,9 @@ if TYPE_CHECKING: class Journal: __tablename__ = "journals" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) debit: Mapped[int] = mapped_column(Integer, nullable=False) amount: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) voucher_id: Mapped[uuid.UUID] = mapped_column( diff --git a/brewman/brewman/models/login_history.py b/brewman/brewman/models/login_history.py index f450ecfd..d18495e3 100644 --- a/brewman/brewman/models/login_history.py +++ b/brewman/brewman/models/login_history.py @@ -3,7 +3,7 @@ import uuid from datetime import UTC, datetime from typing import TYPE_CHECKING -from sqlalchemy import DateTime, UniqueConstraint, Uuid +from sqlalchemy import DateTime, UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.schema import ForeignKey @@ -19,7 +19,9 @@ if TYPE_CHECKING: class LoginHistory: __tablename__ = "login_history" __table_args__ = (UniqueConstraint("user_id", "client_id", "date"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) user_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("users.id"), nullable=False) client_id: Mapped[uuid.UUID] = mapped_column( Uuid, diff --git a/brewman/brewman/models/period.py b/brewman/brewman/models/period.py index 92480e06..00f3631e 100644 --- a/brewman/brewman/models/period.py +++ b/brewman/brewman/models/period.py @@ -12,7 +12,9 @@ from ..db.base_class import reg class Period: __tablename__ = "periods" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) valid_from: Mapped[datetime.date] = mapped_column(Date, nullable=False) valid_till: Mapped[datetime.date] = mapped_column(Date, nullable=False) diff --git a/brewman/brewman/models/permission.py b/brewman/brewman/models/permission.py index 06909688..b4e79d76 100644 --- a/brewman/brewman/models/permission.py +++ b/brewman/brewman/models/permission.py @@ -1,6 +1,6 @@ import uuid -from sqlalchemy import Unicode, Uuid +from sqlalchemy import Unicode, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -12,7 +12,9 @@ from .role_permission import RolePermission class Permission: __tablename__ = "permissions" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) name: Mapped[str] = mapped_column(Unicode, unique=True, nullable=False) roles: Mapped[list[Role]] = relationship(secondary=RolePermission.__table__, back_populates="permissions") # type: ignore[attr-defined] diff --git a/brewman/brewman/models/price.py b/brewman/brewman/models/price.py index c6ee6447..2f9a76bf 100644 --- a/brewman/brewman/models/price.py +++ b/brewman/brewman/models/price.py @@ -5,7 +5,7 @@ import uuid from decimal import Decimal from typing import TYPE_CHECKING -from sqlalchemy import ForeignKey, Numeric, UniqueConstraint, Uuid +from sqlalchemy import ForeignKey, Numeric, UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -21,7 +21,9 @@ class Price: __tablename__ = "prices" __table_args__ = (UniqueConstraint("period_id", "product_id"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) period_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("periods.id"), nullable=False) product_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("products.id"), nullable=False) price: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) diff --git a/brewman/brewman/models/product.py b/brewman/brewman/models/product.py index 86c4a8b9..27348e2a 100644 --- a/brewman/brewman/models/product.py +++ b/brewman/brewman/models/product.py @@ -16,7 +16,9 @@ if TYPE_CHECKING: @reg.mapped_as_dataclass(unsafe_hash=True) class Product: __tablename__ = "products" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, server_default=text("gen_random_uuid()")) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) is_fixture: Mapped[bool] = mapped_column(Boolean, nullable=False) versions: Mapped[list["ProductVersion"]] = relationship(back_populates="product") skus: Mapped[list["StockKeepingUnit"]] = relationship("StockKeepingUnit", back_populates="product") diff --git a/brewman/brewman/models/product_group.py b/brewman/brewman/models/product_group.py index 326907d9..116c1771 100644 --- a/brewman/brewman/models/product_group.py +++ b/brewman/brewman/models/product_group.py @@ -2,7 +2,7 @@ import uuid from typing import TYPE_CHECKING -from sqlalchemy import Boolean, Unicode, Uuid +from sqlalchemy import Boolean, Unicode, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -16,7 +16,9 @@ if TYPE_CHECKING: class ProductGroup: __tablename__ = "product_groups" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) name: Mapped[str] = mapped_column(Unicode, unique=True, nullable=False) nutritional: Mapped[bool] = mapped_column(Boolean, nullable=False) ice_cream: Mapped[bool] = mapped_column(Boolean, nullable=False) diff --git a/brewman/brewman/models/product_version.py b/brewman/brewman/models/product_version.py index 162e5449..003251c1 100644 --- a/brewman/brewman/models/product_version.py +++ b/brewman/brewman/models/product_version.py @@ -22,7 +22,9 @@ if TYPE_CHECKING: class ProductVersion: __tablename__ = "product_versions" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) product_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("products.id"), nullable=False) handle: Mapped[str] = mapped_column(Unicode, nullable=False) name: Mapped[str] = mapped_column(Unicode, nullable=False) diff --git a/brewman/brewman/models/rate_contract.py b/brewman/brewman/models/rate_contract.py index 6544a830..7a88ead6 100644 --- a/brewman/brewman/models/rate_contract.py +++ b/brewman/brewman/models/rate_contract.py @@ -3,7 +3,7 @@ import uuid from datetime import UTC, date, datetime from typing import TYPE_CHECKING -from sqlalchemy import Date, DateTime, ForeignKey, Unicode, Uuid +from sqlalchemy import Date, DateTime, ForeignKey, Unicode, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -19,7 +19,9 @@ if TYPE_CHECKING: class RateContract: __tablename__ = "rate_contracts" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) date_: Mapped[date] = mapped_column("date", Date, nullable=False, index=True) vendor_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("accounts.id"), nullable=False) valid_from: Mapped[date | None] = mapped_column(Date(), nullable=True) diff --git a/brewman/brewman/models/rate_contract_item.py b/brewman/brewman/models/rate_contract_item.py index ccd513fc..9d22ba8b 100644 --- a/brewman/brewman/models/rate_contract_item.py +++ b/brewman/brewman/models/rate_contract_item.py @@ -3,7 +3,7 @@ import uuid from decimal import Decimal from typing import TYPE_CHECKING -from sqlalchemy import ForeignKey, Numeric, UniqueConstraint, Uuid +from sqlalchemy import ForeignKey, Numeric, UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -19,7 +19,9 @@ class RateContractItem: __tablename__ = "rate_contract_items" __table_args__ = (UniqueConstraint("rate_contract_id", "sku_id"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) rate_contract_id: Mapped[uuid.UUID] = mapped_column( Uuid, ForeignKey("rate_contracts.id"), diff --git a/brewman/brewman/models/recipe.py b/brewman/brewman/models/recipe.py index 742801ae..397a7312 100644 --- a/brewman/brewman/models/recipe.py +++ b/brewman/brewman/models/recipe.py @@ -6,7 +6,7 @@ from datetime import date from decimal import Decimal from typing import TYPE_CHECKING -from sqlalchemy import Date, ForeignKey, Numeric, Text, UniqueConstraint, Uuid +from sqlalchemy import Date, ForeignKey, Numeric, Text, UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -24,7 +24,9 @@ class Recipe: __tablename__ = "recipes" __table_args__ = (UniqueConstraint("sku_id", "date"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) sku_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("stock_keeping_units.id"), nullable=False) date_: Mapped[date] = mapped_column("date", Date, nullable=False, index=True) source: Mapped[str] = mapped_column(Text, nullable=False) diff --git a/brewman/brewman/models/recipe_item.py b/brewman/brewman/models/recipe_item.py index ea055bef..c05bd5f9 100644 --- a/brewman/brewman/models/recipe_item.py +++ b/brewman/brewman/models/recipe_item.py @@ -5,7 +5,7 @@ import uuid from decimal import Decimal from typing import TYPE_CHECKING -from sqlalchemy import ForeignKey, Numeric, Text, UniqueConstraint, Uuid +from sqlalchemy import ForeignKey, Numeric, Text, UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -21,7 +21,9 @@ class RecipeItem: __tablename__ = "recipe_items" __table_args__ = (UniqueConstraint("recipe_id", "product_id"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) recipe_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("recipes.id"), nullable=False) product_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("products.id"), nullable=False) quantity: Mapped[Decimal] = mapped_column(Numeric(precision=15, scale=2), nullable=False) diff --git a/brewman/brewman/models/recipe_tag.py b/brewman/brewman/models/recipe_tag.py index 79a9230d..152ab4e0 100644 --- a/brewman/brewman/models/recipe_tag.py +++ b/brewman/brewman/models/recipe_tag.py @@ -1,6 +1,6 @@ import uuid -from sqlalchemy import UniqueConstraint, Uuid +from sqlalchemy import UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.schema import ForeignKey @@ -12,6 +12,8 @@ class RecipeTag: __tablename__ = "recipe_tags" __table_args__ = (UniqueConstraint("recipe_id", "tag_id"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) recipe_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("recipes.id")) tag_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("tags.id")) diff --git a/brewman/brewman/models/recipe_template.py b/brewman/brewman/models/recipe_template.py index a05928b1..8b171b2d 100644 --- a/brewman/brewman/models/recipe_template.py +++ b/brewman/brewman/models/recipe_template.py @@ -4,7 +4,7 @@ import uuid from datetime import date -from sqlalchemy import Boolean, Date, Index, Unicode, Uuid +from sqlalchemy import Boolean, Date, Index, Unicode, Uuid, text from sqlalchemy.orm import Mapped, mapped_column from ..db.base_class import reg @@ -14,10 +14,12 @@ from ..db.base_class import reg class RecipeTemplate: __tablename__ = "recipe_templates" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) name: Mapped[str] = mapped_column(Unicode, unique=True, nullable=False) date_: Mapped[date] = mapped_column("date", Date, nullable=False) - text: Mapped[str] = mapped_column(Unicode, nullable=False) + text_: Mapped[str] = mapped_column("text", Unicode, nullable=False) selected: Mapped[bool] = mapped_column(Boolean, nullable=False) __table_args__ = ( @@ -32,7 +34,7 @@ class RecipeTemplate: def __init__(self, name: str, date_: date, text: str, selected: bool, id_: uuid.UUID | None = None) -> None: self.name = name self.date_ = date_ - self.text = text + self.text_ = text self.selected = selected if id_ is not None: self.id = id_ diff --git a/brewman/brewman/models/role.py b/brewman/brewman/models/role.py index b1228f1c..e5673728 100644 --- a/brewman/brewman/models/role.py +++ b/brewman/brewman/models/role.py @@ -2,7 +2,7 @@ import uuid from typing import TYPE_CHECKING -from sqlalchemy import Unicode, Uuid +from sqlalchemy import Unicode, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -17,7 +17,9 @@ if TYPE_CHECKING: class Role: __tablename__ = "roles" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) name: Mapped[str] = mapped_column(Unicode, unique=True) permissions: Mapped[list["Permission"]] = relationship( diff --git a/brewman/brewman/models/role_permission.py b/brewman/brewman/models/role_permission.py index 3def6050..f6df35f7 100644 --- a/brewman/brewman/models/role_permission.py +++ b/brewman/brewman/models/role_permission.py @@ -1,6 +1,6 @@ import uuid -from sqlalchemy import ForeignKey, UniqueConstraint, Uuid +from sqlalchemy import ForeignKey, UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column from ..db.base_class import reg @@ -11,6 +11,8 @@ class RolePermission: __tablename__ = "role_permissions" __table_args__ = (UniqueConstraint("permission_id", "role_id"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) permission_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("permissions.id"), nullable=False) role_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("roles.id"), nullable=False) diff --git a/brewman/brewman/models/sku_version.py b/brewman/brewman/models/sku_version.py index ccc6864a..6e67061c 100644 --- a/brewman/brewman/models/sku_version.py +++ b/brewman/brewman/models/sku_version.py @@ -21,7 +21,9 @@ if TYPE_CHECKING: class SkuVersion: __tablename__ = "sku_versions" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) # product_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("products.id"), nullable=False) # should i remove this? sku_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("stock_keeping_units.id"), nullable=False) units: Mapped[str] = mapped_column(Unicode, nullable=False) diff --git a/brewman/brewman/models/stock_keeping_unit.py b/brewman/brewman/models/stock_keeping_unit.py index 8a46a585..7968efa7 100644 --- a/brewman/brewman/models/stock_keeping_unit.py +++ b/brewman/brewman/models/stock_keeping_unit.py @@ -4,7 +4,7 @@ import uuid from typing import TYPE_CHECKING -from sqlalchemy import ForeignKey, Uuid +from sqlalchemy import ForeignKey, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -21,7 +21,9 @@ if TYPE_CHECKING: class StockKeepingUnit: __tablename__ = "stock_keeping_units" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) product_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("products.id"), unique=True, nullable=False) product: Mapped[Product] = relationship("Product", back_populates="skus") diff --git a/brewman/brewman/models/tag.py b/brewman/brewman/models/tag.py index e6a8d441..ac8df5f9 100644 --- a/brewman/brewman/models/tag.py +++ b/brewman/brewman/models/tag.py @@ -2,7 +2,7 @@ import uuid from typing import TYPE_CHECKING -from sqlalchemy import Unicode, Uuid +from sqlalchemy import Unicode, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -17,7 +17,9 @@ if TYPE_CHECKING: class Tag: __tablename__ = "tags" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) name: Mapped[str] = mapped_column(Unicode, unique=True, nullable=False) recipes: Mapped[list["Recipe"]] = relationship( diff --git a/brewman/brewman/models/user.py b/brewman/brewman/models/user.py index 138ab139..993e6628 100644 --- a/brewman/brewman/models/user.py +++ b/brewman/brewman/models/user.py @@ -5,7 +5,7 @@ import uuid from hashlib import md5 from typing import TYPE_CHECKING -from sqlalchemy import Boolean, Unicode, Uuid, desc, select +from sqlalchemy import Boolean, Unicode, Uuid, desc, select, text from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import Mapped, Session, mapped_column, relationship @@ -27,7 +27,9 @@ def encrypt(val: str) -> str: class User: __tablename__ = "users" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) name: Mapped[str] = mapped_column("username", Unicode, unique=True, nullable=False) _password: Mapped[str] = mapped_column("password", Unicode, nullable=False) locked_out: Mapped[bool] = mapped_column("disabled", Boolean, nullable=False) diff --git a/brewman/brewman/models/user_role.py b/brewman/brewman/models/user_role.py index 3c06b939..0f12a47b 100644 --- a/brewman/brewman/models/user_role.py +++ b/brewman/brewman/models/user_role.py @@ -1,6 +1,6 @@ import uuid -from sqlalchemy import ForeignKey, UniqueConstraint, Uuid +from sqlalchemy import ForeignKey, UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column from ..db.base_class import reg @@ -11,6 +11,8 @@ class UserRole: __tablename__ = "user_roles" __table_args__ = (UniqueConstraint("user_id", "role_id"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) user_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("users.id"), nullable=False) role_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("roles.id"), nullable=False) diff --git a/brewman/brewman/models/voucher.py b/brewman/brewman/models/voucher.py index b6015fdd..ff3551f0 100644 --- a/brewman/brewman/models/voucher.py +++ b/brewman/brewman/models/voucher.py @@ -3,7 +3,7 @@ import uuid from datetime import UTC, date, datetime from typing import TYPE_CHECKING, Optional -from sqlalchemy import Boolean, Date, DateTime, Enum, ForeignKey, Unicode, Uuid +from sqlalchemy import Boolean, Date, DateTime, Enum, ForeignKey, Unicode, Uuid, text from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg @@ -24,7 +24,9 @@ if TYPE_CHECKING: class Voucher: __tablename__ = "vouchers" - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) date_: Mapped[date] = mapped_column("date", Date, nullable=False, index=True) narration: Mapped[str] = mapped_column(Unicode, nullable=False) is_reconciled: Mapped[bool] = mapped_column(Boolean, nullable=False) diff --git a/brewman/brewman/models/voucher_tag.py b/brewman/brewman/models/voucher_tag.py index f4100e2c..c39f7606 100644 --- a/brewman/brewman/models/voucher_tag.py +++ b/brewman/brewman/models/voucher_tag.py @@ -1,6 +1,6 @@ import uuid -from sqlalchemy import UniqueConstraint, Uuid +from sqlalchemy import UniqueConstraint, Uuid, text from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.schema import ForeignKey @@ -12,7 +12,9 @@ class VoucherTag: __tablename__ = "voucher_tags" __table_args__ = (UniqueConstraint("voucher_id", "tag_id"),) - id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True, insert_default=uuid.uuid4) + id: Mapped[uuid.UUID] = mapped_column( + Uuid, primary_key=True, insert_default=uuid.uuid4, server_default=text("gen_random_uuid()") + ) voucher_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("vouchers.id")) tag_id: Mapped[uuid.UUID] = mapped_column(Uuid, ForeignKey("tags.id"))