fix: cooldowns

This commit is contained in:
itqop 2025-11-26 07:48:48 +03:00
parent 905f4da2d9
commit 527146e651
1 changed files with 23 additions and 8 deletions

View File

@ -4,6 +4,7 @@ from typing import List, Optional
from uuid import UUID
from sqlalchemy import delete, func, select
from sqlalchemy.dialects.postgresql import insert
from sqlalchemy.ext.asyncio import AsyncSession
from hubgw.models.cooldown import Cooldown
@ -17,16 +18,30 @@ class CooldownsRepository:
self.session = session
async def create(self, request: CooldownCreate) -> Cooldown:
"""Create new cooldown."""
cooldown = Cooldown(
player_uuid=request.player_uuid,
cooldown_type=request.cooldown_type,
expires_at=request.expires_at,
cooldown_seconds=request.cooldown_seconds,
cooldown_metadata=request.metadata,
"""Create or update cooldown (UPSERT)."""
stmt = (
insert(Cooldown)
.values(
player_uuid=request.player_uuid,
cooldown_type=request.cooldown_type,
expires_at=request.expires_at,
cooldown_seconds=request.cooldown_seconds,
cooldown_metadata=request.metadata,
)
.on_conflict_do_update(
index_elements=["player_uuid", "cooldown_type"],
set_={
"expires_at": request.expires_at,
"cooldown_seconds": request.cooldown_seconds,
"metadata": request.metadata,
"updated_at": func.now(),
},
)
.returning(Cooldown)
)
self.session.add(cooldown)
result = await self.session.execute(stmt)
await self.session.commit()
cooldown = result.scalar_one()
await self.session.refresh(cooldown)
return cooldown