feat: attributes in cards and projects
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from sqlalchemy import select, update, func, delete
|
||||
from sqlalchemy.orm import selectinload
|
||||
|
||||
from models import Project, Board
|
||||
from card_attributes import CardAttributesCommandHandler
|
||||
from models import Project, Board, Module, Attribute
|
||||
from schemas.project import *
|
||||
from services.base import BaseService
|
||||
|
||||
@@ -28,6 +30,7 @@ class ProjectService(BaseService):
|
||||
selectinload(Project.attributes),
|
||||
selectinload(Project.modules),
|
||||
)
|
||||
.order_by(Project.id)
|
||||
)
|
||||
project_data = (await self.session.execute(stmt)).all()
|
||||
|
||||
@@ -81,3 +84,37 @@ class ProjectService(BaseService):
|
||||
await self.session.execute(stmt)
|
||||
await self.session.commit()
|
||||
return DeleteProjectResponse(ok=True, message="Проект успешно удален")
|
||||
|
||||
async def get_all_modules(self) -> GetAllModulesResponse:
|
||||
stmt = (
|
||||
select(Module)
|
||||
.where(Module.is_deleted == False)
|
||||
)
|
||||
modules = await self.session.scalars(stmt)
|
||||
return GetAllModulesResponse(modules=modules.all())
|
||||
|
||||
async def update_project_modules(self, request: UpdateModulesRequest) -> UpdateModulesResponse:
|
||||
project: Optional[Project] = await self.session.get(Project, request.project_id)
|
||||
if not project:
|
||||
return UpdateModulesResponse(ok=False, message=f"Проект с ID {request.project_id} не найден")
|
||||
|
||||
modules_stmt = (
|
||||
select(Module)
|
||||
.where(Module.id.in_(request.module_ids))
|
||||
)
|
||||
modules = (await self.session.scalars(modules_stmt)).all()
|
||||
|
||||
project.modules = modules
|
||||
await self.session.commit()
|
||||
|
||||
return UpdateModulesResponse(ok=True, message="Модули успешно обновлены")
|
||||
|
||||
async def update_project_attributes(self, request: UpdateAttributesRequest) -> UpdateAttributesResponse:
|
||||
project: Optional[Project] = await self.session.get(Project, request.project_id)
|
||||
if not project:
|
||||
return UpdateAttributesResponse(ok=False, message=f"Проект с ID {request.project_id} не найден")
|
||||
|
||||
card_attrs_handler = CardAttributesCommandHandler(self.session)
|
||||
await card_attrs_handler.set_project_attributes(project, request.attribute_ids)
|
||||
|
||||
return UpdateAttributesResponse(ok=True, message="Атрибуты успешно обновлены")
|
||||
|
||||
Reference in New Issue
Block a user