Refactor models to improve consistency and relationships

Updated `Base` import to use centralized `app.core.database.Base` for consistency. Enhanced `TimestampMixin` and `UUIDMixin` with docstrings for clarity. Fixed metadata reference in `guest_gifts` table and added relationships in `email_template`.
This commit is contained in:
2025-02-28 09:21:02 +01:00
parent a924e0d5b2
commit 632330b4ac
4 changed files with 15 additions and 9 deletions

View File

@@ -2,7 +2,9 @@
Models package initialization.
Imports all models to ensure they're registered with SQLAlchemy.
"""
from .base import Base, TimestampMixin, UUIDMixin
# First import Base to avoid circular imports
from app.core.database import Base
from .base import TimestampMixin, UUIDMixin
# Import user model
from .user import User

View File

@@ -1,18 +1,20 @@
# backend/models/base.py
from datetime import datetime, timezone
import uuid
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, DateTime, Boolean
from datetime import datetime, timezone
from sqlalchemy import Column, DateTime
from sqlalchemy.dialects.postgresql import UUID
Base = declarative_base()
# noinspection PyUnresolvedReferences
from app.core.database import Base
class TimestampMixin:
"""Mixin to add created_at and updated_at timestamps to models"""
created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), nullable=False)
updated_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc),
onupdate=lambda: datetime.now(timezone.utc), nullable=False)
class UUIDMixin:
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
"""Mixin to add UUID primary keys to models"""
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)

View File

@@ -1,6 +1,8 @@
from enum import Enum
from sqlalchemy import Column, String, Boolean, Enum as SQLEnum, Text, UniqueConstraint
from sqlalchemy import Column, String, Boolean, Enum as SQLEnum, Text, UniqueConstraint, ForeignKey
from sqlalchemy.dialects.postgresql import UUID, JSONB
from sqlalchemy.orm import relationship
from .base import Base, TimestampMixin, UUIDMixin

View File

@@ -84,7 +84,7 @@ class Guest(Base, UUIDMixin, TimestampMixin):
# Association table for guest gifts (many-to-many relationship)
guest_gifts = Table(
'guest_gifts',
Base.notification_metadata,
Base.metadata,
Column('guest_id', UUID(as_uuid=True), ForeignKey('guests.id'), primary_key=True),
Column('gift_id', UUID(as_uuid=True), ForeignKey('gift_items.id'), primary_key=True),
Column('reserved_at', DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)),