diff --git a/backend/app/api/v1/webhooks.py b/backend/app/api/v1/webhooks.py new file mode 100644 index 0000000..39f8ea2 --- /dev/null +++ b/backend/app/api/v1/webhooks.py @@ -0,0 +1,40 @@ +"""Webhook endpoints.""" +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.orm import Session +from typing import List +from app.database import get_db +from app.schemas.webhook import WebhookCreate, WebhookResponse +from app.services.webhook_service import WebhookService +from app.api.deps import require_roles, get_current_user +from app.core.permissions import Role +from app.models.user import User + +router = APIRouter(prefix="/webhooks") + + +@router.get("", response_model=List[WebhookResponse]) +def list_webhooks( + user: User = Depends(get_current_user), + db: Session = Depends(get_db), +): + return WebhookService.list_hooks(db, user.tenant_id) + + +@router.post("", response_model=WebhookResponse, status_code=201) +def create_webhook( + req: WebhookCreate, + user: User = Depends(require_roles(Role.SUPER_ADMIN, Role.TENANT_ADMIN, Role.PROJECT_MANAGER)), + db: Session = Depends(get_db), +): + return WebhookService.create_hook(db, user.tenant_id, req) + + +@router.delete("/{hook_id}") +def delete_webhook( + hook_id: int, + user: User = Depends(require_roles(Role.SUPER_ADMIN, Role.TENANT_ADMIN)), + db: Session = Depends(get_db), +): + if WebhookService.delete_hook(db, user.tenant_id, hook_id): + return {"success": True} + raise HTTPException(status_code=404, detail="Webhook not found")