From 17aead2e210e3cc0730e9535952c4dbc86ff7bb5 Mon Sep 17 00:00:00 2001 From: counterweight Date: Thu, 25 Dec 2025 18:51:55 +0100 Subject: [PATCH] Delegate availability persistence to AvailabilityRepository - Add create() and create_multiple() methods to AvailabilityRepository - Update AvailabilityService to use repository methods instead of direct db operations --- backend/repositories/availability.py | 25 +++++++++++++++++++++++++ backend/services/availability.py | 28 ++++++++++++++++------------ 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/backend/repositories/availability.py b/backend/repositories/availability.py index 8718cce..e1200ca 100644 --- a/backend/repositories/availability.py +++ b/backend/repositories/availability.py @@ -39,3 +39,28 @@ class AvailabilityRepository: await self.db.execute( delete(Availability).where(Availability.date == target_date) ) + + async def create(self, availability: Availability) -> Availability: + """ + Create a new availability record. + + Args: + availability: Availability instance to persist + + Returns: + Created Availability record (flushed to get ID) + """ + self.db.add(availability) + await self.db.flush() + return availability + + async def create_multiple(self, availabilities: list[Availability]) -> None: + """ + Create multiple availability records in a single transaction. + + Args: + availabilities: List of Availability instances to persist + """ + for availability in availabilities: + self.db.add(availability) + await self.db.flush() diff --git a/backend/services/availability.py b/backend/services/availability.py index c5dd876..b0e68d0 100644 --- a/backend/services/availability.py +++ b/backend/services/availability.py @@ -109,14 +109,15 @@ class AvailabilityService: await self.availability_repo.delete_by_date(target_date) # Create new availability slots - for slot in slots: - availability = Availability( + availabilities = [ + Availability( date=target_date, start_time=slot.start_time, end_time=slot.end_time, ) - self.db.add(availability) - + for slot in slots + ] + await self.availability_repo.create_multiple(availabilities) await self.db.commit() return AvailabilityDay(date=target_date, slots=slots) @@ -165,19 +166,22 @@ class AvailabilityService: # Copy slots target_slots: list[TimeSlot] = [] - for source_slot in source_slots: - new_availability = Availability( + new_availabilities = [ + Availability( date=target_date, start_time=source_slot.start_time, end_time=source_slot.end_time, ) - self.db.add(new_availability) - target_slots.append( - TimeSlot( - start_time=source_slot.start_time, - end_time=source_slot.end_time, - ) + for source_slot in source_slots + ] + await self.availability_repo.create_multiple(new_availabilities) + target_slots = [ + TimeSlot( + start_time=slot.start_time, + end_time=slot.end_time, ) + for slot in source_slots + ] copied_days.append( AvailabilityDay(date=target_date, slots=target_slots)