From 637ebf71248f534d22e4b62189a9d50fdb8b6072 Mon Sep 17 00:00:00 2001 From: solevis Date: Tue, 14 Oct 2025 18:47:03 +0200 Subject: [PATCH 1/4] Fix research module name and config typo Files were renamed and references updated to fix typos in "research" and "ENABLE_PROFILER". Also added production warning for default secret key. --- backend/app/__init__.py | 2 +- backend/app/blueprints/api.py | 2 +- backend/app/commands/cache.py | 2 +- backend/app/commands/importer.py | 2 +- backend/app/config.py | 3 ++- backend/app/services/base.py | 4 ++-- backend/app/services/record_details.py | 2 +- backend/app/services/{reasearch.py => research.py} | 0 backend/tests/test_database.py | 2 +- 9 files changed, 10 insertions(+), 9 deletions(-) rename backend/app/services/{reasearch.py => research.py} (100%) diff --git a/backend/app/__init__.py b/backend/app/__init__.py index 7a144ad..85ad4f1 100644 --- a/backend/app/__init__.py +++ b/backend/app/__init__.py @@ -78,7 +78,7 @@ def create_app(test_config: dict | None = None) -> Flask: else: app.logger.setLevel(logging.INFO) - if app.config["ENALBE_PROFILER"]: + if app.config["ENABLE_PROFILER"]: from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app) diff --git a/backend/app/blueprints/api.py b/backend/app/blueprints/api.py index 360a207..9882227 100644 --- a/backend/app/blueprints/api.py +++ b/backend/app/blueprints/api.py @@ -18,7 +18,7 @@ from app.services.pixyship import PixyShipService from app.services.player import PlayerService from app.services.prestige import PrestigeService -from app.services.reasearch import ResearchService +from app.services.research import ResearchService from app.services.room import RoomService from app.services.ship import ShipService from app.services.skin import SkinService diff --git a/backend/app/commands/cache.py b/backend/app/commands/cache.py index 78e8880..25a6704 100644 --- a/backend/app/commands/cache.py +++ b/backend/app/commands/cache.py @@ -13,7 +13,7 @@ from app.services.item import ItemService from app.services.market import MarketService from app.services.missile import MissileService -from app.services.reasearch import ResearchService +from app.services.research import ResearchService from app.services.room import RoomService from app.services.ship import ShipService from app.services.skin import SkinService diff --git a/backend/app/commands/importer.py b/backend/app/commands/importer.py index 7d039e5..f7a0e1e 100644 --- a/backend/app/commands/importer.py +++ b/backend/app/commands/importer.py @@ -25,7 +25,7 @@ from app.services.missile import MissileService from app.services.player import PlayerService from app.services.prestige import PrestigeService -from app.services.reasearch import ResearchService +from app.services.research import ResearchService from app.services.room import RoomService from app.services.ship import ShipService from app.services.skin import SkinService diff --git a/backend/app/config.py b/backend/app/config.py index ff25fc2..13243e7 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -21,6 +21,7 @@ class DefaultConfig: CHANGES_MAX_ASSETS = 5000 # Generated with `python -c 'import os; print(os.urandom(16))'`, must be kept secret + # Warning: never use this key value in production! SECRET_KEY = "dev" # Generated from PSS website (only available for Savy trusted third-party developers), @@ -52,4 +53,4 @@ class DefaultConfig: DONATION_URL = "https://example.donate/" # Profiler - ENALBE_PROFILER = False + ENABLE_PROFILER = False diff --git a/backend/app/services/base.py b/backend/app/services/base.py index 16dbc79..b81508e 100644 --- a/backend/app/services/base.py +++ b/backend/app/services/base.py @@ -16,9 +16,9 @@ from app.services.pixyship import PixyShipService from app.services.player import PlayerService from app.services.prestige import PrestigeService - from app.services.reasearch import ResearchService from app.services.record import RecordService from app.services.record_details import RecordDetailsService + from app.services.research import ResearchService from app.services.room import RoomService from app.services.ship import ShipService from app.services.skin import SkinService @@ -88,7 +88,7 @@ def item_service(self) -> ItemService: @cached_property def research_service(self) -> ResearchService: """Get research service.""" - from app.services.reasearch import ResearchService + from app.services.research import ResearchService return ResearchService() diff --git a/backend/app/services/record_details.py b/backend/app/services/record_details.py index 1c5098b..0487c88 100644 --- a/backend/app/services/record_details.py +++ b/backend/app/services/record_details.py @@ -6,7 +6,7 @@ from app.services.craft import CraftService from app.services.item import ItemService from app.services.missile import MissileService -from app.services.reasearch import ResearchService +from app.services.research import ResearchService from app.services.room import RoomService from app.services.ship import ShipService from app.services.skin import SkinService diff --git a/backend/app/services/reasearch.py b/backend/app/services/research.py similarity index 100% rename from backend/app/services/reasearch.py rename to backend/app/services/research.py diff --git a/backend/tests/test_database.py b/backend/tests/test_database.py index 298de36..8870c60 100644 --- a/backend/tests/test_database.py +++ b/backend/tests/test_database.py @@ -6,7 +6,7 @@ from app.services.market import MarketService from app.services.missile import MissileService from app.services.player import PlayerService -from app.services.reasearch import ResearchService +from app.services.research import ResearchService from app.services.room import RoomService from app.services.ship import ShipService from app.services.sprite import SpriteService From 1cc83f1ce9eb0f6ca8dd7c27f2efd5a66a0ed66a Mon Sep 17 00:00:00 2001 From: solevis Date: Tue, 14 Oct 2025 18:47:11 +0200 Subject: [PATCH 2/4] Add typecheck command and combined check target --- backend/justfile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/backend/justfile b/backend/justfile index afda07c..a62f54b 100644 --- a/backend/justfile +++ b/backend/justfile @@ -26,4 +26,11 @@ test: # Run linter with ruff lint: - uv run ruff check + uv run ruff check --fix + +# Type check with mypy +typecheck: + uv run mypy app/ + +# Run all checks +check: lint typecheck test From 1ceefc7fe9f168faf6ed94b4f54e5dfe20e337fb Mon Sep 17 00:00:00 2001 From: solevis Date: Tue, 14 Oct 2025 23:05:20 +0200 Subject: [PATCH 3/4] Enable debug mode in Flask `run` target in justfile --- backend/justfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/justfile b/backend/justfile index a62f54b..1853ae7 100644 --- a/backend/justfile +++ b/backend/justfile @@ -10,7 +10,7 @@ sync: # Run server run: - uv run flask run + uv run flask run --debug # Generate pip-compatible requirements.lock for production lock: From abefe3738bb04498c482166ff2f3f4a5d44ab2ef Mon Sep 17 00:00:00 2001 From: solevis Date: Tue, 14 Oct 2025 23:07:02 +0200 Subject: [PATCH 4/4] Remove duplicate skins by name in `api_skins` endpoint --- backend/app/blueprints/api.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/app/blueprints/api.py b/backend/app/blueprints/api.py index 9882227..95819c4 100644 --- a/backend/app/blueprints/api.py +++ b/backend/app/blueprints/api.py @@ -315,13 +315,20 @@ def api_rooms() -> Response: @cache.cached() def api_skins() -> Response: """Return all skins.""" - # keep only skins with sprite_type = "Interior" skin_service = SkinService() - skins = [skin for skin in skin_service.skins.values() if skin["sprite_type"] == "Interior"] + skins = skin_service.skins + + # Remove duplicate skins with the same name + skins_filtered = {} + known_names = set() + for skin_id, skin in skins.items(): + if skin["name"] not in known_names: + skins_filtered[skin_id] = skin + known_names.add(skin["name"]) return jsonify( { - "data": skins, + "data": skins_filtered, "status": "success", "current_time": time.time(), },