refacto BlogPost serialization
Some checks failed
Dotnet build and test / log-the-inputs (push) Has been cancelled
Dotnet build and test / build (push) Has been cancelled

This commit is contained in:
Paul Schneider 2026-08-05 21:05:14 +01:00
commit 64547840e4
No known key found for this signature in database
GPG key ID: 1E66C65EE2B46F1B
8 changed files with 22 additions and 17 deletions

View file

@ -7,9 +7,8 @@ using Yavsc.Interfaces;
namespace Yavsc.Blogspot namespace Yavsc.Blogspot
{ {
public interface IBlogPost : IBlogPostPayLoad, ICircleAuthorized, ITaggable<long>, ITrackedEntity, IIdentified<long>, ITitle public interface IBlogPost : IBlogPostPayLoad, ICircleAuthorized, ITrackedEntity, ITitle
{ {
string AuthorId { get; set; }
IApplicationUser Author { get; } IApplicationUser Author { get; }
} }
} }

View file

@ -1,10 +1,14 @@
using Yavsc.Interfaces;
namespace Yavsc.Abstract.Identity.Security namespace Yavsc.Abstract.Identity.Security
{ {
public interface ICircleAuthorized public interface ICircleAuthorized : ITaggable<long>
{ {
long Id { get; set; }
string AuthorId { get; } string AuthorId { get; }
bool AuthorizeCircle(long circleId); bool AuthorizeCircle(long circleId);
ICircleAuthorization [] GetACL(); ICircleAuthorization [] GetACL();
} }

View file

@ -1,9 +1,9 @@
namespace Yavsc.Interfaces namespace Yavsc.Interfaces
{ {
public interface ITaggable<K> public interface ITaggable<K> : IIdentified<K>
{ {
string [] GetTags(); string [] GetTags();
K Id { get; } K Id { get; }
} }
} }

View file

@ -239,7 +239,8 @@ public sealed class BlogApiTests : IClassFixture<BlogsWebServerFixture>
// The list should now be empty. // The list should now be empty.
var listResponse = await http.GetAsync("/api/v1/blog"); var listResponse = await http.GetAsync("/api/v1/blog");
using var doc = JsonDocument.Parse(await listResponse.Content.ReadAsStringAsync()); String response = await listResponse.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(response);
Assert.Equal(0, doc.RootElement.GetArrayLength()); Assert.Equal(0, doc.RootElement.GetArrayLength());
} }

View file

@ -22,9 +22,9 @@ namespace Yavsc.Blogs.Controllers
// GET: api/BlogApi // GET: api/BlogApi
[HttpGet] [HttpGet]
public async Task<IEnumerable<IBlogPost>> GetBlogspot(int start = 0, int take = 25) public async Task<IEnumerable<BlogPost>> GetBlogspot(int start = 0, int take = 25)
{ {
return await blogSpotService.Index(User, null, start, take); return (await blogSpotService.Index(User, null, start, take)).Cast<BlogPost>();
} }
// GET: api/BlogApi/5 // GET: api/BlogApi/5

View file

@ -1,6 +1,7 @@
{ {
"Site": { "Site": {
"Authority": "https://localhost:5101", "Authority": "https://localhost:5101",
"Audience": ["blogs"],
"Title": "Yavsc dev", "Title": "Yavsc dev",
"Slogan": "Yavsc : WIP.", "Slogan": "Yavsc : WIP.",
"Banner": "/images/yavsc.png", "Banner": "/images/yavsc.png",

View file

@ -52,19 +52,19 @@
<div class="post card"> <div class="post card">
<a asp-action="Details" asp-route-id="@((IBlogPost)post).Id" class="bloglink" > <a asp-action="Details" asp-route-id="@post.Id" class="bloglink" >
<div class="float-left"><img class="photo card-photo" src="@post.Photo" ></div> <div class="float-left"><img class="photo card-photo" src="@post.Photo" ></div>
<h3 class="index-post-title">@post.Title</h3> <h3 class="index-post-title">@post.Title</h3>
</a> </a>
<div> <div>
<a asp-action="Details" asp-route-id="@((IBlogPost)post).Id"> <a asp-action="Details" asp-route-id="@post.Id">
<asciidoc summary="@maxTextLen">@post.Article</asciidoc></a> <asciidoc summary="@maxTextLen">@post.Article</asciidoc></a>
<span style="font-size:x-small;">@Html.DisplayFor(m => post.Author)</span> <span style="font-size:x-small;">@Html.DisplayFor(m => post.Author)</span>
<span style="font-size:xx-small;"> <span style="font-size:xx-small;">
posté le @post.DateCreated.ToString("dddd d MMM yyyy à H:mm") posté le @post.DateCreated.ToString("dddd d MMM yyyy à H:mm")
@if ((post.DateModified - post.DateCreated).Minutes > 0){  @if ((post.DateModified - post.DateCreated).Minutes > 0){ 
@:- Modifié le @post.DateModified.ToString("dddd d MMM yyyy à H:mm") @:- Modifié le @post.DateModified.ToString("dddd d MMM yyyy à H:mm")
}) }
</span> </span>
</div> </div>
<div class="actiongroup"> <div class="actiongroup">
@ -74,13 +74,13 @@
} }
else else
{ {
<a asp-action="Details" asp-route-id="@((IBlogPost)post).Id" class="btn btn-light">Details</a> <a asp-action="Details" asp-route-id="@post.Id" class="btn btn-light">Details</a>
} }
@if ((await AuthorizationService.AuthorizeAsync(User, post, new EditPermission())).Succeeded) @if ((await AuthorizationService.AuthorizeAsync(User, post, new EditPermission())).Succeeded)
{ {
<a asp-action="Edit" asp-route-id="@((IBlogPost)post).Id" class="btn btn-primary">Edit</a> <a asp-action="Edit" asp-route-id="@post.Id" class="btn btn-primary">Edit</a>
<a asp-action="Delete" asp-route-id="@((IBlogPost)post).Id" class="btn btn-danger">Delete</a> <a asp-action="Delete" asp-route-id="@post.Id" class="btn btn-danger">Delete</a>
} }
</div> </div>

View file

@ -35,7 +35,7 @@ namespace Yavsc.Models.Blog
public string? AuthorId { get; set; } public string? AuthorId { get; set; }
[Display(Name = "Auteur")] [Display(Name = "Auteur")]
public virtual ApplicationUser? Author { set; get; } public virtual ApplicationUser Author { set; get; }
[Display(Name = "Date de création")] [Display(Name = "Date de création")]
@ -95,6 +95,6 @@ namespace Yavsc.Models.Blog
[InverseProperty("Post")] [InverseProperty("Post")]
public virtual List<Comment> Comments { get; set; } public virtual List<Comment> Comments { get; set; }
IApplicationUser IBlogPost.Author { get => this.Author; } IApplicationUser IBlogPost.Author => Author;
} }
} }