Skip to content

recorderFriendCode w payloadzie v2 (schemaVersion 3.0.0) i w D1 #377

Closed

Description

@quarties

Payload gry z moda dostaje nowe pole recorderFriendCode: friend code maszyny, która nagrała mecz (Recorder). Recorder to nie zawsze host lobby: host może się zmienić w trakcie meczu, a obserwator może wysłać swoją kopię.

Gałąź: feat/recorder-friend-code od main. Merge i deploy tylko w oknie przełączenia, razem z hostem 1.2.0. Zod ma .strict(), więc nowy host i stary serwer dają 400, a stary host i nowy serwer też dają 400.

Co zrobić

  1. gamesV2.ts: schemaVersion: z.literal('3.0.0'), recorderFriendCode: z.string().min(1). Pole jest wymagane od razu. Brak pola albo null daje 400. Endpoint zostaje /api/v2/games.
  2. D1, jedna migracja:
  3. createGameV2.ts, reguła dla recorderPlayerId:
    1. Gracz z payloadu ma ten sam friend code: weź jego Player.id (dopasowanie przez hash PUID albo nazwę już jest).
    2. Inaczej szukaj w players po friendCode, bez usuniętych. Dokładnie jeden wiersz: weź jego id.
    3. Zero albo kilka wierszy: NULL. Upload działa dalej.
  4. Widoczność: oba pola są tylko w D1. Strona i odpowiedź POST ich nie pokazują (zasada z Player identity: the null case, merges, and what leaks publicly #287). Admin czyta je przez wrangler d1 execute.
  5. HostClient.tsx (ręczne wysłanie przez admina) musi przyjąć payload 3.0.0. Gra z okna przełączenia zostaje na dysku hosta. Admin dodaje pola ręcznie i wysyła ją przez tę stronę.

Konflikt

Draft PR #346 zmienia createGameV2.ts (usuwa blok lista_cweli) i schema.prisma. Konflikt jest mały. Rozwiąż go przy rebase.

Gotowe, gdy

  • gamesV2.test.ts: brak pola, null i schemaVersion 2.0.0 dają błąd.
  • Test createGameV2 dla trzech przypadków reguły recorderPlayerId.
  • Test: getGameData nie zwraca żadnego z dwóch pól.
  • npm run typecheck i npm test przechodzą. Migracja działa lokalnie (db:migrate:apply:local).

Activity

  1. quarties commented on Oct 21, 2026

    @quarties
    CollaboratorAuthor

    Commity: 62607ce, 34862df (test zapytania z review), e736797 (klient 1.3.0 w manifeście). Merge w #383 (fa282f7), deploy prod OK, migracja 0013 na D1 prod. npm test: 157 passed. Test lokalny: payload 3.0.0 z prawdziwej gry daje 201, recorderPlayerId wskazuje gracza z tym friend code. Payload 2.0.0 daje 400. Strona gry nie pokazuje friend code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestready-for-agentFully specified, ready for an AFK agent

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions