From 0c886205febcda68f9fb5c8519cbca43c6893312 Mon Sep 17 00:00:00 2001 From: itqop Date: Thu, 7 Mar 2024 16:33:01 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=80=20Added=20delete=20tab=20expiry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/handlers.py | 1 + db/database.py | 17 ++++++++++++++--- db/schemas/RequestSchema.py | 6 +++--- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/handlers.py b/app/handlers.py index a555f17..6aea2c8 100644 --- a/app/handlers.py +++ b/app/handlers.py @@ -55,6 +55,7 @@ async def grant_tab(request: RequestSchema): async def get_profile(schema: RequestSchema) -> UserSchema: + await database.delete_expired_tab_users() uuid = await database.get_uuid_by_username(schema) if not uuid: raise HTTPException(status_code=404, detail="User not found") diff --git a/db/database.py b/db/database.py index 7a3fe5f..3bc8609 100644 --- a/db/database.py +++ b/db/database.py @@ -1,4 +1,4 @@ -from sqlalchemy import select +from sqlalchemy import select, delete from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy.orm import sessionmaker from db import LuckpermsPlayer, LitebansBan, LuckpermsUserPermission, TabUser @@ -6,7 +6,7 @@ from db.schemas import MySQLConfig, UserSchema, RequestSchema, TabSchema from sqlalchemy.ext.asyncio import AsyncSession from aiocache import cached, SimpleMemoryCache from aiocache.serializers import PickleSerializer - +import datetime class Database: def __init__(self, uri: MySQLConfig): @@ -91,4 +91,15 @@ class Database: if not ban.scalar(): return True else: - return False \ No newline at end of file + return False + + async def delete_expired_tab_users(self): + async with self.AsyncSessionLocal() as session: + async with session.begin(): + current_timestamp = int((datetime.datetime.utcnow()).timestamp()) + await session.execute( + delete(TabUser) + .where(TabUser.expiry < current_timestamp) + .where(TabUser.expiry != 0) + ) + await session.commit() \ No newline at end of file diff --git a/db/schemas/RequestSchema.py b/db/schemas/RequestSchema.py index 9886d4c..49c6e49 100644 --- a/db/schemas/RequestSchema.py +++ b/db/schemas/RequestSchema.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel, PositiveInt, computed_field, field_validator +from pydantic import BaseModel, computed_field, field_validator, NonNegativeInt from .TabSchema import TabSchema import datetime import re @@ -6,7 +6,7 @@ import re class RequestSchema(BaseModel): username: str - expiry: PositiveInt = 1 + expiry: NonNegativeInt = 1 tab: TabSchema = TabSchema() @field_validator('username') @@ -15,7 +15,7 @@ class RequestSchema(BaseModel): raise ValueError("Invalid username format") return value - @computed_field(return_type=PositiveInt) + @computed_field(return_type=NonNegativeInt) def validated_expiry(self): if self.expiry > 10**5: try: