From 7ffc71b5a0e20484ef33a7355dcbe2f6efdf4318 Mon Sep 17 00:00:00 2001 From: Backend IM Bot Date: Tue, 15 Apr 2025 08:48:16 +0000 Subject: [PATCH] feat: Updated endpoint endpoints/contact-us.post.py via AI --- ...20250415_084807_5a26e7bc_update_contact.py | 31 +++++++++++++++++++ endpoints/contact-us.post.py | 23 ++++++-------- helpers/contact_helpers.py | 9 ++++-- schemas/contact.py | 5 ++- 4 files changed, 52 insertions(+), 16 deletions(-) create mode 100644 alembic/versions/20250415_084807_5a26e7bc_update_contact.py diff --git a/alembic/versions/20250415_084807_5a26e7bc_update_contact.py b/alembic/versions/20250415_084807_5a26e7bc_update_contact.py new file mode 100644 index 0000000..efc0238 --- /dev/null +++ b/alembic/versions/20250415_084807_5a26e7bc_update_contact.py @@ -0,0 +1,31 @@ +"""update Contact model +Revision ID: 98765432109876 +Revises: 2a3b4c5d6e7f +Create Date: 2023-05-24 12:00:00 +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.sql import func +import uuid + +# revision identifiers, used by Alembic +revision = '98765432109876' +down_revision = '2a3b4c5d6e7f' +branch_labels = None +depends_on = None + +def upgrade(): + table_name = "contacts" + op.create_table( + table_name, + sa.Column('id', sa.String(36), primary_key=True, default=lambda: str(uuid.uuid4())), + sa.Column('name', sa.String(), nullable=False), + sa.Column('email', sa.String(), nullable=False), + sa.Column('message', sa.Text(), nullable=False), + sa.Column('created_at', sa.DateTime(), server_default=func.now()), + sa.Column('updated_at', sa.DateTime(), server_default=func.now(), onupdate=func.now()) + ) + +def downgrade(): + table_name = "contacts" + op.drop_table(table_name) \ No newline at end of file diff --git a/endpoints/contact-us.post.py b/endpoints/contact-us.post.py index b482617..26a013c 100644 --- a/endpoints/contact-us.post.py +++ b/endpoints/contact-us.post.py @@ -1,20 +1,17 @@ from fastapi import APIRouter, HTTPException, status -from schemas.contact import ContactCreate, ContactSchema +from schemas.contact import ContactCreate from helpers.contact_helpers import create_contact, validate_contact_data -from sqlalchemy.orm import Session -from fastapi import Depends -from core.database import get_db router = APIRouter() -@router.post("/contact-us", status_code=status.HTTP_201_CREATED, response_model=ContactSchema) -async def create_new_contact( - contact_data: ContactCreate, - db: Session = Depends(get_db) -): - """Handle contact form submissions""" - if not validate_contact_data(contact_data): - raise HTTPException(status_code=400, detail="Invalid data provided") +@router.post("/contact-us", status_code=status.HTTP_201_CREATED) +async def create_new_contact(contact: ContactCreate): + """Create a new contact""" + if not validate_contact_data(contact): + raise HTTPException(status_code=400, detail="Invalid contact data") + + new_contact = create_contact(contact) + if not new_contact: + raise HTTPException(status_code=400, detail="Failed to create contact") - new_contact = create_contact(db=db, contact_data=contact_data) return new_contact \ No newline at end of file diff --git a/helpers/contact_helpers.py b/helpers/contact_helpers.py index e862501..7bb7000 100644 --- a/helpers/contact_helpers.py +++ b/helpers/contact_helpers.py @@ -15,7 +15,11 @@ def create_contact(db: Session, contact_data: ContactCreate) -> Contact: Returns: Contact: The newly created contact object. """ - db_contact = Contact(**contact_data.dict()) + db_contact = Contact( + name=contact_data.name, + email=contact_data.email, + message=contact_data.message + ) db.add(db_contact) db.commit() db.refresh(db_contact) @@ -35,7 +39,8 @@ def validate_contact_data(contact_data: ContactCreate) -> bool: contact_data.name contact_data.email contact_data.message - except ValidationError: + except ValidationError as e: + print(f"Validation error: {e}") return False if not contact_data.name or not contact_data.message: diff --git a/schemas/contact.py b/schemas/contact.py index 7109314..723165d 100644 --- a/schemas/contact.py +++ b/schemas/contact.py @@ -16,8 +16,11 @@ class ContactUpdate(ContactBase): email: Optional[EmailStr] = Field(None, description="Contact's email address") message: Optional[str] = Field(None, description="Contact's message") -class ContactSchema(ContactBase): +class ContactSchema(BaseModel): id: uuid.UUID + name: str + email: EmailStr + message: str created_at: datetime updated_at: datetime