Files

43 lines
1.3 KiB
Python
Raw Permalink Normal View History

2026-07-23 17:45:44 +08:00
from sqlalchemy import select, update
2026-07-21 15:43:39 +08:00
from chongming_worker import rpc_method
from ..models.pydantic import CountGetResponse
from ..models.counter import Counter
@rpc_method(
subject="example.count",
method="GET",
summary="Increment and get counter value",
response_model=CountGetResponse, # 需要定义 CountResponse
)
async def count_get() -> CountGetResponse:
from ..global_var import db
if db is None:
raise RuntimeError("Database not initialized")
2026-07-23 17:45:44 +08:00
async with db.get_session() as session:
statement = select(Counter).where(Counter.name == "visits") # type: ignore
result = await session.execute(statement)
counter = result.scalar_one_or_none()
2026-07-21 15:43:39 +08:00
if counter is None:
2026-07-23 17:45:44 +08:00
counter = Counter(name="visits", value=1)
session.add(counter)
await session.commit()
return CountGetResponse(name="visits", value=1)
2026-07-21 15:43:39 +08:00
else:
new_value = counter.value + 1
2026-07-23 17:45:44 +08:00
update_stmt = (
update(Counter)
.where(Counter.name == "visits") # type: ignore
.values(value=new_value)
)
await session.execute(update_stmt)
await session.commit()
return CountGetResponse(name="visits", value=new_value)