69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
from fastapi import APIRouter, HTTPException
|
|
|
|
from .. import database as db, config
|
|
|
|
router = APIRouter(prefix="/api/campaigns", tags=["campaigns"])
|
|
|
|
|
|
@router.get("")
|
|
def list_campaigns():
|
|
return db.list_campaigns()
|
|
|
|
|
|
@router.post("")
|
|
def create_campaign(body: dict):
|
|
name = body.get("name", "").strip()
|
|
if not name:
|
|
raise HTTPException(400, "Name is required")
|
|
desc = body.get("description", "").strip()
|
|
return db.create_campaign(name, desc)
|
|
|
|
|
|
@router.get("/{campaign_id}")
|
|
def get_campaign(campaign_id: str):
|
|
campaign = db.get_campaign(campaign_id)
|
|
if not campaign:
|
|
raise HTTPException(404, "Campaign not found")
|
|
return campaign
|
|
|
|
|
|
@router.put("/{campaign_id}")
|
|
def update_campaign(campaign_id: str, body: dict):
|
|
if not db.get_campaign(campaign_id):
|
|
raise HTTPException(404, "Campaign not found")
|
|
updated = db.update_campaign(
|
|
campaign_id,
|
|
name=body.get("name"),
|
|
description=body.get("description"),
|
|
)
|
|
return updated
|
|
|
|
|
|
@router.delete("/{campaign_id}")
|
|
def delete_campaign(campaign_id: str):
|
|
if not db.get_campaign(campaign_id):
|
|
raise HTTPException(404, "Campaign not found")
|
|
db.delete_campaign(campaign_id)
|
|
return {"ok": True}
|
|
|
|
|
|
@router.get("/{campaign_id}/settings")
|
|
def get_campaign_settings(campaign_id: str):
|
|
if not db.get_campaign(campaign_id):
|
|
raise HTTPException(404, "Campaign not found")
|
|
raw = db.get_campaign_settings(campaign_id)
|
|
# return defaults for any missing keys
|
|
merged = {**config.CAMPAIGN_SETTINGS, **raw}
|
|
return merged
|
|
|
|
|
|
@router.post("/{campaign_id}/settings")
|
|
def update_campaign_settings(campaign_id: str, body: dict):
|
|
if not db.get_campaign(campaign_id):
|
|
raise HTTPException(404, "Campaign not found")
|
|
clean = {k: str(v) for k, v in body.items() if k in config.CAMPAIGN_SETTINGS}
|
|
db.update_campaign_settings(campaign_id, clean)
|
|
raw = db.get_campaign_settings(campaign_id)
|
|
merged = {**config.CAMPAIGN_SETTINGS, **raw}
|
|
return merged
|