From 33aa8ad13b2b364d603e2f82c241ceff084a842f Mon Sep 17 00:00:00 2001 From: counterweight Date: Thu, 25 Dec 2025 18:54:29 +0100 Subject: [PATCH] Delegate exchange persistence to ExchangeRepository - Add create() and update() methods to ExchangeRepository - Update ExchangeService to use repository methods instead of direct db operations - All persistence operations now go through repositories consistently - Fix indentation errors in ExchangeService --- backend/repositories/exchange.py | 29 +++++++++++++++++++++++++++++ backend/services/exchange.py | 22 ++++------------------ 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/backend/repositories/exchange.py b/backend/repositories/exchange.py index eb28494..81160c9 100644 --- a/backend/repositories/exchange.py +++ b/backend/repositories/exchange.py @@ -161,3 +161,32 @@ class ExchangeRepository: ) ) return {row[0] for row in result.all()} + + async def create(self, exchange: Exchange) -> Exchange: + """ + Create a new exchange record. + + Args: + exchange: Exchange instance to persist + + Returns: + Created Exchange record (committed and refreshed) + """ + self.db.add(exchange) + await self.db.commit() + await self.db.refresh(exchange) + return exchange + + async def update(self, exchange: Exchange) -> Exchange: + """ + Update an existing exchange record. + + Args: + exchange: Exchange instance to update + + Returns: + Updated Exchange record (committed and refreshed) + """ + await self.db.commit() + await self.db.refresh(exchange) + return exchange diff --git a/backend/services/exchange.py b/backend/services/exchange.py index 2491726..05feaa9 100644 --- a/backend/services/exchange.py +++ b/backend/services/exchange.py @@ -267,11 +267,8 @@ class ExchangeService: status=ExchangeStatus.BOOKED, ) - self.db.add(exchange) - try: - await self.db.commit() - await self.db.refresh(exchange) + return await self.exchange_repo.create(exchange) except IntegrityError as e: await self.db.rollback() # This should rarely happen now since we check explicitly above, @@ -280,8 +277,6 @@ class ExchangeService: "Database constraint violation. Please try again." ) from e - return exchange - async def get_exchange_by_public_id( self, public_id: uuid.UUID, user: User | None = None ) -> Exchange: @@ -331,10 +326,7 @@ class ExchangeService: ) exchange.cancelled_at = datetime.now(UTC) - await self.db.commit() - await self.db.refresh(exchange) - - return exchange + return await self.exchange_repo.update(exchange) async def complete_exchange(self, exchange: Exchange) -> Exchange: """ @@ -354,10 +346,7 @@ class ExchangeService: exchange.status = ExchangeStatus.COMPLETED exchange.completed_at = datetime.now(UTC) - await self.db.commit() - await self.db.refresh(exchange) - - return exchange + return await self.exchange_repo.update(exchange) async def mark_no_show(self, exchange: Exchange) -> Exchange: """ @@ -379,10 +368,7 @@ class ExchangeService: exchange.status = ExchangeStatus.NO_SHOW exchange.completed_at = datetime.now(UTC) - await self.db.commit() - await self.db.refresh(exchange) - - return exchange + return await self.exchange_repo.update(exchange) def _expand_availability_to_slots( self, avail: Availability, slot_date: date, booked_starts: set[datetime]