aibilly_backend_code/src/routes/denial_pattern_routes.py
laxmanhalaki b793ac859a
Some checks failed
CI/CD Pipeline / test (push) Has been cancelled
CI/CD Pipeline / build (push) Has been cancelled
CI/CD Pipeline / deploy-staging (push) Has been cancelled
CI/CD Pipeline / deploy-production (push) Has been cancelled
modification done to up the project
2026-03-12 20:52:08 +05:30

116 lines
3.8 KiB
Python

"""
DenialPattern API Router
Enterprise-grade FastAPI router with full CRUD operations
Architecture: Routers → Services/CRUD → SQLAlchemy Models + Pydantic Schemas
"""
from typing import List, Optional
from fastapi import APIRouter, Depends, HTTPException, Query, status
from sqlalchemy.orm import Session
from uuid import UUID
from src.config.database import get_db
from src.services.denial_pattern_service import DenialPatternCRUD
from src.validation.denial_pattern_schemas import (
DenialPatternCreate,
DenialPatternUpdate,
DenialPatternResponse,
DenialPatternListResponse,
)
router = APIRouter(prefix="/denialpatterns", tags=["DenialPattern"])
def get_crud(db: Session = Depends(get_db)) -> DenialPatternCRUD:
"""Dependency injection for DenialPatternCRUD"""
return DenialPatternCRUD(db)
@router.get("/", response_model=DenialPatternListResponse)
async def list_denial_patterns(
skip: int = Query(0, ge=0, description="Number of records to skip"),
limit: int = Query(100, ge=1, le=1000, description="Maximum records to return"),
crud: DenialPatternCRUD = Depends(get_crud),
):
"""
List all denialpatterns with pagination and filtering.
- **skip**: Number of records to skip (for pagination)
- **limit**: Maximum number of records to return
"""
items, total = await crud.get_all(skip=skip, limit=limit)
return DenialPatternListResponse(
items=items,
total=total,
skip=skip,
limit=limit,
has_more=skip + limit < total
)
@router.get("/{ denial_pattern_id }", response_model=DenialPatternResponse)
async def get_denial_pattern(
denial_pattern_id: UUID,
crud: DenialPatternCRUD = Depends(get_crud),
):
"""
Get a specific denialpattern by ID.
- **denial_pattern_id**: The UUID of the denialpattern
"""
db_denial_pattern = await crud.get_by_id(denial_pattern_id)
if not db_denial_pattern:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"DenialPattern with id { denial_pattern_id} not found"
)
return db_denial_pattern
@router.post("/", response_model=DenialPatternResponse, status_code=status.HTTP_201_CREATED)
async def create_denial_pattern(
denial_pattern_in: DenialPatternCreate,
crud: DenialPatternCRUD = Depends(get_crud),
):
"""
Create a new denialpattern.
- **denial_pattern_in**: The denialpattern data to create
"""
return await crud.create(denial_pattern_in)
@router.put("/{ denial_pattern_id }", response_model=DenialPatternResponse)
async def update_denial_pattern(
denial_pattern_id: UUID,
denial_pattern_in: DenialPatternUpdate,
crud: DenialPatternCRUD = Depends(get_crud),
):
"""
Update an existing denialpattern.
- **denial_pattern_id**: The UUID of the denialpattern to update
- **denial_pattern_in**: The updated denialpattern data
"""
db_denial_pattern = await crud.get_by_id(denial_pattern_id)
if not db_denial_pattern:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"DenialPattern with id { denial_pattern_id} not found"
)
return await crud.update(denial_pattern_id, denial_pattern_in)
@router.delete("/{ denial_pattern_id }", status_code=status.HTTP_204_NO_CONTENT)
async def delete_denial_pattern(
denial_pattern_id: UUID,
crud: DenialPatternCRUD = Depends(get_crud),
):
"""
Delete a denialpattern.
- **denial_pattern_id**: The UUID of the denialpattern to delete
"""
db_denial_pattern = await crud.get_by_id(denial_pattern_id)
if not db_denial_pattern:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"DenialPattern with id { denial_pattern_id} not found"
)
await crud.delete(denial_pattern_id)
return None