- اتصال کامل فرانت به API: همه محتوای سایت (پروژهها، مقالات، خدمات، برند و...) از بکاند خوانده میشود (SiteProvider + useSite) - فرم تماس و خبرنامه متصل به بکاند و تستشده در مرورگر - ساختار مونوریپو: frontend/ + backend/ - Dockerfile برای هر دو بخش + docker-compose (PostgreSQL + FastAPI + nginx) - nginx با پروکسی /api — بدون نیاز به CORS در حالت داکر - README کامل فارسی
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
"""انتهای فرمها — ثبت پیام تماس و عضویت در خبرنامه."""
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.orm import Session
|
|
|
|
from ..database import get_db
|
|
from .. import models
|
|
from ..schemas import ContactIn, ContactMessageOut, NewsletterIn, SubscriberOut
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("/contact", response_model=ContactMessageOut, status_code=201)
|
|
def submit_contact(payload: ContactIn, db: Session = Depends(get_db)):
|
|
message = models.ContactMessage(
|
|
name=payload.name.strip(),
|
|
phone=payload.phone.strip(),
|
|
note=payload.note.strip(),
|
|
)
|
|
db.add(message)
|
|
db.commit()
|
|
db.refresh(message)
|
|
return message
|
|
|
|
|
|
@router.post("/newsletter", response_model=SubscriberOut, status_code=201)
|
|
def subscribe(payload: NewsletterIn, db: Session = Depends(get_db)):
|
|
email = str(payload.email).lower()
|
|
subscriber = db.query(models.Subscriber).filter(models.Subscriber.email == email).first()
|
|
|
|
if subscriber is not None:
|
|
if not subscriber.is_active:
|
|
subscriber.is_active = True
|
|
db.commit()
|
|
db.refresh(subscriber)
|
|
return subscriber
|
|
|
|
subscriber = models.Subscriber(email=email)
|
|
db.add(subscriber)
|
|
db.commit()
|
|
db.refresh(subscriber)
|
|
return subscriber
|