45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
"""消息反馈数据访问层 - Repository"""
|
|
|
|
from typing import Any
|
|
|
|
from sqlalchemy import select
|
|
|
|
from src.storage.postgres.manager import pg_manager
|
|
from src.storage.postgres.models_business import MessageFeedback
|
|
|
|
|
|
class MessageFeedbackRepository:
|
|
"""消息反馈数据访问层"""
|
|
|
|
async def get_by_id(self, id: int) -> MessageFeedback | None:
|
|
"""根据 ID 获取消息反馈"""
|
|
async with pg_manager.get_async_session_context() as session:
|
|
result = await session.execute(select(MessageFeedback).where(MessageFeedback.id == id))
|
|
return result.scalar_one_or_none()
|
|
|
|
async def list_by_message(self, message_id: int) -> list[MessageFeedback]:
|
|
"""获取消息的反馈列表"""
|
|
async with pg_manager.get_async_session_context() as session:
|
|
result = await session.execute(
|
|
select(MessageFeedback).where(MessageFeedback.message_id == message_id)
|
|
)
|
|
return list(result.scalars().all())
|
|
|
|
async def create(self, data: dict[str, Any]) -> MessageFeedback:
|
|
"""创建消息反馈"""
|
|
async with pg_manager.get_async_session_context() as session:
|
|
feedback = MessageFeedback(**data)
|
|
session.add(feedback)
|
|
return feedback
|
|
|
|
async def exists_by_message_and_user(self, message_id: int, user_id: str) -> bool:
|
|
"""检查用户是否已对消息反馈"""
|
|
async with pg_manager.get_async_session_context() as session:
|
|
result = await session.execute(
|
|
select(MessageFeedback.id).where(
|
|
MessageFeedback.message_id == message_id,
|
|
MessageFeedback.user_id == user_id
|
|
)
|
|
)
|
|
return result.scalar_one_or_none() is not None
|