diff --git a/alembic/versions/20250429_162912_ffb561c1_update_contact_form.py b/alembic/versions/20250429_162912_ffb561c1_update_contact_form.py new file mode 100644 index 0000000..c7b79ad --- /dev/null +++ b/alembic/versions/20250429_162912_ffb561c1_update_contact_form.py @@ -0,0 +1,31 @@ +"""create table for contact_forms + +Revision ID: 2a3b4c5d6e7f +Revises: 0001 +Create Date: 2023-05-25 12:34:56 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.sql import func +import uuid + +# revision identifiers, used by Alembic. +revision = '2a3b4c5d6e7f' +down_revision = '0001' +branch_labels = None +depends_on = None + +def upgrade(): + op.create_table( + 'contact_forms', + sa.Column('id', sa.String(36), primary_key=True, default=lambda: str(uuid.uuid4())), + sa.Column('name', sa.String(), nullable=False), + sa.Column('phone_number', sa.String(), nullable=False), + sa.Column('address', sa.String(), 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(): + op.drop_table('contact_forms') \ No newline at end of file diff --git a/endpoints/contact-form.get.py b/endpoints/contact-form.get.py index e69de29..829b92f 100644 --- a/endpoints/contact-form.get.py +++ b/endpoints/contact-form.get.py @@ -0,0 +1,13 @@ +from fastapi import APIRouter, Depends +from typing import List +from schemas.contact_form import ContactFormSchema +from helpers.contact_form_helpers import get_all_contact_forms +from sqlalchemy.orm import Session +from core.database import get_db + +router = APIRouter() + +@router.get("/contact-form", response_model=List[ContactFormSchema], status_code=200) +def get_contact_forms(db: Session = Depends(get_db)): + contact_forms = get_all_contact_forms(db) + return contact_forms \ No newline at end of file diff --git a/helpers/contact_form_helpers.py b/helpers/contact_form_helpers.py new file mode 100644 index 0000000..9b09f26 --- /dev/null +++ b/helpers/contact_form_helpers.py @@ -0,0 +1,31 @@ +from typing import List, Optional +from uuid import UUID +from sqlalchemy.orm import Session +from models.contact_form import ContactForm +from schemas.contact_form import ContactFormSchema + +def get_contact_form_by_id(db: Session, contact_form_id: UUID) -> Optional[ContactForm]: + """ + Retrieves a single contact form by its ID. + + Args: + db (Session): The database session. + contact_form_id (UUID): The ID of the contact form to retrieve. + + Returns: + Optional[ContactForm]: The contact form object if found, otherwise None. + """ + return db.query(ContactForm).filter(ContactForm.id == contact_form_id).first() + +def get_all_contact_forms(db: Session) -> List[ContactFormSchema]: + """ + Retrieves all contact forms from the database. + + Args: + db (Session): The database session. + + Returns: + List[ContactFormSchema]: A list of all contact form objects. + """ + contact_forms = db.query(ContactForm).all() + return [ContactFormSchema.from_orm(contact_form) for contact_form in contact_forms] \ No newline at end of file diff --git a/models/contact_form.py b/models/contact_form.py new file mode 100644 index 0000000..02e800a --- /dev/null +++ b/models/contact_form.py @@ -0,0 +1,15 @@ +from sqlalchemy import Column, String, DateTime +from sqlalchemy.dialects.postgresql import UUID +from sqlalchemy.sql import func +from core.database import Base +import uuid + +class ContactForm(Base): + __tablename__ = "contact_forms" + + id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + name = Column(String, nullable=False) + phone_number = Column(String, nullable=False) + address = Column(String, nullable=False) + created_at = Column(DateTime, default=func.now()) + updated_at = Column(DateTime, default=func.now(), onupdate=func.now()) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 596e6f3..db12c92 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,3 +7,6 @@ sqlalchemy>=1.4.0 python-dotenv>=0.19.0 bcrypt>=3.2.0 alembic>=1.13.1 +jose +passlib +pydantic diff --git a/schemas/contact_form.py b/schemas/contact_form.py new file mode 100644 index 0000000..06584a1 --- /dev/null +++ b/schemas/contact_form.py @@ -0,0 +1,25 @@ +from pydantic import BaseModel, Field +from typing import Optional +from datetime import datetime +import uuid + +class ContactFormBase(BaseModel): + name: str = Field(..., description="Contact name") + phone_number: str = Field(..., description="Contact phone number") + address: str = Field(..., description="Contact address") + +class ContactFormCreate(ContactFormBase): + pass + +class ContactFormUpdate(ContactFormBase): + name: Optional[str] = Field(None, description="Contact name") + phone_number: Optional[str] = Field(None, description="Contact phone number") + address: Optional[str] = Field(None, description="Contact address") + +class ContactFormSchema(ContactFormBase): + id: uuid.UUID + created_at: datetime + updated_at: datetime + + class Config: + orm_mode = True \ No newline at end of file