Files
Crm-Backend/repositories/board.py

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