This commit is contained in:
jxxghp
2024-03-15 18:17:04 +08:00
parent ae6440bd0a
commit 3f88907ba9
3 changed files with 52 additions and 21 deletions

View File

@ -1,14 +1,18 @@
import json
from typing import Union, Any, List
from fastapi import APIRouter, BackgroundTasks, Depends
from fastapi import Request
from sqlalchemy.orm import Session
from starlette.responses import PlainTextResponse
from app import schemas
from app.chain.message import MessageChain
from app.core.config import settings
from app.core.security import verify_token
from app.db import get_db
from app.db.models import User
from app.db.models.message import Message
from app.db.systemconfig_oper import SystemConfigOper
from app.db.userauth import get_current_active_superuser
from app.log import logger
@ -52,6 +56,25 @@ async def web_message(text: str, current_user: User = Depends(get_current_active
return schemas.Response(success=True)
@router.get("/web", summary="获取WEB消息", response_model=List[dict])
def get_web_message(_: schemas.TokenPayload = Depends(verify_token),
db: Session = Depends(get_db),
page: int = 1,
count: int = 20):
"""
获取WEB消息列表
"""
ret_messages = []
messages = Message.list_by_page(db, page=page, count=count)
for message in messages:
try:
ret_messages.append(message.to_dict())
except Exception as e:
logger.error(f"获取WEB消息列表失败: {str(e)}")
continue
return ret_messages
def wechat_verify(echostr: str, msg_signature: str,
timestamp: Union[str, int], nonce: str) -> Any:
"""

View File

@ -1,5 +1,6 @@
import json
import queue
import time
from typing import Optional, Any
from app.utils.singleton import Singleton
@ -24,8 +25,10 @@ class MessageHelper(metaclass=Singleton):
else:
if isinstance(message, str):
self.user_queue.put(message)
elif hasattr(message, "dict"):
self.user_queue.put(json.dumps(message.dict()))
elif hasattr(message, "to_dict"):
content = message.to_dict()
content['date'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
self.user_queue.put(json.dumps(content))
def get(self, role: str = "sys") -> Optional[str]:
"""

View File

@ -17,18 +17,20 @@ class CommingMessage(BaseModel):
channel: Optional[MessageChannel] = None
# 消息体
text: Optional[str] = None
# 时间
date: Optional[str] = None
# 消息方向
action: Optional[int] = 0
def dict(self):
def to_dict(self):
"""
转换为字典
"""
return {
"userid": self.userid,
"username": self.username,
"channel": self.channel.value if self.channel else None,
"text": self.text,
"action": 0
}
items = self.dict()
for k, v in items.items():
if isinstance(v, MessageChannel):
items[k] = v.value
return items
class Notification(BaseModel):
@ -49,18 +51,21 @@ class Notification(BaseModel):
link: Optional[str] = None
# 用户ID
userid: Optional[Union[str, int]] = None
# 时间
date: Optional[str] = None
# 消息方向
action: Optional[int] = 1
def dict(self):
return {
"channel": self.channel.value if self.channel else None,
"mtype": self.mtype.value if self.mtype else None,
"title": self.title,
"text": self.text,
"image": self.image,
"link": self.link,
"userid": self.userid,
"action": 1
}
def to_dict(self):
"""
转换为字典
"""
items = self.dict()
for k, v in items.items():
if isinstance(v, MessageChannel) \
or isinstance(v, NotificationType):
items[k] = v.value
return items
class NotificationSwitch(BaseModel):