Migration done
This commit is contained in:
@@ -253,7 +253,8 @@ class ConversionService:
|
||||
# Load all reservations with their hashed customers in one query
|
||||
from sqlalchemy.orm import selectinload
|
||||
query = select(Reservation).options(
|
||||
selectinload(Reservation.customer).selectinload(Customer.hashed_version)
|
||||
selectinload(Reservation.customer).selectinload(Customer.hashed_version),
|
||||
selectinload(Reservation.hashed_customer)
|
||||
)
|
||||
result = await session.execute(query)
|
||||
reservations = result.scalars().all()
|
||||
@@ -265,9 +266,11 @@ class ConversionService:
|
||||
hotel_code = reservation.hotel_code
|
||||
if hotel_code not in self._reservation_cache:
|
||||
self._reservation_cache[hotel_code] = []
|
||||
# Cache the hashed customer instead of raw customer
|
||||
# Cache the hashed customer - prefer direct relationship, fall back to customer relationship
|
||||
hashed_customer = None
|
||||
if reservation.customer and reservation.customer.hashed_version:
|
||||
if reservation.hashed_customer:
|
||||
hashed_customer = reservation.hashed_customer
|
||||
elif reservation.customer and reservation.customer.hashed_version:
|
||||
hashed_customer = reservation.customer.hashed_version
|
||||
self._reservation_cache[hotel_code].append(
|
||||
(reservation, hashed_customer)
|
||||
|
||||
@@ -478,6 +478,7 @@ class Reservation(Base):
|
||||
__tablename__ = "reservations"
|
||||
id = Column(Integer, primary_key=True)
|
||||
customer_id = Column(Integer, ForeignKey("customers.id", ondelete="SET NULL"))
|
||||
hashed_customer_id = Column(Integer, ForeignKey("hashed_customers.id", ondelete="CASCADE"))
|
||||
unique_id = Column(String, unique=True)
|
||||
md5_unique_id = Column(String(32), unique=True) # max length 32 guaranteed
|
||||
start_date = Column(Date)
|
||||
@@ -507,6 +508,7 @@ class Reservation(Base):
|
||||
room_classification_code = Column(String)
|
||||
room_type = Column(String)
|
||||
customer = relationship("Customer", back_populates="reservations")
|
||||
hashed_customer = relationship("HashedCustomer", backref="reservations")
|
||||
|
||||
|
||||
# Table for tracking acknowledged requests by client
|
||||
|
||||
@@ -7,7 +7,7 @@ from typing import Optional
|
||||
from sqlalchemy import and_, select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from .db import AckedRequest, Customer, Reservation
|
||||
from .db import AckedRequest, Customer, HashedCustomer, Reservation
|
||||
from .schemas import ReservationData
|
||||
|
||||
|
||||
@@ -63,6 +63,19 @@ class ReservationService:
|
||||
reservation = self._convert_reservation_data_to_db(
|
||||
reservation_data, customer_id
|
||||
)
|
||||
|
||||
# Automatically populate hashed_customer_id from the customer
|
||||
# Since hashed_customer is always created when a customer is created,
|
||||
# we can get it by querying for the hashed_customer with matching customer_id
|
||||
hashed_customer_result = await self.session.execute(
|
||||
select(HashedCustomer).where(
|
||||
HashedCustomer.customer_id == customer_id
|
||||
)
|
||||
)
|
||||
hashed_customer = hashed_customer_result.scalar_one_or_none()
|
||||
if hashed_customer:
|
||||
reservation.hashed_customer_id = hashed_customer.id
|
||||
|
||||
self.session.add(reservation)
|
||||
|
||||
if auto_commit:
|
||||
|
||||
Reference in New Issue
Block a user