mirror of
https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools.git
synced 2026-06-18 15:29:36 +00:00
121 lines
4.4 KiB
Python
121 lines
4.4 KiB
Python
"""Innovation / Autonomous Growth Factory — deterministic demo API + DB-backed paths."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from fastapi import APIRouter, Body, Depends, Query
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from auto_client_acquisition.innovation import (
|
|
analyze_deal_room,
|
|
build_demo_command_feed,
|
|
build_demo_proof_ledger,
|
|
list_growth_missions,
|
|
recommend_experiments,
|
|
)
|
|
from auto_client_acquisition.innovation.aeo_radar import build_aeo_radar_demo
|
|
from auto_client_acquisition.innovation.command_feed_live import build_command_feed_from_db
|
|
from auto_client_acquisition.innovation.proof_ledger_repo import (
|
|
proof_ledger_append,
|
|
proof_ledger_list,
|
|
proof_ledger_weekly_report,
|
|
)
|
|
from auto_client_acquisition.innovation.ten_in_ten import build_ten_opportunities
|
|
from db.session import get_db
|
|
|
|
router = APIRouter(prefix="/api/v1/innovation", tags=["innovation"])
|
|
|
|
|
|
@router.get("/command-feed/demo")
|
|
async def command_feed_demo() -> dict[str, Any]:
|
|
"""بطاقات Command Feed توضيحية."""
|
|
return build_demo_command_feed()
|
|
|
|
|
|
@router.get("/command-feed/live")
|
|
async def command_feed_live(
|
|
session: AsyncSession = Depends(get_db),
|
|
tenant_id: str = Query("default"),
|
|
) -> dict[str, Any]:
|
|
"""بطاقات من قاعدة البيانات عند توفر أحداث؛ وإلا fallback للعرض التجريبي."""
|
|
return await build_command_feed_from_db(session, tenant_id=tenant_id)
|
|
|
|
|
|
@router.get("/growth-missions")
|
|
async def growth_missions() -> dict[str, Any]:
|
|
"""قائمة مهام النمو بما فيها Kill feature «10 فرص في 10 دقائق»."""
|
|
return list_growth_missions()
|
|
|
|
|
|
@router.post("/opportunities/ten-in-ten")
|
|
async def opportunities_ten_in_ten(
|
|
payload: dict[str, Any] = Body(default_factory=dict),
|
|
) -> dict[str, Any]:
|
|
"""10 فرص في 10 دقائق — مسودات بانتظار الموافقة فقط؛ لا إرسال."""
|
|
return build_ten_opportunities(payload or None)
|
|
|
|
|
|
@router.get("/aeo/radar/demo")
|
|
async def aeo_radar_demo(sector: str | None = Query(None)) -> dict[str, Any]:
|
|
"""قائمة تحقق AEO تجريبية حسب القطاع — بدون بحث حي."""
|
|
return build_aeo_radar_demo(sector)
|
|
|
|
|
|
@router.post("/experiments/recommend")
|
|
async def experiments_recommend(
|
|
context: dict[str, Any] = Body(default_factory=dict),
|
|
) -> dict[str, Any]:
|
|
"""ثلاث تجارب شهرية مقترحة؛ الجسم اختياري ويدعم past_experiments."""
|
|
return recommend_experiments(context or None)
|
|
|
|
|
|
@router.get("/proof-ledger/demo")
|
|
async def proof_ledger_demo() -> dict[str, Any]:
|
|
"""سجل إثبات تجريبي ثابت."""
|
|
return build_demo_proof_ledger()
|
|
|
|
|
|
@router.post("/proof-ledger/events")
|
|
async def proof_ledger_events_create(
|
|
body: dict[str, Any] = Body(default_factory=dict),
|
|
session: AsyncSession = Depends(get_db),
|
|
) -> dict[str, Any]:
|
|
"""إلحاق حدث في دفتر الإثبات (تقديرات تشغيلية)."""
|
|
return await proof_ledger_append(
|
|
session,
|
|
tenant_id=str(body.get("tenant_id") or "default"),
|
|
event_type=str(body.get("event_type") or "note"),
|
|
revenue_influenced_sar_estimate=float(body.get("revenue_influenced_sar_estimate") or 0),
|
|
notes_ar=str(body.get("notes_ar") or ""),
|
|
extra=body.get("extra_json") if isinstance(body.get("extra_json"), dict) else {},
|
|
)
|
|
|
|
|
|
@router.get("/proof-ledger/events")
|
|
async def proof_ledger_events_list(
|
|
session: AsyncSession = Depends(get_db),
|
|
tenant_id: str = Query("default"),
|
|
limit: int = Query(100, ge=1, le=500),
|
|
) -> dict[str, Any]:
|
|
"""قائمة أحداث دفتر الإثبات."""
|
|
events = await proof_ledger_list(session, tenant_id=tenant_id, limit=limit)
|
|
return {"events": events, "tenant_id": tenant_id}
|
|
|
|
|
|
@router.get("/proof-ledger/report/week")
|
|
async def proof_ledger_report_week(
|
|
session: AsyncSession = Depends(get_db),
|
|
tenant_id: str = Query("default"),
|
|
) -> dict[str, Any]:
|
|
"""ملخص 7 أيام لتقديرات الإيراد المؤثرة (ليس محاسبة دقيقة)."""
|
|
return await proof_ledger_weekly_report(session, tenant_id=tenant_id)
|
|
|
|
|
|
@router.post("/deal-room/analyze")
|
|
async def deal_room_analyze(
|
|
payload: dict[str, Any] = Body(default_factory=dict),
|
|
) -> dict[str, Any]:
|
|
"""تحليل غرفة صفقة تجريبي من جسم الطلب."""
|
|
return analyze_deal_room(payload or None)
|