Skip to content

Câmp de imagine de partajare pentru produs, colecție și articol

Vitalie requested to merge 8_share-image into main

Ultimul punct din #8 (closed). Prima parte a plecat cu !22 (merged).

De ce

Cardul pe care îl vede cineva când primește linkul unui produs e poza de pe pagină. Acolo e corectă; în card nu. Cardul are raportul 1,91:1, iar poza de produs e portret (800×869), deci intră tăiată prin mijloc — un Hypervolt rămâne fără cap și fără mâner. Redimensionarea pozei de pe pagină nu e soluția: pe pagină e bună așa.

Ce s-a făcut

Câmp nou shareImage pe Product, Collection și HyperhubArticle, String?, cu migrare proprie. Null peste tot, deci cele 61 de produse, 11 colecții și 72 de articole existente păstrează exact comportamentul de azi.

Citit doar la randare (page-meta.ts), cu rezervă pe poza paginii. Nu intră în formele publice de storefront — magazinul nu are ce face cu el.

Scris din panou, pe cele trei formulare, cu același tipar ca hoverImage: încărcare, previzualizare, golire. Panoul e doar în română (en și ru n-au deloc secțiunea admin), deci cele trei etichete și hint-uri intră în ro.

Migrarea se aplică singură la deploy: backend/Dockerfile:64 rulează prisma migrate deploy înainte de pornire. Coloana e nullable, deci containerul vechi continuă să funcționeze în timpul înlocuirii.

Verificare

  • tsc curat pe ambele, oxlint cu singurul avertisment preexistent, 443 de teste backend (13 noi), 196 frontend, ambele build-uri.
  • Migrarea testată întâi pe o copie a bazei, rulată de două ori (a doua nu mai are ce aplica), datele intacte după: 61 / 11 / 72 / 1. Apoi aplicată pe dev.db, cu aceeași numărătoare după.
  • Probă capăt-la-capăt, pe o copie a bazei: POST /api/admin/products cu o cale în forma reală a unui upload → pagina randată întoarce acel og:image în toate cele trei limbi; PATCH cu null → revine la poza produsului.
  • Golirea verificată separat pe fiecare din cele trei drumuri, pentru că sunt drumuri diferite. Cel al colecțiilor merge prin ...rest, adică nu are cod propriu — acolo testul e singura protecție.
  • Testele verificate prin mutație: stricat page-meta, stricat golirea la articol, scos shareImage din spread-ul colecției — pică exact testele așteptate, apoi reparat.

Reparat pe drum

shareImage ajunsese pe Collection sub separatorul „Brand collections only", adică spunea că e doar pentru colecțiile de brand — invers față de ce livrează restul: validarea, tipul, formularul și un test dedicat îl tratează ca pe un câmp al oricărei colecții. Mutat deasupra separatorului.

Comentariul de lângă og:image:width/height spunea că dimensiunile se declară doar pentru card „pentru că o poză de pagină are altă mărime". Cu shareImage în joc, motivul adevărat e altul și e scris acum: se declară doar pentru fișierul pe care îl controlează repo-ul și l-a măsurat. O poză încărcată din panou e cerută la 1200×630, dar nimic nu verifică asta încă — vezi #29 (closed).

Găsit pe drum, nu reparat aici

Pe /en și /ru, datele structurate ale fiecărui produs conțin o adresă de imagine cu prefixul de limbă lipit pe ea: https://hyperice.md/en/products/shop/hypervolt-3.png404. Preexistent, nu din acest MR, dar afectează fiecare pagină de produs în două limbi din trei. Primește issue propriu.

Merge request reports