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