46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""
|
|
模型使用日志 CRUD 操作
|
|
======================
|
|
|
|
仅保留使用日志功能,模型配置已迁移到 YAML 文件。
|
|
"""
|
|
|
|
from sqlalchemy import func, select
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.crud.base import CRUDBase
|
|
from app.models.model_usage import ModelUsageLog
|
|
|
|
|
|
class ModelUsageLogCRUD(CRUDBase[ModelUsageLog]):
|
|
"""模型使用日志 CRUD"""
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__(ModelUsageLog)
|
|
|
|
async def get_daily_cost(self, db: AsyncSession, *, date: str) -> float:
|
|
"""获取某日总成本"""
|
|
result = await db.execute(
|
|
select(func.sum(ModelUsageLog.cost_cny)).where(
|
|
func.date(ModelUsageLog.created_at) == date
|
|
)
|
|
)
|
|
return result.scalar() or 0.0
|
|
|
|
async def get_by_user(
|
|
self, db: AsyncSession, *, user_id: str, skip: int = 0, limit: int = 100
|
|
) -> list[ModelUsageLog]:
|
|
"""获取用户的使用日志"""
|
|
result = await db.execute(
|
|
select(ModelUsageLog)
|
|
.where(ModelUsageLog.user_id == user_id)
|
|
.order_by(ModelUsageLog.created_at.desc())
|
|
.offset(skip)
|
|
.limit(limit)
|
|
)
|
|
return list(result.scalars().all())
|
|
|
|
|
|
# 导出实例
|
|
model_usage_log = ModelUsageLogCRUD()
|