Website contact form endpoint
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
from fastapi import APIRouter
|
||||
from app.api.endpoints import auth, pprs, public, aircraft, airport, local_flights, departures, arrivals, circuits, journal, overflights, public_book, movements, drone_requests
|
||||
from app.api.endpoints import auth, pprs, public, aircraft, airport, local_flights, departures, arrivals, circuits, journal, overflights, public_book, movements, drone_requests, contact_requests
|
||||
|
||||
api_router = APIRouter()
|
||||
|
||||
@@ -13,6 +13,7 @@ api_router.include_router(circuits.router, prefix="/circuits", tags=["circuits"]
|
||||
api_router.include_router(journal.router, prefix="/journal", tags=["journal"])
|
||||
api_router.include_router(movements.router, prefix="/movements", tags=["movements"])
|
||||
api_router.include_router(drone_requests.router, prefix="/drone-requests", tags=["drone_requests"])
|
||||
api_router.include_router(contact_requests.router, prefix="/contact-requests", tags=["contact_requests"])
|
||||
api_router.include_router(public.router, prefix="/public", tags=["public"])
|
||||
api_router.include_router(public_book.router, prefix="/public-book", tags=["public_booking"])
|
||||
api_router.include_router(aircraft.router, prefix="/aircraft", tags=["aircraft"])
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from fastapi import APIRouter, Request
|
||||
|
||||
from app.core.email import email_service
|
||||
from app.core.utils import get_client_ip
|
||||
from app.schemas.contact_request import ContactRequestCreate, ContactRequestReceipt
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
CONTACT_REQUEST_RECIPIENT = "tower@swansea-airport.wales"
|
||||
|
||||
|
||||
@router.post("/public", response_model=ContactRequestReceipt)
|
||||
async def create_public_contact_request(
|
||||
contact_request: ContactRequestCreate,
|
||||
request: Request,
|
||||
):
|
||||
submitted_at = datetime.now(timezone.utc)
|
||||
client_ip = get_client_ip(request)
|
||||
|
||||
print(
|
||||
"Public contact request received "
|
||||
f"at={submitted_at.isoformat()} "
|
||||
f"type={contact_request.enquiry_type.value} "
|
||||
f"name={contact_request.name!r} "
|
||||
f"email={contact_request.email} "
|
||||
f"source={contact_request.source_page or '-'} "
|
||||
f"ip={client_ip}"
|
||||
)
|
||||
|
||||
await email_service.send_email(
|
||||
to_email=CONTACT_REQUEST_RECIPIENT,
|
||||
subject=f"Website contact: {contact_request.subject}",
|
||||
template_name="contact_request.html",
|
||||
reply_to=f"{contact_request.name} <{contact_request.email}>",
|
||||
template_vars={
|
||||
"submitted_at": submitted_at.strftime("%Y-%m-%d %H:%M UTC"),
|
||||
"client_ip": client_ip,
|
||||
"name": contact_request.name,
|
||||
"email": contact_request.email,
|
||||
"phone": contact_request.phone,
|
||||
"enquiry_type": contact_request.enquiry_type.value,
|
||||
"subject": contact_request.subject,
|
||||
"message": contact_request.message,
|
||||
"source_page": contact_request.source_page,
|
||||
},
|
||||
)
|
||||
|
||||
return ContactRequestReceipt()
|
||||
Reference in New Issue
Block a user