This commit is contained in:
2026-02-27 22:44:02 +03:00
parent 55c3629868
commit c57a40b09a
14 changed files with 331 additions and 69 deletions
@@ -20,10 +20,10 @@ class HoursTransactionsDAO:
)
return list(result.scalars().all())
async def get_by_user_id(self, user_id: int) -> list[HoursTransaction]:
async def get_by_resident_id(self, resident_id: int) -> list[HoursTransaction]:
result = await self.session.execute(
select(HoursTransaction)
.where(HoursTransaction.user_id == user_id)
.where(HoursTransaction.resident_id == resident_id)
.order_by(HoursTransaction.created_at.desc())
)
return list(result.scalars().all())
@@ -0,0 +1,56 @@
from sqlalchemy import select, update, delete
from sqlalchemy.ext.asyncio import AsyncSession
from dutylog.infrastructure.database.models.resident import Resident
class ResidentsDAO:
def __init__(self, session: AsyncSession):
self.session = session
async def get_by_id(self, resident_id: int) -> Resident | None:
result = await self.session.execute(
select(Resident).where(Resident.id == resident_id)
)
return result.scalar_one_or_none()
async def get_by_user_id(self, user_id: int) -> Resident | None:
result = await self.session.execute(
select(Resident).where(Resident.user_entity == user_id)
)
return result.scalar_one_or_none()
async def get_by_room(self, room_id: int) -> list[Resident]:
result = await self.session.execute(
select(Resident).where(Resident.room == room_id)
)
return list(result.scalars().all())
async def get_available(self) -> list[Resident]:
result = await self.session.execute(
select(Resident).where(Resident.is_busy == False)
)
return list(result.scalars().all())
async def get_all(self) -> list[Resident]:
result = await self.session.execute(select(Resident))
return list(result.scalars().all())
async def create(self, resident: Resident) -> Resident:
self.session.add(resident)
await self.session.commit()
await self.session.refresh(resident)
return resident
async def update(self, resident_id: int, **kwargs) -> Resident | None:
await self.session.execute(
update(Resident).where(Resident.id == resident_id).values(**kwargs)
)
await self.session.commit()
return await self.get_by_id(resident_id)
async def delete(self, resident_id: int) -> None:
await self.session.execute(
delete(Resident).where(Resident.id == resident_id)
)
await self.session.commit()
@@ -0,0 +1,44 @@
from sqlalchemy import select, update, delete
from sqlalchemy.ext.asyncio import AsyncSession
from dutylog.infrastructure.database.models.room import Room
class RoomsDAO:
def __init__(self, session: AsyncSession):
self.session = session
async def get_by_id(self, room_id: int) -> Room | None:
result = await self.session.execute(
select(Room).where(Room.id == room_id)
)
return result.scalar_one_or_none()
async def get_by_number(self, number: int) -> Room | None:
result = await self.session.execute(
select(Room).where(Room.number == number)
)
return result.scalar_one_or_none()
async def get_all(self) -> list[Room]:
result = await self.session.execute(select(Room))
return list(result.scalars().all())
async def create(self, room: Room) -> Room:
self.session.add(room)
await self.session.commit()
await self.session.refresh(room)
return room
async def update(self, room_id: int, **kwargs) -> Room | None:
await self.session.execute(
update(Room).where(Room.id == room_id).values(**kwargs)
)
await self.session.commit()
return await self.get_by_id(room_id)
async def delete(self, room_id: int) -> None:
await self.session.execute(
delete(Room).where(Room.id == room_id)
)
await self.session.commit()