feat: CRUD ProcessSchema #16

Merged
ivan.dev merged 8 commits from VORKOUT-17 into master 2025-08-05 21:37:07 +05:00
21 changed files with 719 additions and 301 deletions
Showing only changes of commit 3c300f7c7a - Show all commits

View File

@@ -117,59 +117,59 @@ async def get_process_schema_by_title(connection: AsyncConnection, title: str) -
""" """
query = select(process_schema_table).where(process_schema_table.c.title == title) query = select(process_schema_table).where(process_schema_table.c.title == title)
processschema_db_cursor = await connection.execute(query) process_schema_db_cursor = await connection.execute(query)
processschema_data = processschema_db_cursor.mappings().one_or_none() process_schema_data = process_schema_db_cursor.mappings().one_or_none()
if not processschema_data: if not process_schema_data:
return None return None
return ProcessSchema.model_validate(processschema_data) return ProcessSchema.model_validate(process_schema_data)
async def get_process_schema_by_id(connection: AsyncConnection, id: int) -> Optional[ProcessSchema]: async def get_process_schema_by_id(connection: AsyncConnection, id: int) -> Optional[ProcessSchema]:
""" """
Получает processschema по id. Получает process_schema по id.
""" """
query = select(process_schema_table).where(process_schema_table.c.id == id) query = select(process_schema_table).where(process_schema_table.c.id == id)
processschema_db_cursor = await connection.execute(query) process_schema_db_cursor = await connection.execute(query)
processschema_data = processschema_db_cursor.mappings().one_or_none() process_schema_data = process_schema_db_cursor.mappings().one_or_none()
if not processschema_data: if not process_schema_data:
return None return None
return ProcessSchema.model_validate(processschema_data) return ProcessSchema.model_validate(process_schema_data)
async def update_process_schema_by_id(connection: AsyncConnection, update_values, processschema): async def update_process_schema_by_id(connection: AsyncConnection, update_values, process_schema):
""" """
Вносит изменеия в нужное поле таблицы process_schema_table. Вносит изменеия в нужное поле таблицы process_schema_table.
""" """
await connection.execute( await connection.execute(
process_schema_table.update().where(process_schema_table.c.id == processschema.id).values(**update_values) process_schema_table.update().where(process_schema_table.c.id == process_schema.id).values(**update_values)
) )
await connection.commit() await connection.commit()
async def create_process_schema( async def create_process_schema(
connection: AsyncConnection, processschema: ProcessSchema, creator_id: int connection: AsyncConnection, process_schema: ProcessSchema, creator_id: int
) -> Optional[ProcessSchema]: ) -> Optional[ProcessSchema]:
""" """
Создает нове поле в таблице process_schema_table. Создает нове поле в таблице process_schema_table.
""" """
query = insert(process_schema_table).values( query = insert(process_schema_table).values(
title=processschema.title, title=process_schema.title,
description=processschema.description, description=process_schema.description,
owner_id=processschema.owner_id, owner_id=process_schema.owner_id,
creator_id=creator_id, creator_id=creator_id,
created_at=datetime.now(timezone.utc), created_at=datetime.now(timezone.utc),
settings=processschema.settings, settings=process_schema.settings,
status=processschema.status.value, status=process_schema.status.value,
) )
await connection.execute(query) await connection.execute(query)
await connection.commit() await connection.commit()
return processschema return process_schema

View File

@@ -3,7 +3,7 @@ from api.endpoints.profile import api_router as profile_router
from api.endpoints.account import api_router as account_router from api.endpoints.account import api_router as account_router
from api.endpoints.keyring import api_router as keyring_router from api.endpoints.keyring import api_router as keyring_router
from api.endpoints.listevents import api_router as listevents_router from api.endpoints.listevents import api_router as listevents_router
from api.endpoints.processschema import api_router as processschema_router from api.endpoints.process_schema import api_router as processschema_router
list_of_routes = [auth_router, profile_router, account_router, keyring_router, listevents_router, processschema_router] list_of_routes = [auth_router, profile_router, account_router, keyring_router, listevents_router, processschema_router]

View File

@@ -1,13 +1,13 @@
from fastapi import APIRouter, Depends, HTTPException, status, Query from fastapi import APIRouter, Depends, HTTPException, status, Query
from typing import Optional, Dict, Any, List from typing import Optional, List
from sqlalchemy.ext.asyncio import AsyncConnection from sqlalchemy.ext.asyncio import AsyncConnection
from api.db.connection.session import get_connection_dep from api.db.connection.session import get_connection_dep
from api.db.logic.account import get_user_by_login from api.db.logic.account import get_user_by_login
from api.db.logic.processschema import ( from api.db.logic.process_schema import (
get_process_schema_by_title, get_process_schema_by_title,
create_process_schema, create_process_schema,
get_process_schema_by_id, get_process_schema_by_id,
@@ -32,7 +32,7 @@ from api.services.user_role_validation import (
api_router = APIRouter( api_router = APIRouter(
prefix="/process-schema", prefix="/process_schema",
tags=["process schema"], tags=["process schema"],
) )
@@ -78,40 +78,40 @@ async def get_all_process_schema(
return process_schema_page return process_schema_page
@api_router.get("/{processschema_id}", dependencies=[Depends(bearer_schema)], response_model=ProcessSchema) @api_router.get("/{process_schema_id}", dependencies=[Depends(bearer_schema)], response_model=ProcessSchema)
async def get_process_schema( async def get_process_schema(
processschema_id: int, process_schema_id: int,
connection: AsyncConnection = Depends(get_connection_dep), connection: AsyncConnection = Depends(get_connection_dep),
current_user=Depends(get_current_user), current_user=Depends(get_current_user),
): ):
processschema_validation = await get_process_schema_by_id(connection, processschema_id) process_schema_validation = await get_process_schema_by_id(connection, process_schema_id)
if processschema_validation is None: if process_schema_validation is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Process schema not found") raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Process schema not found")
authorize_user = await db_user_role_validation_for_listevents_and_processschema_by_listevent_id( authorize_user = await db_user_role_validation_for_listevents_and_processschema_by_listevent_id(
connection, current_user, processschema_validation.creator_id connection, current_user, process_schema_validation.creator_id
) )
if processschema_id is None: if process_schema_id is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Process schema not found") raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Process schema not found")
return processschema_validation return process_schema_validation
@api_router.post("", dependencies=[Depends(bearer_schema)], response_model=ProcessSchema) @api_router.post("", dependencies=[Depends(bearer_schema)], response_model=ProcessSchema)
async def create_processschema( async def create_processschema(
processschema: ProcessSchemaUpdate, process_schema: ProcessSchemaUpdate,
connection: AsyncConnection = Depends(get_connection_dep), connection: AsyncConnection = Depends(get_connection_dep),
current_user=Depends(get_current_user), current_user=Depends(get_current_user),
): ):
user_validation = await get_user_by_login(connection, current_user) user_validation = await get_user_by_login(connection, current_user)
processschema_validation = await get_process_schema_by_title(connection, processschema.title) process_schema_validation = await get_process_schema_by_title(connection, process_schema.title)
if processschema_validation is None: if process_schema_validation is None:
await create_process_schema(connection, processschema, user_validation.id) await create_process_schema(connection, process_schema, user_validation.id)
processschema_new = await get_process_schema_by_title(connection, processschema.title) process_schema_new = await get_process_schema_by_title(connection, process_schema.title)
return processschema_new return process_schema_new
else: else:
raise HTTPException( raise HTTPException(
@@ -119,58 +119,58 @@ async def create_processschema(
) )
@api_router.put("/{processschema_id}", dependencies=[Depends(bearer_schema)], response_model=ProcessSchema) @api_router.put("/{process_schema_id}", dependencies=[Depends(bearer_schema)], response_model=ProcessSchema)
async def update_process_schema( async def update_process_schema(
processschema_id: int, process_schema_id: int,
processschema_update: ProcessSchemaUpdate, process_schema_update: ProcessSchemaUpdate,
connection: AsyncConnection = Depends(get_connection_dep), connection: AsyncConnection = Depends(get_connection_dep),
current_user=Depends(get_current_user), current_user=Depends(get_current_user),
): ):
processschema_validation = await get_process_schema_by_id(connection, processschema_id) process_schema_validation = await get_process_schema_by_id(connection, process_schema_id)
if processschema_validation is None: if process_schema_validation is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Process schema not found") raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Process schema not found")
authorize_user = await db_user_role_validation_for_listevents_and_processschema_by_listevent_id( authorize_user = await db_user_role_validation_for_listevents_and_processschema_by_listevent_id(
connection, current_user, processschema_validation.creator_id connection, current_user, process_schema_validation.creator_id
) )
updated_values = processschema_update.model_dump(by_alias=True, exclude_none=True) updated_values = process_schema_update.model_dump(by_alias=True, exclude_none=True)
if not updated_values: if not updated_values:
return processschema_validation return process_schema_validation
await update_process_schema_by_id(connection, updated_values, processschema_validation) await update_process_schema_by_id(connection, updated_values, process_schema_validation)
processschema = await get_process_schema_by_id(connection, processschema_id) process_schema = await get_process_schema_by_id(connection, process_schema_id)
return processschema return process_schema
@api_router.delete("/{processschema_id}", dependencies=[Depends(bearer_schema)], response_model=ProcessSchema) @api_router.delete("/{process_schema_id}", dependencies=[Depends(bearer_schema)], response_model=ProcessSchema)
async def delete_process_schema( async def delete_process_schema(
processschema_id: int, process_schema_id: int,
connection: AsyncConnection = Depends(get_connection_dep), connection: AsyncConnection = Depends(get_connection_dep),
current_user=Depends(get_current_user), current_user=Depends(get_current_user),
): ):
processschema_validation = await get_process_schema_by_id(connection, processschema_id) process_schema_validation = await get_process_schema_by_id(connection, process_schema_id)
if processschema_validation is None: if process_schema_validation is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Process schema not found") raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Process schema not found")
authorize_user = await db_user_role_validation_for_listevents_and_processschema_by_listevent_id( authorize_user = await db_user_role_validation_for_listevents_and_processschema_by_listevent_id(
connection, current_user, processschema_validation.creator_id connection, current_user, process_schema_validation.creator_id
) )
processschema_update = ProcessSchemaUpdate(status=ProcessStatus.DELETED.value) process_schema_update = ProcessSchemaUpdate(status=ProcessStatus.DELETED.value)
updated_values = processschema_update.model_dump(by_alias=True, exclude_none=True) updated_values = process_schema_update.model_dump(by_alias=True, exclude_none=True)
if not updated_values: if not updated_values:
return processschema_validation return process_schema_validation
await update_process_schema_by_id(connection, updated_values, processschema_validation) await update_process_schema_by_id(connection, updated_values, process_schema_validation)
processschema = await get_process_schema_by_id(connection, processschema_id) process_schema = await get_process_schema_by_id(connection, process_schema_id)
return processschema return process_schema

View File

@@ -38,12 +38,7 @@ all_list_event_adapter = TypeAdapter(List[AllListEvent])
class ListEventFilterDTO(Base): class ListEventFilterDTO(Base):
pagination: Dict[str, int] = Field( pagination: Dict[str, int]
default={"page": 1, "limit": 10}, search: Optional[str] = None
description="Пагинация (номер страницы и количество элементов)", order: Optional[Dict[str, str]] = None
) filters: Optional[Dict[str, List[str]]] = None
search: Optional[str] = Field(default=None, description="Поиск по текстовым полям (name, title)")
order: Optional[Dict[str, str]] = Field(
default={"field": "id", "direction": "asc"}, description="Сортировка (поле и направление)"
)
filters: Optional[Dict[str, List[str]]] = Field(default=None, description="Фильтрация по точным значениям")