batchCooking/apps/api/src/modules
Nicolas 3abb7217dd
All checks were successful
CI / lint (push) Successful in 2m59s
CI / build (push) Successful in 3m4s
CI / intent-service-test (push) Successful in 4m46s
CI / e2e (push) Successful in 9m33s
CI / test (push) Successful in 17m20s
CI / build-android (push) Has been skipped
feat(mobile): proxie le telechargement de l'APK via l'API (pas de CORS)
Suite au fix de /releases/latest (precedent), l'utilisateur voulait un
lien qui declenche le telechargement du .apk directement, sans quitter
l'appli web. Verifie en direct : fetch("https://git.dev.kyuno.fr/api/...")
depuis le navigateur echoue avec "Failed to fetch" (confirme via un essai
en mode no-cors : la requete reseau aboutit bien, seule la reponse est
bloquee) — Forgejo n'envoie aucun header CORS sur son API Releases,
publique ou non. Ca ne concerne pas que la page d'accueil : le hook de
verification de mise a jour (#66, useAppUpdateCheck) faisait exactement le
meme fetch cross-origin depuis la WebView native, et echouait donc tout
aussi silencieusement en production sans que personne ne puisse s'en
rendre compte (le hook avale toute erreur reseau par design).

Ajoute un petit module apps/api/src/modules/mobile/ (2 routes publiques,
aucune ne touche la base de donnees) :
- GET /mobile/latest-release -> { version } (proxy JSON, remplace le fetch
  direct de useAppUpdateCheck)
- GET /mobile/download -> redirection 302 vers l'asset .apk reel de la
  derniere release (ou vers la page /releases/latest en repli si
  Forgejo est injoignable ou qu'aucun .apk n'est encore attache)

Cote frontend : LandingPage.tsx et UpdateBanner.tsx pointent maintenant
vers ce proxy (`${API_BASE_URL}/mobile/download`, target="_blank") au lieu
d'une URL Forgejo directe — un clic, telechargement immediat, jamais de
navigation hors de l'appli. useAppUpdateCheck.ts appelle desormais
apiClient.getLatestMobileVersion() au lieu d'un fetch direct.

Verifie en local (sans Postgres, ces routes n'en ont pas besoin) contre
les vraies donnees Forgejo :
  GET /mobile/latest-release -> {"version":"v0.2.0"}
  GET /mobile/download -> 302, Location vers le vrai .apk signe

pnpm lint / tsc (api + web) / pnpm --filter web build : tous verts. Le
scenario Cypress "offers the Android app download" echoue encore en local
(meme souci pre-existant deja documente sur la PR precedente, confirme
independant du code par CI reel) ; mis a jour pour asserter le nouveau
href relatif.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-06 23:40:06 +02:00
..
admin feat(api): CRUD admin des scénarios de didacticiel (#44) 2026-09-06 05:39:37 +02:00
auth feat(auth): accepte un jeton Bearer en repli du cookie de session 2026-09-06 02:47:57 +02:00
cooking-session feat(planning): attribution et jet des restes + exclusion liste de courses / cuisine 2026-09-05 23:53:25 +02:00
house fix: corrige les bugs ouverts du repo (import TheMealDB, sidebar mobile) + doc (#59) 2026-08-21 12:16:22 +02:00
internal feat(admin): monitoring des microservices + heartbeat du worker LLM 2026-08-28 23:36:31 +02:00
mobile feat(mobile): proxie le telechargement de l'APK via l'API (pas de CORS) 2026-09-06 23:40:06 +02:00
planning feat(planning): attribution et jet des restes + exclusion liste de courses / cuisine 2026-09-05 23:53:25 +02:00
preferences fix: corrige les bugs ouverts du repo (import TheMealDB, sidebar mobile) + doc (#59) 2026-08-21 12:16:22 +02:00
profile feat(api): modèle de données + API des scénarios de didacticiel (#42/#44) 2026-09-06 05:08:43 +02:00
recipe feat(recipes): permet de corriger la température d'un tech-step 2026-09-04 23:53:14 +02:00
reference feat(api): modèle de données + API des scénarios de didacticiel (#42/#44) 2026-09-06 05:08:43 +02:00
shopping-list feat(planning): attribution et jet des restes + exclusion liste de courses / cuisine 2026-09-05 23:53:25 +02:00
sources feat(tech-steps): detecte les temperatures dans les etapes 2026-08-29 19:29:03 +02:00