Delegate availability persistence to AvailabilityRepository

- Add create() and create_multiple() methods to AvailabilityRepository
- Update AvailabilityService to use repository methods instead of direct db operations
This commit is contained in:
counterweight 2025-12-25 18:51:55 +01:00
parent 4cb561d54f
commit 17aead2e21
Signed by: counterweight
GPG key ID: 883EDBAA726BD96C
2 changed files with 41 additions and 12 deletions

View file

@ -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()

View file

@ -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)