33import uuid
44from typing import Dict , List , TypeAlias , Union
55
6- from fastapi import APIRouter , BackgroundTasks , Depends , Request
6+ from fastapi import APIRouter , BackgroundTasks , Depends , Request , Query
77
88from backend .api .celonis import get_celonis_connection
99from backend .api .jobs import verify_correct_job_module
1414from backend .celonis_connection .celonis_connection_manager import (
1515 CelonisConnectionManager ,
1616)
17+ from backend .pql_queries import declarative_queries
1718
1819# **************** Type Aliases ****************
1920
20- ReturnGraphType : TypeAlias = Dict [
21- str , List [ Dict [str , List [Union [ str , Dict [str , str ]] ]]]
22- ]
21+ TableType : TypeAlias = Dict [str , Union [ List [ str ], List [ List [ str ]]]]
22+ GraphType : TypeAlias = Dict [str , List [Dict [str , str ]]]
23+ ReturnGraphType : TypeAlias = Dict [ str , Union [ List [ TableType ], List [ GraphType ]] ]
2324
2425router = APIRouter (
2526 prefix = "/api/declarative-constraints" , tags = ["Declarative Constraints CC" ]
2627)
2728MODULE_NAME = "declarative_constraints"
2829
2930
30- @router .post ("/compute-constraints" , status_code = 202 )
31+ @router .get ("/compute-constraints" , status_code = 202 )
3132async def compute_declarative_constraints (
3233 background_tasks : BackgroundTasks ,
3334 request : Request ,
35+ min_support : float = Query (0.3 , description = "Minimum support ratio" ),
36+ min_confidence : float = Query (0.75 , description = "Minimum confidence ratio" ),
37+ fitness_score : float = Query (1.0 , description = "Fitness score for the constraints" ),
3438 celonis : CelonisConnectionManager = Depends (get_celonis_connection ),
3539) -> Dict [str , str ]:
3640 """Computes the declarative constraints and stores it.
@@ -44,6 +48,9 @@ async def compute_declarative_constraints(
4448 application state via `request.app.state`.
4549 celonis (optional): The CelonisManager dependency injection.
4650 Defaults to Depends(get_celonis_connection).
51+ min_support: The minimum support ratio for the constraints.
52+ min_confidence: The minimum confidence ratio for the constraints.
53+ fitness_score: The fitness score for the constraints.
4754
4855 Returns:
4956 A dictionary containing the job ID of the scheduled task.
@@ -55,13 +62,19 @@ async def compute_declarative_constraints(
5562
5663 # Schedule the worker
5764 background_tasks .add_task (
58- compute_and_store_declarative_constraints , request .app , job_id , celonis
65+ compute_and_store_declarative_constraints ,
66+ request .app ,
67+ job_id ,
68+ celonis ,
69+ min_support ,
70+ min_confidence ,
71+ fitness_score ,
5972 )
6073
6174 return {"job_id" : job_id }
6275
6376
64- # **************** Retrieving Declarative Model Attributes ****************
77+ # **************** Retrieving Declarative Model Attributes - PM4PY ****************
6578
6679
6780@router .get ("/get_existance_violations/{job_id}" )
@@ -354,3 +367,42 @@ def get_nonchainsuccession_violations(job_id: str, request: Request) -> ReturnGr
354367 verify_correct_job_module (job_id , request , MODULE_NAME )
355368
356369 return request .app .state .jobs [job_id ].result .get ("nonchainsuccession" , [])
370+
371+
372+ # **************** Retrieving Declarative Model Attributes - PQL Queries ****************
373+
374+
375+ @router .get ("/get_always_after_pql/" )
376+ def get_always_after_pql (
377+ request : Request ,
378+ celonis : CelonisConnectionManager = Depends (get_celonis_connection ),
379+ ) -> Dict [str , Union [List [TableType ], List [GraphType ]]]:
380+ """Retrieves the always-after relations via PQL.
381+
382+ Args:
383+ request: The FastAPI request object.
384+ celonis: The CelonisManager dependency injection.
385+
386+ Returns:
387+ A JSON object with "tables" and "graphs" keys.
388+ """
389+ result_df = declarative_queries .get_always_after_relation (celonis )
390+ return result_df
391+
392+
393+ @router .get ("/get_always_before_pql/" )
394+ def get_always_before_pql (
395+ request : Request ,
396+ celonis : CelonisConnectionManager = Depends (get_celonis_connection ),
397+ ) -> Dict [str , Union [List [TableType ], List [GraphType ]]]:
398+ """Retrieves the always-before relations via PQL.
399+
400+ Args:
401+ request: The FastAPI request object.
402+ celonis: The CelonisManager dependency injection.
403+
404+ Returns:
405+ A JSON object with "tables" and "graphs" keys.
406+ """
407+ result_df = declarative_queries .get_always_before_relation (celonis )
408+ return result_df
0 commit comments