Косметические правки по фронту, раскатка приложения в продакшн версии, исправление бага с созданием контакта

This commit is contained in:
mi
2026-09-03 11:34:25 +03:00
parent f989097484
commit 465a70d488
18 changed files with 528 additions and 139 deletions
@@ -114,6 +114,7 @@ class UserDto(BaseModel):
model_config = ConfigDict(extra="forbid")
id: uuid.UUID
display_name: str = Field(min_length=1, max_length=255)
phone: str | None = Field(default=None, min_length=1, max_length=32)
class FileDto(BaseModel):
@@ -697,7 +698,7 @@ def create_app(settings: Settings | None = None) -> FastAPI:
"Idempotency-Key must equal message_id",
),
)
body = dto.model_dump(mode="json")
body = dto.model_dump(mode="json", exclude_none=True)
fp = canonical_fingerprint(body)
async with request.app.state.sessions() as session:
row = await session.scalar(
@@ -992,17 +993,11 @@ def extract_delivery(result: dict[str, Any]) -> tuple[int | None, str | None, st
)
async def deliver_outbound(app: FastAPI, row_id: uuid.UUID) -> dict[str, Any]:
async with app.state.sessions() as session:
row = await session.get(OutboundMessage, row_id)
portal = await active_portal(session)
if not row or not portal:
raise RuntimeError("portal_not_installed")
payload = row.payload_json
def imconnector_send_fields(connector: str, line: str, payload: dict[str, Any]) -> dict[str, Any]:
message = payload["message"]
fields: dict[str, Any] = {
"CONNECTOR": app.state.settings.bitrix_connector_id,
"LINE": app.state.settings.bitrix_open_line_id,
"CONNECTOR": connector,
"LINE": line,
"MESSAGES[0][user][id]": payload["user"]["id"],
"MESSAGES[0][user][name]": payload["user"]["display_name"],
"MESSAGES[0][message][id]": payload["message_id"],
@@ -1010,10 +1005,28 @@ async def deliver_outbound(app: FastAPI, row_id: uuid.UUID) -> dict[str, Any]:
"MESSAGES[0][message][text]": message["text"],
"MESSAGES[0][chat][id]": payload["external_chat_id"],
}
if message["files"]:
phone = payload["user"].get("phone")
if phone:
fields["MESSAGES[0][user][phone]"] = phone
if message.get("files"):
file = message["files"][0]
fields["MESSAGES[0][message][files][0][url]"] = file["download_url"]
fields["MESSAGES[0][message][files][0][name]"] = file["name"]
return fields
async def deliver_outbound(app: FastAPI, row_id: uuid.UUID) -> dict[str, Any]:
async with app.state.sessions() as session:
row = await session.get(OutboundMessage, row_id)
portal = await active_portal(session)
if not row or not portal:
raise RuntimeError("portal_not_installed")
payload = row.payload_json
fields = imconnector_send_fields(
app.state.settings.bitrix_connector_id,
app.state.settings.bitrix_open_line_id,
payload,
)
result = await app.state.bitrix.call(portal, "imconnector.send.messages", fields)
chat_id, session_id, bitrix_message_id = extract_delivery(result)
response = {