From e6b60c54bdaa07281c06886ac1de233b107928fd Mon Sep 17 00:00:00 2001 From: MingxuanGame Date: Fri, 3 Oct 2025 12:16:12 +0800 Subject: [PATCH 1/2] fix(migrations): add default for `refresh_token_expires_at` to avoid tokens are cleaned --- ...25-10-02_7fe1319250c5_auth_add_refresh_token_expires_at.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/migrations/versions/2025-10-02_7fe1319250c5_auth_add_refresh_token_expires_at.py b/migrations/versions/2025-10-02_7fe1319250c5_auth_add_refresh_token_expires_at.py index 07f8bc9..fe33923 100644 --- a/migrations/versions/2025-10-02_7fe1319250c5_auth_add_refresh_token_expires_at.py +++ b/migrations/versions/2025-10-02_7fe1319250c5_auth_add_refresh_token_expires_at.py @@ -9,6 +9,7 @@ Create Date: 2025-10-02 10:50:21.169065 from __future__ import annotations from collections.abc import Sequence +from datetime import datetime, timedelta from alembic import op import sqlalchemy as sa @@ -25,6 +26,9 @@ def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### op.add_column("oauth_tokens", sa.Column("refresh_token_expires_at", sa.DateTime(), nullable=True)) op.create_index(op.f("ix_oauth_tokens_expires_at"), "oauth_tokens", ["expires_at"], unique=False) + expires_at = datetime.now() + timedelta(days=15) + expires_at_str = expires_at.strftime('%Y-%m-%d %H:%M:%S') + op.execute(f"UPDATE oauth_tokens SET refresh_token_expires_at = '{expires_at_str}'") op.create_index( op.f("ix_oauth_tokens_refresh_token_expires_at"), "oauth_tokens", ["refresh_token_expires_at"], unique=False ) From 56fcc841963f204a710c2404c895c0584be9b97b Mon Sep 17 00:00:00 2001 From: MingxuanGame Date: Fri, 3 Oct 2025 16:57:56 +0800 Subject: [PATCH 2/2] fix(beatmapset): don't store genre and language into database --- app/database/beatmapset.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/app/database/beatmapset.py b/app/database/beatmapset.py index 8754a02..d2df25e 100644 --- a/app/database/beatmapset.py +++ b/app/database/beatmapset.py @@ -5,7 +5,7 @@ from app.config import settings from app.models.beatmap import BeatmapRankStatus, Genre, Language from app.models.score import GameMode -from .lazer_user import BASE_INCLUDES, User, UserResp +from .user import BASE_INCLUDES, User, UserResp from pydantic import BaseModel, field_validator, model_validator from sqlalchemy import JSON, Boolean, Column, DateTime, Text @@ -132,21 +132,20 @@ class Beatmapset(AsyncAttrs, BeatmapsetBase, table=True): @classmethod async def from_resp_no_save(cls, session: AsyncSession, resp: "BeatmapsetResp", from_: int = 0) -> "Beatmapset": d = resp.model_dump() - update = {} if resp.nominations: - update["nominations_required"] = resp.nominations.required - update["nominations_current"] = resp.nominations.current + d["nominations_required"] = resp.nominations.required + d["nominations_current"] = resp.nominations.current if resp.hype: - update["hype_current"] = resp.hype.current - update["hype_required"] = resp.hype.required + d["hype_current"] = resp.hype.current + d["hype_required"] = resp.hype.required if resp.genre_id: - update["beatmap_genre"] = Genre(resp.genre_id) + d["beatmap_genre"] = Genre(resp.genre_id) elif resp.genre: - update["beatmap_genre"] = Genre(resp.genre.id) + d["beatmap_genre"] = Genre(resp.genre.id) if resp.language_id: - update["beatmap_language"] = Language(resp.language_id) + d["beatmap_language"] = Language(resp.language_id) elif resp.language: - update["beatmap_language"] = Language(resp.language.id) + d["beatmap_language"] = Language(resp.language.id) beatmapset = Beatmapset.model_validate( { **d,