64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Optional
|
|
|
|
from fastapi import APIRouter
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.services.login_service import login_service
|
|
from app.services.send_service import send_service
|
|
|
|
router = APIRouter(prefix="/v1/wechat-personal", tags=["wechat-personal"])
|
|
|
|
|
|
class StartLoginRequest(BaseModel):
|
|
account_id: str = Field(..., description="渠道账号唯一标识")
|
|
account_name: Optional[str] = Field(None, description="账号显示名称")
|
|
tenant_code: str = Field("default", description="业务系统租户编码")
|
|
|
|
|
|
class LoginConfirmRequest(BaseModel):
|
|
tenant_code: str = Field("default", description="业务系统租户编码")
|
|
|
|
|
|
class SendTextRequest(BaseModel):
|
|
account_id: str
|
|
conversation_id: str = Field(..., description="目标会话/群 ID")
|
|
text: str = Field(..., min_length=1, description="消息内容")
|
|
|
|
|
|
class SendImageRequest(BaseModel):
|
|
account_id: str
|
|
conversation_id: str
|
|
image_url: str
|
|
|
|
|
|
@router.post("/login/start")
|
|
def start_login(request: StartLoginRequest):
|
|
return login_service.start_login(request.account_id, request.account_name, request.tenant_code)
|
|
|
|
|
|
@router.get("/login/{account_id}/status")
|
|
def login_status(account_id: str):
|
|
return login_service.get_status(account_id)
|
|
|
|
|
|
@router.post("/login/{account_id}/confirm")
|
|
def confirm_login(account_id: str, request: LoginConfirmRequest):
|
|
return login_service.confirm_login(account_id, request.tenant_code)
|
|
|
|
|
|
@router.post("/login/{account_id}/expire")
|
|
def expire_login(account_id: str, request: LoginConfirmRequest):
|
|
return login_service.expire_login(account_id, request.tenant_code)
|
|
|
|
|
|
@router.post("/send/text")
|
|
def send_text(request: SendTextRequest):
|
|
return send_service.send_text(request.account_id, request.conversation_id, request.text)
|
|
|
|
|
|
@router.post("/send/image")
|
|
def send_image(request: SendImageRequest):
|
|
return send_service.send_image(request.account_id, request.conversation_id, request.image_url)
|