from fastapi import APIRouter, HTTPException, status, Depends from sqlalchemy.orm import Session from app.models import LocalContact as LocalContactModel from app.schemas import LocalContactCreate as LocalContactSchema, loginData from app.dependencies import get_db from app.routers.auth import get_current_user local_contact_router = APIRouter() @local_contact_router.post( "/", response_model=LocalContactSchema, status_code=status.HTTP_201_CREATED, ) async def create_local_contact( local_contact: LocalContactSchema, db: Session = Depends(get_db), current_user: loginData = Depends(get_current_user), ): """ Create a new local contact. Only selected users can create a local contact. """ # Access control: Only allow users with specific roles (e.g., "admin" or # "contact_manager") if current_user.role not in ["admin", "contact_manager"]: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="You do not have permission to create a local contact.", ) # Check if a local contact with the same email already exists if ( db.query(LocalContactModel) .filter(LocalContactModel.email == local_contact.email) .first() ): raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="A local contact with this email already exists.", ) # Create a new LocalContact db_local_contact = LocalContactModel( firstname=local_contact.firstname, lastname=local_contact.lastname, phone_number=local_contact.phone_number, email=local_contact.email, status=local_contact.status or "active", ) db.add(db_local_contact) db.commit() db.refresh(db_local_contact) return db_local_contact