35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
from sqlalchemy import select
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from database.models import Setting
|
|
|
|
|
|
_KEY = "CONTENT_REVISION"
|
|
|
|
|
|
async def get_site_revision(session: AsyncSession) -> int:
|
|
result = await session.execute(select(Setting).where(Setting.key == _KEY))
|
|
setting = result.scalar_one_or_none()
|
|
if setting is None:
|
|
return 0
|
|
try:
|
|
return int(setting.value or 0)
|
|
except (TypeError, ValueError):
|
|
return 0
|
|
|
|
|
|
async def bump_site_revision(session: AsyncSession) -> int:
|
|
"""Инкрементирует глобальный счётчик контента сайта. Клиенты опрашивают его
|
|
и инвалидируют свои кэши при изменении значения."""
|
|
result = await session.execute(select(Setting).where(Setting.key == _KEY))
|
|
setting = result.scalar_one_or_none()
|
|
if setting is None:
|
|
session.add(Setting(key=_KEY, value=1, description="Счётчик ревизии контента сайта — инкремент на любом сохранении"))
|
|
return 1
|
|
try:
|
|
current = int(setting.value or 0)
|
|
except (TypeError, ValueError):
|
|
current = 0
|
|
setting.value = current + 1
|
|
return current + 1
|