Complete repository delegation - remove remaining direct db operations

- Add commit() method to AvailabilityRepository for transaction control
- Add refresh() method to UserRepository
- Update AvailabilityService to use repository.commit() instead of db.commit()
- Update AuthService to use UserRepository.refresh() instead of db.refresh()
- All services now consistently delegate ALL persistence to repositories
This commit is contained in:
counterweight 2025-12-25 18:57:55 +01:00
parent 33aa8ad13b
commit db181b338c
Signed by: counterweight
GPG key ID: 883EDBAA726BD96C
4 changed files with 13 additions and 4 deletions

View file

@ -64,3 +64,7 @@ class AvailabilityRepository:
for availability in availabilities:
self.db.add(availability)
await self.db.flush()
async def commit(self) -> None:
"""Commit the current transaction."""
await self.db.commit()

View file

@ -58,3 +58,7 @@ class UserRepository:
await self.db.commit()
await self.db.refresh(user)
return user
async def refresh(self, user: User) -> None:
"""Refresh a user instance from the database."""
await self.db.refresh(user)

View file

@ -79,9 +79,10 @@ class AuthService:
invite.status = InviteStatus.SPENT
invite.used_by_id = user.id
invite.spent_at = datetime.now(UTC)
await self.invite_repo.update(invite)
await self.db.commit()
await self.db.refresh(user)
# Refresh user to ensure it's up to date
await self.user_repo.refresh(user)
# Create access token
access_token = create_access_token(data={"sub": str(user.id)})

View file

@ -118,7 +118,7 @@ class AvailabilityService:
for slot in slots
]
await self.availability_repo.create_multiple(availabilities)
await self.db.commit()
await self.availability_repo.commit()
return AvailabilityDay(date=target_date, slots=slots)
@ -188,7 +188,7 @@ class AvailabilityService:
)
# Commit all changes atomically
await self.db.commit()
await self.availability_repo.commit()
except Exception:
# Rollback on any error to maintain atomicity
await self.db.rollback()