feat: Updated endpoint endpoints/contact.post.py via AI

This commit is contained in:
Backend IM Bot 2025-04-15 17:59:01 +00:00
parent 0d2ef078e4
commit 622dcd9a2f
2 changed files with 24 additions and 68 deletions

View File

@ -2,24 +2,22 @@ from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from core.database import get_db
from schemas.contact import ContactCreate, ContactSchema
from typing import Dict, Any
from helpers.contact_helpers import validate_contact_data, create_contact, format_contact_response, sanitize_contact_input
router = APIRouter()
@router.post("/contact", status_code=status.HTTP_201_CREATED, response_model=ContactSchema)
async def create_contact_submission(
contact_data: Dict[str, Any],
async def submit_contact_form(
contact_data: ContactCreate,
db: Session = Depends(get_db)
):
sanitized_data = sanitize_contact_input(contact_data)
validation_errors = validate_contact_data(sanitized_data)
validation_errors = validate_contact_data(contact_data.dict())
if validation_errors:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=validation_errors
)
contact_create = ContactCreate(**sanitized_data)
db_contact = create_contact(db=db, contact_data=contact_create)
sanitized_data = sanitize_contact_input(contact_data.dict())
db_contact = create_contact(db=db, contact_data=ContactCreate(**sanitized_data))
return format_contact_response(db_contact)

View File

@ -3,11 +3,11 @@ from sqlalchemy.orm import Session
from models.contact import Contact
from schemas.contact import ContactCreate, ContactSchema
from fastapi import HTTPException, status
from pydantic import EmailStr, ValidationError
from pydantic import ValidationError
def validate_contact_data(contact_data: Dict[str, Any]) -> Dict[str, str]:
"""
Validates contact form submission data with enhanced validation.
Validates contact form submission data using Pydantic schema validation.
Args:
contact_data (Dict[str, Any]): The contact form data to validate.
@ -17,27 +17,14 @@ def validate_contact_data(contact_data: Dict[str, Any]) -> Dict[str, str]:
"""
errors = {}
# Validate name
if not contact_data.get("name"):
errors["name"] = "Name is required"
elif not contact_data["name"].strip():
errors["name"] = "Name cannot consist of only whitespace"
# Validate email with enhanced validation
if not contact_data.get("email"):
errors["email"] = "Email is required"
else:
try:
EmailStr.validate(contact_data["email"])
except ValidationError:
errors["email"] = "Invalid email format - please provide a valid email address"
# Validate message
if not contact_data.get("message"):
errors["message"] = "Message is required"
elif not contact_data["message"].strip():
errors["message"] = "Message cannot consist of only whitespace"
try:
ContactCreate(**contact_data)
except ValidationError as e:
for error in e.errors():
field = error["loc"][0]
message = error["msg"]
errors[field] = message
return errors
def create_contact(db: Session, contact_data: ContactCreate) -> Contact:
@ -55,7 +42,6 @@ def create_contact(db: Session, contact_data: ContactCreate) -> Contact:
HTTPException: If there are validation errors with specific field details.
"""
try:
# ContactCreate schema will handle validation
validated_data = contact_data.dict()
db_contact = Contact(**validated_data)
db.add(db_contact)
@ -83,7 +69,7 @@ def format_contact_response(contact: Contact) -> ContactSchema:
def sanitize_contact_input(contact_data: Dict[str, Any]) -> Dict[str, Any]:
"""
Sanitizes contact form input data with enhanced validation for required fields.
Sanitizes contact form input data using Pydantic schema validation.
Args:
contact_data (Dict[str, Any]): Raw contact form data.
@ -94,40 +80,12 @@ def sanitize_contact_input(contact_data: Dict[str, Any]) -> Dict[str, Any]:
Raises:
HTTPException: If required fields are missing or invalid with specific field details.
"""
errors = {}
sanitized = {}
# Sanitize and validate name
if "name" in contact_data:
sanitized["name"] = contact_data["name"].strip()
if not sanitized["name"]:
errors["name"] = "Name cannot be empty or consist of only whitespace"
else:
errors["name"] = "Name is required"
# Sanitize and validate email
if "email" in contact_data:
email = contact_data["email"].lower().strip()
try:
EmailStr.validate(email)
sanitized["email"] = email
except ValidationError:
errors["email"] = "Invalid email format"
else:
errors["email"] = "Email is required"
# Sanitize and validate message
if "message" in contact_data:
sanitized["message"] = contact_data["message"].strip()
if not sanitized["message"]:
errors["message"] = "Message cannot be empty or consist of only whitespace"
else:
errors["message"] = "Message is required"
if errors:
try:
validated_data = ContactCreate(**contact_data)
return validated_data.dict()
except ValidationError as e:
errors = {error["loc"][0]: error["msg"] for error in e.errors()}
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=errors
)
return sanitized
)