Skip to content

Commit a22a285

Browse files
authored
feat: add sort_order to mixin columns for consistent table layout (#581)
Add sort_order to mixin columns for consistent table layout - Add sort_order=-100 to primary key columns (id) across all mixins - Add sort_order=3001 to sentinel column - Add sort_order=3002 to created_at audit column - Add sort_order=3003 to updated_at audit column This ensures consistent column ordering in generated tables: primary keys first, user columns in middle, audit/sentinel columns last.
1 parent e8ca206 commit a22a285

5 files changed

Lines changed: 9 additions & 4 deletions

File tree

advanced_alchemy/mixins/audit.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ class AuditColumns:
1212
created_at: Mapped[datetime.datetime] = mapped_column(
1313
DateTimeUTC(timezone=True),
1414
default=lambda: datetime.datetime.now(datetime.timezone.utc),
15+
sort_order=3002,
1516
)
1617
"""Date/time of instance creation."""
1718
updated_at: Mapped[datetime.datetime] = mapped_column(
1819
DateTimeUTC(timezone=True),
1920
default=lambda: datetime.datetime.now(datetime.timezone.utc),
2021
onupdate=lambda: datetime.datetime.now(datetime.timezone.utc),
22+
sort_order=3003,
2123
)
2224
"""Date/time of instance last update."""
2325

advanced_alchemy/mixins/bigint.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def id(cls) -> Mapped[int]:
3535
BigIntIdentity,
3636
Sequence(f"{cls.__tablename__}_id_seq", **seq_kwargs), # type: ignore[attr-defined]
3737
primary_key=True,
38+
sort_order=-100,
3839
)
3940

4041

@@ -53,4 +54,5 @@ def id(cls) -> Mapped[int]:
5354
BigIntIdentity,
5455
Identity(start=1, increment=1),
5556
primary_key=True,
57+
sort_order=-100,
5658
)

advanced_alchemy/mixins/nanoid.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@ def __init_subclass__(cls, **kwargs: Any) -> None:
2525
if not NANOID_INSTALLED and not cls.__module__.startswith("advanced_alchemy"): # pragma: no cover
2626
logger.warning("`fastnanoid` not installed, falling back to `uuid4` for NanoID generation.")
2727

28-
id: Mapped[str] = mapped_column(default=nanoid, primary_key=True)
28+
id: Mapped[str] = mapped_column(default=nanoid, primary_key=True, sort_order=-100)
2929
"""Nano ID Primary key column."""

advanced_alchemy/mixins/sentinel.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,6 @@ def _sentinel(cls) -> Mapped[int]:
3030
insert_sentinel=True,
3131
use_existing_column=True,
3232
nullable=True,
33+
sort_order=3001,
3334
**cls._sentinel_kwargs,
3435
)

advanced_alchemy/mixins/uuid.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
class UUIDPrimaryKey(SentinelMixin):
2727
"""UUID Primary Key Field Mixin."""
2828

29-
id: Mapped[UUID] = mapped_column(default=uuid4, primary_key=True)
29+
id: Mapped[UUID] = mapped_column(default=uuid4, primary_key=True, sort_order=-100)
3030
"""UUID Primary key column."""
3131

3232

@@ -39,7 +39,7 @@ def __init_subclass__(cls, **kwargs: Any) -> None:
3939
if not UUID_UTILS_INSTALLED and not cls.__module__.startswith("advanced_alchemy"): # pragma: no cover
4040
logger.warning("`uuid-utils` not installed, falling back to `uuid4` for UUID v6 generation.")
4141

42-
id: Mapped[UUID] = mapped_column(default=uuid6, primary_key=True)
42+
id: Mapped[UUID] = mapped_column(default=uuid6, primary_key=True, sort_order=-100)
4343
"""UUID Primary key column."""
4444

4545

@@ -52,5 +52,5 @@ def __init_subclass__(cls, **kwargs: Any) -> None:
5252
if not UUID_UTILS_INSTALLED and not cls.__module__.startswith("advanced_alchemy"): # pragma: no cover
5353
logger.warning("`uuid-utils` not installed, falling back to `uuid4` for UUID v7 generation.")
5454

55-
id: Mapped[UUID] = mapped_column(default=uuid7, primary_key=True)
55+
id: Mapped[UUID] = mapped_column(default=uuid7, primary_key=True, sort_order=-100)
5656
"""UUID Primary key column."""

0 commit comments

Comments
 (0)