56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from sqlalchemy import select
|
|
from sqlalchemy.orm import selectinload
|
|
|
|
from models import Board
|
|
from repositories.base import BaseRepository
|
|
from schemas.board import UpdateBoardSchema, CreateBoardSchema
|
|
|
|
|
|
class BoardRepository(BaseRepository):
|
|
async def get_all(self, project_id: int) -> list[Board]:
|
|
stmt = select(Board).where(
|
|
Board.is_deleted.is_(False), Board.project_id == project_id
|
|
)
|
|
result = await self.session.execute(stmt)
|
|
return list(result.scalars().all())
|
|
|
|
async def get_by_id(self, board_id: int) -> Optional[Board]:
|
|
stmt = (
|
|
select(Board)
|
|
.where(Board.id == board_id, Board.is_deleted.is_(False))
|
|
.options(selectinload(Board.deals))
|
|
)
|
|
result = await self.session.execute(stmt)
|
|
return result.scalar_one_or_none()
|
|
|
|
async def create(self, data: CreateBoardSchema) -> Board:
|
|
board_data = data.model_dump()
|
|
board_data["created_at"] = datetime.now()
|
|
board = Board(**board_data)
|
|
self.session.add(board)
|
|
await self.session.commit()
|
|
await self.session.refresh(board)
|
|
return board
|
|
|
|
async def update(self, board: Board, data: UpdateBoardSchema) -> Board:
|
|
board.lexorank = data.lexorank if data.lexorank else board.lexorank
|
|
board.name = data.name if data.name else board.name
|
|
|
|
self.session.add(board)
|
|
await self.session.commit()
|
|
await self.session.refresh(board)
|
|
return board
|
|
|
|
async def delete(self, board: Board, is_soft: bool):
|
|
if not is_soft:
|
|
await self.session.delete(board)
|
|
await self.session.commit()
|
|
return
|
|
|
|
board.is_deleted = True
|
|
self.session.add(board)
|
|
await self.session.commit()
|