Add quantity column to GuestGifts table and update references
Introduced a `quantity` field to track the number of reserved gifts in the many-to-many GuestGifts table. Updated all related CRUD operations, models, and imports to reflect the added column. Replaced `guest_gifts` with `GuestGifts` for consistency in naming conventions.
This commit is contained in:
@@ -317,6 +317,7 @@ def upgrade() -> None:
|
|||||||
sa.Column('gift_id', sa.UUID(), nullable=False),
|
sa.Column('gift_id', sa.UUID(), nullable=False),
|
||||||
sa.Column('reserved_at', sa.DateTime(timezone=True), nullable=True),
|
sa.Column('reserved_at', sa.DateTime(timezone=True), nullable=True),
|
||||||
sa.Column('notes', sa.String(), nullable=True),
|
sa.Column('notes', sa.String(), nullable=True),
|
||||||
|
sa.Column('quantity', sa.Integer(), nullable=False, server_default='1'),
|
||||||
sa.ForeignKeyConstraint(['gift_id'], ['gift_items.id'], ondelete="CASCADE"),
|
sa.ForeignKeyConstraint(['gift_id'], ['gift_items.id'], ondelete="CASCADE"),
|
||||||
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ondelete="CASCADE"),
|
sa.ForeignKeyConstraint(['guest_id'], ['guests.id'], ondelete="CASCADE"),
|
||||||
sa.PrimaryKeyConstraint('guest_id', 'gift_id')
|
sa.PrimaryKeyConstraint('guest_id', 'gift_id')
|
||||||
|
|||||||
@@ -94,13 +94,14 @@ class CRUDGiftItem(CRUDBase[GiftItem, GiftItemCreate, GiftItemUpdate]):
|
|||||||
gift: GiftItem = self.get(db, gift_id)
|
gift: GiftItem = self.get(db, gift_id)
|
||||||
if gift and gift.quantity_received < gift.quantity_requested:
|
if gift and gift.quantity_received < gift.quantity_requested:
|
||||||
# Add to the association table using the SQLAlchemy Core Table directly
|
# Add to the association table using the SQLAlchemy Core Table directly
|
||||||
from app.models.guest import guest_gifts
|
from app.models.guest import GuestGifts
|
||||||
|
|
||||||
stmt = guest_gifts.insert().values(
|
stmt = GuestGifts.insert().values(
|
||||||
gift_id=gift_id,
|
gift_id=gift_id,
|
||||||
guest_id=guest_id,
|
guest_id=guest_id,
|
||||||
reserved_at=datetime.now(timezone.utc),
|
reserved_at=datetime.now(timezone.utc),
|
||||||
notes=notes
|
notes=notes,
|
||||||
|
quantity=quantity
|
||||||
)
|
)
|
||||||
db.execute(stmt)
|
db.execute(stmt)
|
||||||
|
|
||||||
@@ -336,12 +337,12 @@ class CRUDGiftPurchase(CRUDBase[GiftPurchase, GiftPurchaseCreate, GiftPurchaseUp
|
|||||||
for gift in guest.gifts:
|
for gift in guest.gifts:
|
||||||
# Access the association data through the relationship metadata
|
# Access the association data through the relationship metadata
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from app.models.guest import guest_gifts
|
from app.models.guest import GuestGifts
|
||||||
|
|
||||||
# Get the reservation data
|
# Get the reservation data
|
||||||
stmt = select(guest_gifts).where(
|
stmt = select(GuestGifts).where(
|
||||||
(guest_gifts.c.guest_id == guest_id) &
|
(GuestGifts.c.guest_id == guest_id) &
|
||||||
(guest_gifts.c.gift_id == gift.id)
|
(GuestGifts.c.gift_id == gift.id)
|
||||||
)
|
)
|
||||||
reservation = db.execute(stmt).first()
|
reservation = db.execute(stmt).first()
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from .event_theme import EventTheme
|
|||||||
from .event_media import EventMedia, MediaType, MediaPurpose
|
from .event_media import EventMedia, MediaType, MediaPurpose
|
||||||
|
|
||||||
# Import guest and RSVP models
|
# Import guest and RSVP models
|
||||||
from .guest import Guest, GuestStatus, guest_gifts
|
from .guest import Guest, GuestStatus, GuestGifts
|
||||||
from .rsvp import RSVP, RSVPStatus
|
from .rsvp import RSVP, RSVPStatus
|
||||||
|
|
||||||
# Import gift-related models
|
# Import gift-related models
|
||||||
|
|||||||
@@ -82,11 +82,12 @@ class Guest(Base, UUIDMixin, TimestampMixin):
|
|||||||
|
|
||||||
|
|
||||||
# Association table for guest gifts (many-to-many relationship)
|
# Association table for guest gifts (many-to-many relationship)
|
||||||
guest_gifts = Table(
|
GuestGifts = Table(
|
||||||
'guest_gifts',
|
'guest_gifts',
|
||||||
Base.metadata,
|
Base.metadata,
|
||||||
Column('guest_id', UUID(as_uuid=True), ForeignKey('guests.id'), primary_key=True),
|
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('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)),
|
Column('reserved_at', DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)),
|
||||||
Column('notes', String),
|
Column('notes', String),
|
||||||
|
Column('quantity', Integer, default=1),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user