34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
import modelvault
|
|
|
|
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")
|
|
|
|
counters = modelvault.models.async_collection(db, Counter) # type: ignore
|
|
async with db.transaction():
|
|
counter = await counters.get("visits")
|
|
if counter is None:
|
|
counter = Counter(name="visits", value=0)
|
|
await counters.insert(counter)
|
|
else:
|
|
new_value = counter.value + 1
|
|
await counters.update("visits", {"value": new_value})
|
|
counter.value = new_value # 更新本地对象以便返回
|
|
|
|
return CountGetResponse(name=counter.name, value=counter.value) # type: ignore
|