اولین نسخه بکاند آرامش پلازا
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.auth import get_current_admin
|
||||
from app.database import get_db
|
||||
from app import models, schemas
|
||||
|
||||
router = APIRouter(prefix="/api/newsletter", tags=["Newsletter"])
|
||||
|
||||
|
||||
@router.post("", response_model=schemas.NewsletterOut, status_code=status.HTTP_201_CREATED)
|
||||
def subscribe(payload: schemas.NewsletterCreate, db: Session = Depends(get_db)):
|
||||
"""اندپوینت عمومی — فرم خبرنامه سایت این را صدا میزند."""
|
||||
existing = db.query(models.NewsletterSubscriber).filter(
|
||||
models.NewsletterSubscriber.email == payload.email
|
||||
).first()
|
||||
if existing:
|
||||
raise HTTPException(status.HTTP_400_BAD_REQUEST, "این ایمیل قبلاً ثبت شده است")
|
||||
sub = models.NewsletterSubscriber(email=payload.email)
|
||||
db.add(sub)
|
||||
db.commit()
|
||||
db.refresh(sub)
|
||||
return sub
|
||||
|
||||
|
||||
@router.get("", response_model=list[schemas.NewsletterOut])
|
||||
def list_subscribers(
|
||||
db: Session = Depends(get_db),
|
||||
_admin=Depends(get_current_admin),
|
||||
):
|
||||
"""فقط ادمین: لیست همه مشترکین خبرنامه."""
|
||||
return db.query(models.NewsletterSubscriber).order_by(
|
||||
models.NewsletterSubscriber.created_at.desc()
|
||||
).all()
|
||||
|
||||
|
||||
@router.delete("/{sub_id}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
def delete_subscriber(
|
||||
sub_id: int,
|
||||
db: Session = Depends(get_db),
|
||||
_admin=Depends(get_current_admin),
|
||||
):
|
||||
sub = db.get(models.NewsletterSubscriber, sub_id)
|
||||
if not sub:
|
||||
raise HTTPException(status.HTTP_404_NOT_FOUND, "مشترک پیدا نشد")
|
||||
db.delete(sub)
|
||||
db.commit()
|
||||
return None
|
||||
Reference in New Issue
Block a user