Câmp de imagine de partajare pentru produs, colecție și articol
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
-
tsccurat pe ambele,oxlintcu 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/productscu o cale în forma reală a unui upload → pagina randată întoarce acelog:imageîn toate cele trei limbi;PATCHcunull→ 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, scosshareImagedin 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.png → 404. Preexistent, nu
din acest MR, dar afectează fiecare pagină de produs în două limbi din trei.
Primește issue propriu.