refactor(bot)!: rename 'ai procurement' -> 'bot/' so the compose build context is committed
The bot service in docker-compose.yml builds from ./bot, but the agent code lived in 'ai procurement/' and ./bot was only a Windows junction on reza.g's machine (and was gitignored) — exactly as the team reported: 'bot/ was never committed — prod-v7's bot is un-buildable from the repo.' - junction removed; 'ai procurement/' renamed to 'bot/' via git mv (all 41 files keep their history as pure renames) - 'bot/' dropped from .gitignore (voice/ stays ignored — runtime voice notes; bot/.env stays ignored by bot/.gitignore) - compose needs no change: context: ./bot and ./bot/app now resolve to committed files - bot/INTEGRATION-REPORT.md added: full story (problem, root cause, git state, security note on the committed BALE_BOT_TOKEN / AI_API_KEY compose defaults, and usage instructions for the team) Verified: 41 renames staged with zero secret/cache files; voice/ and bot/.env still ignored.
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
"""Status queries: «استعلامهای در انتظار؟»، «کدامها منقضی میشوند؟» …"""
|
||||
import logging
|
||||
from datetime import date, timedelta
|
||||
|
||||
from app.api.client import ApiError
|
||||
from app.texts import ERR_GENERIC, status_report, esc
|
||||
|
||||
logger = logging.getLogger("bot.queries")
|
||||
|
||||
EXPAND = "supplier,line_items"
|
||||
|
||||
|
||||
async def handle_query(ctx, chat_id, user, patch: dict) -> None:
|
||||
query = patch.get("query") or {}
|
||||
kind = query.get("kind") or "pending"
|
||||
supplier_name = query.get("supplier_name")
|
||||
q = supplier_name or query.get("project_name")
|
||||
|
||||
try:
|
||||
if kind == "expiring":
|
||||
quotes, _ = await ctx.api.list_quotes(status="offered", expand=EXPAND,
|
||||
q=q, sort="-quote_date", page_size=100)
|
||||
deadline = date.today() + timedelta(days=query.get("days") or 7)
|
||||
soon = []
|
||||
for quote in quotes:
|
||||
expiry = (quote.get("expiry_date") or "")[:10]
|
||||
if expiry and expiry <= deadline.isoformat():
|
||||
soon.append(quote)
|
||||
soon.sort(key=lambda x: x.get("expiry_date") or "9999")
|
||||
await ctx.send(chat_id, status_report("expiring", soon[:10]))
|
||||
return
|
||||
|
||||
if kind in ("accepted", "arrived", "pending", "offered"):
|
||||
status = "offered" if kind == "pending" else kind
|
||||
quotes, _ = await ctx.api.list_quotes(status=status, expand=EXPAND, q=q,
|
||||
sort="-quote_date", page_size=10)
|
||||
await ctx.send(chat_id, status_report("pending" if kind == "offered" else kind, quotes))
|
||||
return
|
||||
|
||||
# recent / anything else
|
||||
quotes, meta = await ctx.api.list_quotes(expand=EXPAND, q=q, sort="-quote_date", page_size=5)
|
||||
await ctx.send(chat_id, status_report("recent", quotes))
|
||||
except ApiError as exc:
|
||||
await ctx.send(chat_id, ERR_GENERIC.format(detail=esc(exc.message)))
|
||||
Reference in New Issue
Block a user