main
py 129 lines 5.01 KB
Raw
1 from fastapi import APIRouter
2 from fastapi import Body
3 from fastapi import Depends
4 from fastapi import HTTPException
5 from fastapi import Security
6 from loguru import logger
7 from sqlalchemy.ext.asyncio import AsyncSession
8 from sqlalchemy.future import select
9
10 from app.auth.utils import AuthHandler
11 from app.customer_provisioning.models.default_settings import (
12 CustomerProvisioningDefaultSettings,
13 )
14 from app.customer_provisioning.schema.default import (
15 CustomerProvisioningDefaultSettingsResponse,
16 )
17 from app.db.db_session import get_db
18
19 customer_provisioning_default_settings_router = APIRouter()
20
21
22 @customer_provisioning_default_settings_router.get(
23 "/default_settings",
24 response_model=CustomerProvisioningDefaultSettingsResponse,
25 description="Get all default settings for customer provisioning",
26 dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
27 )
28 async def get_all_customer_provisioning_default_settings(
29 db: AsyncSession = Depends(get_db),
30 ):
31 stmt = select(CustomerProvisioningDefaultSettings)
32 result = await db.execute(stmt)
33 customer_provisioning_default_settings = result.scalars().first()
34 if not customer_provisioning_default_settings:
35 raise HTTPException(
36 status_code=404,
37 detail="No customer provisioning default settings found",
38 )
39 logger.info(f"Customer Provisioning Default Settings retrieved successfully: {customer_provisioning_default_settings}")
40 return CustomerProvisioningDefaultSettingsResponse(
41 message="Customer Provisioning Default Settings retrieved successfully",
42 success=True,
43 customer_provisioning_default_settings=customer_provisioning_default_settings,
44 )
45
46
47 @customer_provisioning_default_settings_router.post(
48 "/default_settings",
49 response_model=CustomerProvisioningDefaultSettingsResponse,
50 description="Create a new default settings for customer provisioning",
51 dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
52 )
53 async def create_customer_provisioning_default_settings(
54 customer_provisioning_default_settings: CustomerProvisioningDefaultSettings = Body(...),
55 db: AsyncSession = Depends(get_db),
56 ):
57 # Check if there's already an entry
58 stmt = select(CustomerProvisioningDefaultSettings)
59 result = await db.execute(stmt)
60 existing_settings = result.scalars().first()
61
62 if existing_settings:
63 raise HTTPException(status_code=400, detail="Only one customer provisioning default settings can exist")
64
65 db.add(customer_provisioning_default_settings)
66 await db.commit()
67 return CustomerProvisioningDefaultSettingsResponse(
68 message="Customer Provisioning Default Settings created successfully",
69 success=True,
70 customer_provisioning_default_settings=customer_provisioning_default_settings,
71 )
72
73
74 @customer_provisioning_default_settings_router.put(
75 "/default_settings",
76 response_model=CustomerProvisioningDefaultSettingsResponse,
77 description="Update default settings for customer provisioning",
78 dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
79 )
80 async def update_customer_provisioning_default_settings(
81 customer_provisioning_default_settings: CustomerProvisioningDefaultSettings = Body(...),
82 db: AsyncSession = Depends(get_db),
83 ):
84 # Fetch the existing record
85 stmt = select(CustomerProvisioningDefaultSettings).where(
86 CustomerProvisioningDefaultSettings.id == customer_provisioning_default_settings.id,
87 )
88 result = await db.execute(stmt)
89 existing_settings = result.scalars().first()
90
91 if not existing_settings:
92 raise HTTPException(status_code=404, detail="Settings not found")
93
94 # Update the fields
95 for key, value in customer_provisioning_default_settings.model_dump().items():
96 setattr(existing_settings, key, value)
97
98 await db.commit()
99 await db.refresh(existing_settings)
100 return CustomerProvisioningDefaultSettingsResponse(
101 message="Customer Provisioning Default Settings updated successfully",
102 success=True,
103 customer_provisioning_default_settings=existing_settings,
104 )
105
106
107 @customer_provisioning_default_settings_router.delete(
108 "/default_settings",
109 response_model=CustomerProvisioningDefaultSettingsResponse,
110 description="Delete default settings for customer provisioning",
111 dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
112 )
113 async def delete_customer_provisioning_default_settings(
114 db: AsyncSession = Depends(get_db),
115 ):
116 stmt = select(CustomerProvisioningDefaultSettings)
117 result = await db.execute(stmt)
118 existing_settings = result.scalars().first()
119
120 if not existing_settings:
121 raise HTTPException(status_code=404, detail="Settings not found")
122
123 await db.delete(existing_settings)
124 await db.commit()
125 return CustomerProvisioningDefaultSettingsResponse(
126 message="Customer Provisioning Default Settings deleted successfully",
127 success=True,
128 customer_provisioning_default_settings=existing_settings,
129 )