1745 wystapien w 291 plikach (backend, scripts, mobile). Dominowal jeden ksztalt, ' — ' laczace zdania, wiec poszedl przecinek; myslnik otwierajacy mysl zdjety; zakresy 0–5 i A–Z na dywiz. Podzial komentarz/kod robil skaner stanow, nie regex, zeby nie ruszyc myslnika stojacego w stringu albo w wyrazeniu regularnym. Potwierdzone maszynowo: po wycieciu komentarzy z wersji HEAD i z dysku obie sa identyczne we wszystkich 291 plikach, czyli poza komentarzami nie zmienilo sie nic. 233 pliki .py parsuja sie bez bledu, tsc ma te same 11 bledow w tych samych 3 plikach co przed zmiana. Dwie rzeczy wymagaly poprawki po automacie: wyrownane listy definicji, gdzie myslnik byl separatorem kolumny (37 miejsc, kolumna przywrocona), i trzy przeniesienia mysli do nowej linii, gdzie zostawal wiszacy przecinek na poczatku (poprawione recznie). Bundla nie republikuje: Hermes i tak nie niesie komentarzy, wiec dla uzytkownika to zero zmiany. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
29 lines
1.2 KiB
Python
29 lines
1.2 KiB
Python
"""Per-device scoping stanu usera (favorites / play-progress / blacklisty).
|
|
|
|
Publiczna instancja Goon nie ma kont. Wcześniej cały stan usera był GLOBALNY w DB →
|
|
nowi użytkownicy widzieli/nadpisywali ulubione, watched-badge i blacklisty Jana
|
|
(bug 2026-06-08). Apka generuje raz UUID instalacji (SecureStore) i wysyła go w
|
|
nagłówku `X-Device-Id`; backend scope'uje wszystkie tabele stanu po `device_id`.
|
|
|
|
Stare wiersze (sprzed migracji) mają `device_id = LEGACY_DEVICE`. Klient bez nagłówka
|
|
(stara wersja apki przed OTA) trafia również na LEGACY_DEVICE, czyli dostaje dawną
|
|
współdzieloną pulę, dopóki nie zaktualizuje bundla. Endpoint `/me/adopt-legacy`
|
|
przepina LEGACY rows na konkretne device (Jan robi to raz po update).
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from typing import Annotated
|
|
|
|
from fastapi import Header
|
|
|
|
# Sentinel dla wierszy sprzed device-scopingu + klientów bez nagłówka.
|
|
LEGACY_DEVICE = "legacy-shared"
|
|
|
|
|
|
def get_device_id(
|
|
x_device_id: Annotated[str | None, Header(alias="X-Device-Id")] = None,
|
|
) -> str:
|
|
"""Zwraca device_id z nagłówka `X-Device-Id` (przycięty do 64 znaków).
|
|
Brak/empty → LEGACY_DEVICE (kompat ze starymi klientami)."""
|
|
v = (x_device_id or "").strip()
|
|
return v[:64] if v else LEGACY_DEVICE
|