feat: вфыв
This commit is contained in:
32
services/position.py
Normal file
32
services/position.py
Normal file
@@ -0,0 +1,32 @@
|
||||
from typing import Union
|
||||
|
||||
from sqlalchemy import select, insert
|
||||
|
||||
from models import Position
|
||||
from schemas.position import *
|
||||
from services.base import BaseService
|
||||
|
||||
|
||||
class PositionService(BaseService):
|
||||
async def get_all(self) -> GetAllPositionsResponse:
|
||||
stmt = select(Position).order_by(Position.key)
|
||||
positions = (await self.session.scalars(stmt)).all()
|
||||
positions_schemas = [PositionSchema.model_validate(position) for position in positions]
|
||||
response = GetAllPositionsResponse(positions=positions_schemas)
|
||||
return response
|
||||
|
||||
async def get_by_key(self, key: str) -> Union[Position, None]:
|
||||
stmt = select(Position).where(Position.key == key)
|
||||
return await self.session.scalar(stmt)
|
||||
|
||||
|
||||
async def create(self, request: CreatePositionRequest) -> CreatePositionResponse:
|
||||
try:
|
||||
if await self.get_by_key(request.data.key):
|
||||
return CreatePositionResponse(ok=False, message='Должность с таким ключом уже существует')
|
||||
stmt = insert(Position).values(request.data.model_dump())
|
||||
await self.session.execute(stmt)
|
||||
await self.session.commit()
|
||||
return CreatePositionResponse(ok=True, message='Должность успешно создана')
|
||||
except Exception as e:
|
||||
return CreatePositionResponse(ok=False, message=str(e))
|
||||
Reference in New Issue
Block a user