feat: deal attributes with select and options
This commit is contained in:
@ -1,7 +1,8 @@
|
||||
from .attr_select import AttrSelectService as AttrSelectService
|
||||
from .attribute import AttributeService as AttributeService
|
||||
from .board import BoardService as BoardService
|
||||
from .deal import DealService as DealService
|
||||
from .project import ProjectService as ProjectService
|
||||
from .status import StatusService as StatusService
|
||||
from .deal_group import DealGroupService as DealGroupService
|
||||
from .deal_tag import DealTagService as DealTagService
|
||||
from .attribute import AttributeService as AttributeService
|
||||
from .project import ProjectService as ProjectService
|
||||
from .status import StatusService as StatusService
|
||||
|
||||
24
services/attr_select.py
Normal file
24
services/attr_select.py
Normal file
@ -0,0 +1,24 @@
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from models import AttributeSelect
|
||||
from repositories import AttrSelectRepository
|
||||
from schemas.attr_select import (
|
||||
AttrSelectSchema,
|
||||
GetAllAttrSelectOptionsResponse,
|
||||
AttrOptionSchema,
|
||||
)
|
||||
from services.mixins import ServiceGetAllMixin
|
||||
|
||||
|
||||
class AttrSelectService(ServiceGetAllMixin[AttributeSelect, AttrSelectSchema]):
|
||||
schema_class = AttrSelectSchema
|
||||
|
||||
def __init__(self, session: AsyncSession):
|
||||
self.repository = AttrSelectRepository(session)
|
||||
|
||||
async def get_options(self, select_id: int) -> GetAllAttrSelectOptionsResponse:
|
||||
options = await self.repository.get_options(select_id)
|
||||
|
||||
return GetAllAttrSelectOptionsResponse(
|
||||
items=[AttrOptionSchema.model_validate(option) for option in options]
|
||||
)
|
||||
@ -39,12 +39,19 @@ class AttributeService(
|
||||
|
||||
attributes = []
|
||||
for attr, attr_value, attr_label in deal_attributes:
|
||||
select_schema = (
|
||||
AttributeSelectSchema.model_validate(attr.select)
|
||||
if attr.select
|
||||
else None
|
||||
)
|
||||
|
||||
attribute = DealModuleAttributeSchema(
|
||||
attribute_id=attr.id,
|
||||
label=attr_label.label if attr_label else attr.label,
|
||||
original_label=attr.label,
|
||||
value=attr_value.value if attr_value else None,
|
||||
type=AttributeTypeSchema.model_validate(attr.type),
|
||||
select=select_schema,
|
||||
default_value=attr.default_value,
|
||||
description=attr.description,
|
||||
is_applicable_to_group=attr.is_applicable_to_group,
|
||||
|
||||
@ -31,8 +31,9 @@ class ModuleService(
|
||||
raise ObjectNotFoundException(f"Модуль с ID {pk} не найден")
|
||||
return GetByIdWithAttributesResponse(entity=module)
|
||||
|
||||
@staticmethod
|
||||
def _build_modules_with_attributes(
|
||||
self, result: list[tuple]
|
||||
result: list[tuple],
|
||||
) -> dict[int, ModuleWithAttributesSchema]:
|
||||
module_attrs_dict: dict[int, ModuleWithAttributesSchema] = {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user