From bff7cff59f58293a85bb61be6e94cff162dfcc15 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Sun, 6 Sep 2026 14:17:40 +0100 Subject: [PATCH 01/25] postit: persist settings save and apply ApiUrl changes without restart --- CHANGELOG.md | 4 +- .../ActivitiesPageViewModelTests.cs | 16 +++++++ .../Helpers/ServiceCollectionHelpers.cs | 6 +-- src/PostIt/PostIt/Views/SettingsPage.axaml | 13 ++--- src/PostIt/PostIt/postit-settings sample.json | 2 +- src/PostIt/PostIt/postit-settings.json | 2 +- src/Yavsc.Api.Client/ActivityApiClient.cs | 47 +++++++++++++++---- src/Yavsc.Api.Client/BillingApiClient.cs | 24 ++++++++-- 8 files changed, 84 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bef40e30..1c7c92595 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,12 +13,14 @@ * [PostIt] Les avatars ne sont plus relies en string sur `Image.Source`: ils sont telecharges et lies en `Bitmap`. * [Yavsc.Api.Client] `ActivityApiClient` accepte une base d'avatar dediee et construit les URLs avatar depuis l'autorite d'identification. +* [PostIt] Les clients Activites/Billing utilisent maintenant `ApiUrl` en lecture dynamique: un changement via Parametres prend effet sans redemarrer l'application (apres sauvegarde et rafraichissement de la page). * [PostIt] Le header de `MainPage` n'utilise plus `ScrollViewer`; remplacement par une barre de commandes basee sur `WrapPanel`. * [PostIt] Alignement de la navigation blogs: renommage `PushMainPageAsync` -> `PushBlogsPageAsync` et ajustement de `HomePageViewModel`. ### Fixed -néant +* [PostIt.Android] Correction d'un 404 sur la page Activites au premier lancement: la configuration embarquee pointait `ApiUrl` vers le host Blogs au lieu de l'API metier. +* [PostIt] Correction du bouton Sauver de la page Parametres: binding vers `SaveCommand` pour persister correctement `ApiUrl`/`BlogsApiUrl`. ## [1.0.8-rc11] - unstable diff --git a/src/PostIt/PostIt.Tests/ActivitiesPageViewModelTests.cs b/src/PostIt/PostIt.Tests/ActivitiesPageViewModelTests.cs index 2e8d3e544..04cc0f314 100644 --- a/src/PostIt/PostIt.Tests/ActivitiesPageViewModelTests.cs +++ b/src/PostIt/PostIt.Tests/ActivitiesPageViewModelTests.cs @@ -39,6 +39,22 @@ public class ActivitiesPageViewModelTests Assert.Equal("https://business.example/api/v1/billing/Rdv", api.Paths[3]); } + [Fact] + public async Task ActivityApiClient_uses_updated_business_base_without_restart() + { + var api = new StubActivityApi(); + var baseUrl = "https://business-a.example/api/v1/"; + var client = new ActivityApiClient(api, () => baseUrl); + + await client.GetCatalogAsync(ct: TestContext.Current.CancellationToken); + + baseUrl = "https://business-b.example/api/v1/"; + await client.GetUsersAsync("brush", TestContext.Current.CancellationToken); + + Assert.Equal("https://business-a.example/api/v1/activity/catalog", api.Paths[0]); + Assert.Equal("https://business-b.example/api/v1/activity/brush/users", api.Paths[1]); + } + [Fact] public async Task RefreshAsync_loads_first_activity_then_specialization_performers() { diff --git a/src/PostIt/PostIt/Helpers/ServiceCollectionHelpers.cs b/src/PostIt/PostIt/Helpers/ServiceCollectionHelpers.cs index f95f31e30..69f0a2dcd 100644 --- a/src/PostIt/PostIt/Helpers/ServiceCollectionHelpers.cs +++ b/src/PostIt/PostIt/Helpers/ServiceCollectionHelpers.cs @@ -26,9 +26,9 @@ public static class ServiceCollectionHelpers var userSearchClient = new UserSearchClient(api, settings.BlogsApiUrl); var activityClient = new ActivityApiClient( api, - settings.ApiUrl, - settings.Authentication?.Authority); - var billingClient = new BillingApiClient(api, settings.ApiUrl); + () => settings.ApiUrl, + () => settings.Authentication?.Authority); + var billingClient = new BillingApiClient(api, () => settings.ApiUrl); var userDirectory = new UserDirectory(userSearchClient); // Vues diff --git a/src/PostIt/PostIt/Views/SettingsPage.axaml b/src/PostIt/PostIt/Views/SettingsPage.axaml index 611b89954..bb19dfa3c 100644 --- a/src/PostIt/PostIt/Views/SettingsPage.axaml +++ b/src/PostIt/PostIt/Views/SettingsPage.axaml @@ -61,16 +61,11 @@ Click="ChooseAvatar_Click" Margin="0,0,8,0"/> - +