refactor(llm): centralize usage persistence
This commit is contained in:
@@ -24,6 +24,7 @@ from backend.features.accounts.models import (
|
||||
UserRecord,
|
||||
)
|
||||
from backend.features.accounts.repository import AccountRepository
|
||||
from backend.llm.repository import LLMRepository
|
||||
from backend.security import PasswordHasher, PasswordPolicyError, SecretCipher
|
||||
|
||||
USERNAME_PATTERN = re.compile(r"[A-Za-z0-9_\-\u4e00-\u9fff]{3,30}")
|
||||
@@ -281,14 +282,17 @@ class MembershipService:
|
||||
"3_years": 36,
|
||||
}
|
||||
|
||||
def __init__(self, database: Database, repository: AccountRepository) -> None:
|
||||
def __init__(
|
||||
self, database: Database, repository: AccountRepository, usage: LLMRepository
|
||||
) -> None:
|
||||
self._database = database
|
||||
self._repository = repository
|
||||
self._usage = usage
|
||||
|
||||
def view_for(self, principal: Principal) -> MembershipView:
|
||||
today = datetime.now(SHANGHAI).date().isoformat()
|
||||
with self._database.read() as connection:
|
||||
used_today = self._repository.usage_today(connection, principal.user.id, today)
|
||||
used_today = self._usage.usage_today(connection, principal.user.id, today)
|
||||
return membership_view(principal.user, principal.membership, used_today, now_utc())
|
||||
|
||||
def can_use_smart_features(self, principal: Principal) -> bool:
|
||||
@@ -299,7 +303,7 @@ class MembershipService:
|
||||
now = now_utc()
|
||||
with self._database.read() as connection:
|
||||
accounts = self._repository.list_memberships(connection)
|
||||
usage = self._repository.usage_for_users(connection, today)
|
||||
usage = self._usage.usage_for_users(connection, today)
|
||||
return tuple(
|
||||
MembershipAccountView(
|
||||
account.user,
|
||||
@@ -317,7 +321,7 @@ class MembershipService:
|
||||
today = datetime.now(SHANGHAI).date().isoformat()
|
||||
with self._database.read() as connection:
|
||||
account = self._repository.get_membership_account(connection, user_id)
|
||||
used_today = self._repository.usage_today(connection, user_id, today)
|
||||
used_today = self._usage.usage_today(connection, user_id, today)
|
||||
if account is None:
|
||||
raise BusinessError("account_not_found", "账号不存在。")
|
||||
return MembershipAccountView(
|
||||
|
||||
Reference in New Issue
Block a user