feat: вфыв

This commit is contained in:
2024-07-20 09:32:22 +03:00
parent e7235021f9
commit 6b09251141
27 changed files with 536 additions and 119 deletions

32
services/position.py Normal file
View 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))