diff --git a/src/PostIt.Tests/BlogApiTestFakes.cs b/src/PostIt.Tests/BlogApiTestFakes.cs
index 9ec10f89..755ce105 100644
--- a/src/PostIt.Tests/BlogApiTestFakes.cs
+++ b/src/PostIt.Tests/BlogApiTestFakes.cs
@@ -1,6 +1,7 @@
using PostIt.Models;
using PostIt.Services;
using PostIt.ViewModels;
+using Yavsc.Models;
namespace PostIt.Tests;
diff --git a/src/PostIt/PostIt/App.axaml.cs b/src/PostIt/PostIt/App.axaml.cs
index 1e0afeaf..b5740f2f 100644
--- a/src/PostIt/PostIt/App.axaml.cs
+++ b/src/PostIt/PostIt/App.axaml.cs
@@ -24,7 +24,7 @@ public partial class App : Application
/// binding sink with a cross-thread exception inside
/// DataValidationErrors.SetErrors.
///
- public IServiceProvider? Services { get; private set; }
+ public IServiceProvider? ServiceProvider { get; private set; }
private MainWindow window;
public App()
{
@@ -91,19 +91,17 @@ public partial class App : Application
services.AddSingleton(sessionStatus);
services.AddTransient();
- var provider = services.BuildServiceProvider();
+ ServiceProvider = services.BuildServiceProvider();
// Bind the canonical Settings to the static accessor so any
// code path that can't easily take a constructor parameter
// (designer surfaces, Avalonia data templates) still gets
// the same instance the rest of the app is using. Idempotent:
// re-binding from a second App boot (tests) is a no-op.
- Settings.BindToServiceProvider(provider);
-
- Services = provider;
+ Settings.BindToServiceProvider(ServiceProvider);
DataTemplates.Clear();
- DataTemplates.Add(new ViewLocator(provider));
+ DataTemplates.Add(new ViewLocator(ServiceProvider));
// Wire the Settings singleton onto the SettingsPage singleton
// once, at composition time. The page is registered as a
@@ -113,7 +111,7 @@ public partial class App : Application
// DataContext, and the TwoWay bindings inside the page keep
// mutating the same in-memory Settings instance that the rest
// of the app reads (OidcClientOptions construction, etc.).
- provider.GetRequiredService().DataContext = settings;
+ ServiceProvider.GetRequiredService().DataContext = settings;
// Settings.DarkMode was previously a dead field: it round-
// tripped through the settings file and the SettingsPage
@@ -134,8 +132,8 @@ public partial class App : Application
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
- var homePage = provider.GetRequiredService();
- homePage.DataContext = provider.GetRequiredService();
+ var homePage = ServiceProvider.GetRequiredService();
+ homePage.DataContext = ServiceProvider.GetRequiredService();
window = new MainWindow();
window.SessionBanner.DataContext = sessionStatus;
@@ -155,8 +153,8 @@ public partial class App : Application
{
var w = (MainWindow)((IClassicDesktopStyleApplicationLifetime)ApplicationLifetime!).MainWindow!;
var nav = w.NavRoot;
- var hp = provider.GetRequiredService();
- hp.DataContext = provider.GetRequiredService();
+ var hp = ServiceProvider.GetRequiredService();
+ hp.DataContext = ServiceProvider.GetRequiredService();
_ = nav.PopToRootAsync();
};
@@ -187,7 +185,7 @@ public partial class App : Application
sessionStatus.OpenSettingsRequested += () =>
{
var w = (MainWindow)((IClassicDesktopStyleApplicationLifetime)ApplicationLifetime!).MainWindow!;
- var settingsPage = provider.GetRequiredService();
+ var settingsPage = ServiceProvider.GetRequiredService();
var stack = w.NavRoot.NavigationStack;
if (stack.Count > 0 && ReferenceEquals(stack[stack.Count - 1], settingsPage))
{
@@ -196,13 +194,13 @@ public partial class App : Application
_ = w.NavRoot.PushAsync(settingsPage);
};
- window.Opened += async (_, _) => await BootAsync(provider, api);
+ window.Opened += async (_, _) => await BootAsync(ServiceProvider, api);
}
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleView)
{
singleView.MainView = new MainWindow
{
- DataContext = provider.GetRequiredService()
+ DataContext = ServiceProvider.GetRequiredService()
};
}
}
@@ -243,8 +241,8 @@ public partial class App : Application
public static async Task PushMainPageAsync()
{
var app = (App)Current;
- var mainVm = app.Services.GetRequiredService();
- var mainPage = app.Services.GetRequiredService();
+ var mainVm = app.ServiceProvider.GetRequiredService();
+ var mainPage = app.ServiceProvider.GetRequiredService();
mainPage.DataContext = mainVm;
await app.window.FindControl("NavRoot").PushAsync(mainPage).ConfigureAwait(true);
}
diff --git a/src/PostIt/PostIt/Models/BlogPost.cs b/src/PostIt/PostIt/Models/BlogPost.cs
index 7867eb02..e62fcea2 100644
--- a/src/PostIt/PostIt/Models/BlogPost.cs
+++ b/src/PostIt/PostIt/Models/BlogPost.cs
@@ -1,16 +1,37 @@
using System;
+using Yavsc.Abstract.Identity;
+using Yavsc.Abstract.Identity.Security;
+using Yavsc.Blogspot;
namespace PostIt.Models;
-public class BlogPost
+public class BlogPost : IBlogPost
{
- public long Id { get; set; }
- public string Title { get; set; } = string.Empty;
- public string? Article { get; set; }
- public string? Photo { get; set; }
- public string? AuthorId { get; set; }
- public DateTime DateCreated { get; set; }
- public string? UserCreated { get; set; }
- public DateTime DateModified { get; set; }
- public string? UserModified { get; set; }
+ public string AuthorId { get; set; }
+
+ public IApplicationUser Author { get; set; }
+
+ public string Article { get; set ; }
+ public string Photo { get; set ; }
+ public long Id { get; set ; }
+ public DateTime DateCreated { get; set ; }
+ public string UserCreated { get; set ; }
+ public DateTime DateModified { get; set ; }
+ public string UserModified { get; set ; }
+ public string Title { get; set ; }
+
+ public bool AuthorizeCircle(long circleId)
+ {
+ throw new NotImplementedException();
+ }
+
+ public ICircleAuthorization[] GetACL()
+ {
+ throw new NotImplementedException();
+ }
+
+ public string[] GetTags()
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/src/PostIt/PostIt/ViewModels/HomePageViewModel.cs b/src/PostIt/PostIt/ViewModels/HomePageViewModel.cs
index c11e396a..876f862c 100644
--- a/src/PostIt/PostIt/ViewModels/HomePageViewModel.cs
+++ b/src/PostIt/PostIt/ViewModels/HomePageViewModel.cs
@@ -1,4 +1,5 @@
using CommunityToolkit.Mvvm.Input;
+using Microsoft.Extensions.DependencyInjection;
using PostIt;
using PostIt.Services;
namespace PostIt.ViewModels;
@@ -7,6 +8,7 @@ public class HomePageViewModel : ViewModelBase
{
public YavscApiClient Api { get; }
public Settings Settings { get; }
+ public SessionStatusViewModel SessionStatus { get; }
private string _welcomeText = "Welcome to PostIt!";
public string WelcomeText
@@ -18,10 +20,12 @@ public class HomePageViewModel : ViewModelBase
public override bool CanNavigateNext { get => true; protected set => throw new System.NotImplementedException(); }
public override bool CanNavigatePrevious { get => false; protected set => throw new System.NotImplementedException(); }
- public HomePageViewModel(YavscApiClient api, Settings settings)
+ public HomePageViewModel(YavscApiClient api, Settings settings, SessionStatusViewModel sessionStatus)
{
Api = api;
Settings = settings;
+ SessionStatus = sessionStatus;
+
}
public RelayCommand OpenBlogs { get; set; } = new RelayCommand(() => App.PushMainPageAsync());
///
@@ -33,5 +37,8 @@ public class HomePageViewModel : ViewModelBase
/// (thread-safe dispatcher marshalling on PropertyChanged) — a
/// designer-only duplicate instance is therefore harmless.
///
- public HomePageViewModel() : this(null!, new Settings()) { }
+ public HomePageViewModel() : this(null!, new Settings(), new SessionStatusViewModel())
+ {
+
+ }
}
diff --git a/src/PostIt/PostIt/Views/MainPage.axaml.cs b/src/PostIt/PostIt/Views/MainPage.axaml.cs
index 1535d2f4..6a907a01 100644
--- a/src/PostIt/PostIt/Views/MainPage.axaml.cs
+++ b/src/PostIt/PostIt/Views/MainPage.axaml.cs
@@ -28,7 +28,7 @@ public partial class MainPage : ContentPage
// Resolve via the App's DI container so the page gets
// the canonical services (Api client, settings, ...).
var app = Application.Current as App;
- var services = app?.Services;
+ var services = app?.ServiceProvider;
if (services is null) return;
var page = services.GetRequiredService();
diff --git a/src/Yavsc.Abstract/Blogspot/IBlog.cs b/src/Yavsc.Abstract/Blogspot/IBlog.cs
deleted file mode 100644
index 86efc8e3..00000000
--- a/src/Yavsc.Abstract/Blogspot/IBlog.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-using Yavsc.Abstract.Identity;
-
-namespace Yavsc
-{
- public interface IBlogPostPayLoad
- {
- string Article { get; set; }
- string Photo { get; set; }
-
- }
- public interface IBlogPost : IBlogPostPayLoad, ITrackedEntity, IIdentified, ITitle
- {
- string AuthorId { get; set; }
- IApplicationUser Author { get; }
- }
-}
diff --git a/src/Yavsc.Abstract/Blogspot/IBlogPost.cs b/src/Yavsc.Abstract/Blogspot/IBlogPost.cs
new file mode 100644
index 00000000..691e03f2
--- /dev/null
+++ b/src/Yavsc.Abstract/Blogspot/IBlogPost.cs
@@ -0,0 +1,15 @@
+
+
+
+using Yavsc.Abstract.Identity;
+using Yavsc.Abstract.Identity.Security;
+using Yavsc.Interfaces;
+
+namespace Yavsc.Blogspot
+{
+ public interface IBlogPost : IBlogPostPayLoad, ICircleAuthorized, ITaggable, ITrackedEntity, IIdentified, ITitle
+ {
+ string AuthorId { get; set; }
+ IApplicationUser Author { get; }
+ }
+}
diff --git a/src/Yavsc.Abstract/Blogspot/IBlogPostPayLoad.cs b/src/Yavsc.Abstract/Blogspot/IBlogPostPayLoad.cs
new file mode 100644
index 00000000..d8aeb4fe
--- /dev/null
+++ b/src/Yavsc.Abstract/Blogspot/IBlogPostPayLoad.cs
@@ -0,0 +1,9 @@
+namespace Yavsc.Blogspot
+{
+ public interface IBlogPostPayLoad
+ {
+ string Article { get; set; }
+ string Photo { get; set; }
+
+ }
+}
diff --git a/src/Yavsc.Blogs/Controllers/BlogApiController.cs b/src/Yavsc.Blogs/Controllers/BlogApiController.cs
index 69b37e60..23d71742 100644
--- a/src/Yavsc.Blogs/Controllers/BlogApiController.cs
+++ b/src/Yavsc.Blogs/Controllers/BlogApiController.cs
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using Yavsc.Blogspot;
using Yavsc.Models.Blog;
using Yavsc.Server.Exceptions;
using Yavsc.Server.Helpers;
diff --git a/src/Yavsc.Server/Models/Blog/BlogPost.cs b/src/Yavsc.Server/Models/Blog/BlogPost.cs
index eb58cb62..e1b44603 100644
--- a/src/Yavsc.Server/Models/Blog/BlogPost.cs
+++ b/src/Yavsc.Server/Models/Blog/BlogPost.cs
@@ -3,15 +3,14 @@ using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
using Yavsc.Abstract.Identity;
using Yavsc.Abstract.Identity.Security;
-using Yavsc.Interfaces;
using Yavsc.Models.Access;
using Yavsc.Models.Relationship;
+using Yavsc.Blogspot;
namespace Yavsc.Models.Blog
{
-
- public class BlogPost :
- IBlogPost, ICircleAuthorized, ITaggable
+
+ public class BlogPost : IBlogPost
{
[Key(), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Display(Name = "Identifiant du post")]
diff --git a/src/Yavsc.Server/Services/BlogSpotService.cs b/src/Yavsc.Server/Services/BlogSpotService.cs
index a8b52d0d..dc02cde2 100644
--- a/src/Yavsc.Server/Services/BlogSpotService.cs
+++ b/src/Yavsc.Server/Services/BlogSpotService.cs
@@ -10,6 +10,7 @@ using Yavsc.Server.Helpers;
using Yavsc.Services;
using Yavsc.ViewModels.Auth;
using Microsoft.AspNetCore.Http;
+using Yavsc.Blogspot;
public class BlogSpotService
{