From f89a031997d7c440a438f3f127f9ceb004a43754 Mon Sep 17 00:00:00 2001 From: Pavel Kirilin Date: Thu, 2 Jul 2026 12:58:06 +0200 Subject: [PATCH] Fixed some backend issues. Signed-off-by: Pavel Kirilin --- ...zangramru_db_2026_07_02t12_57_47_552419.py | 26 +++++++++++++++++++ zangramru/db/models/puzzle.py | 2 +- zangramru/services/dict.csv | 5 ++++ zangramru/web/api/puzzles/views.py | 9 ++++--- 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 zangramru/db/migrations/zangramru_db_2026_07_02t12_57_47_552419.py diff --git a/zangramru/db/migrations/zangramru_db_2026_07_02t12_57_47_552419.py b/zangramru/db/migrations/zangramru_db_2026_07_02t12_57_47_552419.py new file mode 100644 index 0000000..4bb517a --- /dev/null +++ b/zangramru/db/migrations/zangramru_db_2026_07_02t12_57_47_552419.py @@ -0,0 +1,26 @@ +from piccolo.apps.migrations.auto.migration_manager import MigrationManager +from piccolo.columns.column_types import Integer + +ID = "2026-07-02T12:57:47:552419" +VERSION = "1.34.0" +DESCRIPTION = "" + + +async def forwards(): + manager = MigrationManager( + migration_id=ID, app_name="zangramru_db", description=DESCRIPTION + ) + + manager.alter_column( + table_class_name="Puzzle", + tablename="puzzle", + column_name="number", + db_column_name="number", + params={"unique": True}, + old_params={"unique": False}, + column_class=Integer, + old_column_class=Integer, + schema=None, + ) + + return manager diff --git a/zangramru/db/models/puzzle.py b/zangramru/db/models/puzzle.py index ac7b645..0445305 100644 --- a/zangramru/db/models/puzzle.py +++ b/zangramru/db/models/puzzle.py @@ -12,4 +12,4 @@ class Puzzle(Table): solutions = JSON() extra = JSON() definitions = JSON() - number = Integer() + number = Integer(unique=True) diff --git a/zangramru/services/dict.csv b/zangramru/services/dict.csv index 55e8104..611823f 100644 --- a/zangramru/services/dict.csv +++ b/zangramru/services/dict.csv @@ -19,6 +19,11 @@ word|def слово|прогр. то же, что машинное слово; два байта или шестнадцать бит большой|щитовидный вулкан между реками Тихая и Быстрая Хайрюзова на полуострове Камчатка место|разг. то же, что плацента; детское место +фрак|парадный сюртук с вырезанными спереди полами и длинными узкими фалдами сзади +тина|крим. жарг. наркотик метамфетамин +зонт|перен. защита, средство защиты от определённой угрозы +некроз|мед. патологический процесс, выражающийся в местной гибели органов или тканей в живом организме в результате каких-либо повреждений +норка|река в России лицо|перен. лицевая (значимая) часть плоского предмета (листа бумаги, текстильного полотна и т. д.) друг|перен., разг. то, что способствует нормальной жизнедеятельности человека глаз|устар. крим. паспорт diff --git a/zangramru/web/api/puzzles/views.py b/zangramru/web/api/puzzles/views.py index 6bdfc21..80173c3 100644 --- a/zangramru/web/api/puzzles/views.py +++ b/zangramru/web/api/puzzles/views.py @@ -1,4 +1,5 @@ import json +import asyncio from datetime import date, timedelta from fastapi import APIRouter, HTTPException @@ -30,7 +31,7 @@ async def daily_puzzle( # Because they start at one, so we need to subtract one. target_date = date.today() if number is not None: - target_date = settings.start_date + timedelta(days=number - 1) + target_date = settings.start_date + timedelta(days=number) if target_date > date.today(): raise HTTPException( @@ -45,13 +46,15 @@ async def daily_puzzle( if daily_puzzle is not None: board = [list(daily_puzzle.board[i * 4 : i * 4 + 4]) for i in range(4)] return DailyPuzzleDTO( - number=(date.today() - settings.start_date).days, + number=daily_puzzle.number, board=board, solutions=json.loads(daily_puzzle.solutions), extra=json.loads(daily_puzzle.extra), word_defs=json.loads(daily_puzzle.definitions), ) - puzzle = generator.generate(target=10) + + loop = asyncio.get_running_loop() + puzzle = await loop.run_in_executor(None, generator.generate, 10) compressedboard = "".join("".join(row) for row in puzzle.board) await Puzzle( {