From 703e58b3feb173b604b309f123a102ea93975ac9 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Thu, 22 Feb 2024 22:43:58 +0100 Subject: [PATCH] [backend/api] Return identicon for users without avatars --- Iceshrimp.Backend/Controllers/NoteController.cs | 6 +++--- .../Controllers/Renderers/NoteRenderer.cs | 8 ++++---- .../Controllers/Renderers/UserRenderer.cs | 13 +++++++++---- Iceshrimp.Backend/Controllers/TimelineController.cs | 4 ++-- Iceshrimp.Backend/Controllers/UserController.cs | 6 +++--- .../Core/Extensions/ServiceExtensions.cs | 2 ++ 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/Iceshrimp.Backend/Controllers/NoteController.cs b/Iceshrimp.Backend/Controllers/NoteController.cs index 050eab55..134286ef 100644 --- a/Iceshrimp.Backend/Controllers/NoteController.cs +++ b/Iceshrimp.Backend/Controllers/NoteController.cs @@ -16,7 +16,7 @@ namespace Iceshrimp.Backend.Controllers; [EnableRateLimiting("sliding")] [Route("/api/iceshrimp/v1/note")] [Produces(MediaTypeNames.Application.Json)] -public class NoteController(DatabaseContext db, NoteService noteSvc) : ControllerBase +public class NoteController(DatabaseContext db, NoteService noteSvc, NoteRenderer noteRenderer) : ControllerBase { [HttpGet("{id}")] [Authenticate] @@ -33,7 +33,7 @@ public class NoteController(DatabaseContext db, NoteService noteSvc) : Controlle .FirstOrDefaultAsync() ?? throw GracefulException.NotFound("User not found"); - return Ok(NoteRenderer.RenderOne(note.EnforceRenoteReplyVisibility())); + return Ok(noteRenderer.RenderOne(note.EnforceRenoteReplyVisibility())); } [HttpPost] @@ -57,6 +57,6 @@ public class NoteController(DatabaseContext db, NoteService noteSvc) : Controlle var note = await noteSvc.CreateNoteAsync(user, Note.NoteVisibility.Public, request.Text, request.Cw, reply); - return Ok(NoteRenderer.RenderOne(note)); + return Ok(noteRenderer.RenderOne(note)); } } \ No newline at end of file diff --git a/Iceshrimp.Backend/Controllers/Renderers/NoteRenderer.cs b/Iceshrimp.Backend/Controllers/Renderers/NoteRenderer.cs index 553d60ec..e5d29699 100644 --- a/Iceshrimp.Backend/Controllers/Renderers/NoteRenderer.cs +++ b/Iceshrimp.Backend/Controllers/Renderers/NoteRenderer.cs @@ -3,14 +3,14 @@ using Iceshrimp.Backend.Core.Database.Tables; namespace Iceshrimp.Backend.Controllers.Renderers; -public class NoteRenderer +public class NoteRenderer(UserRenderer userRenderer) { - public static NoteResponse RenderOne(Note note) + public NoteResponse RenderOne(Note note) { - return new NoteResponse { Id = note.Id, Text = note.Text, User = UserRenderer.RenderOne(note.User) }; + return new NoteResponse { Id = note.Id, Text = note.Text, User = userRenderer.RenderOne(note.User) }; } - public static IEnumerable RenderMany(IEnumerable notes) + public IEnumerable RenderMany(IEnumerable notes) { return notes.Select(RenderOne); } diff --git a/Iceshrimp.Backend/Controllers/Renderers/UserRenderer.cs b/Iceshrimp.Backend/Controllers/Renderers/UserRenderer.cs index 57698173..4c0820e7 100644 --- a/Iceshrimp.Backend/Controllers/Renderers/UserRenderer.cs +++ b/Iceshrimp.Backend/Controllers/Renderers/UserRenderer.cs @@ -1,19 +1,24 @@ using Iceshrimp.Backend.Controllers.Schemas; +using Iceshrimp.Backend.Core.Configuration; using Iceshrimp.Backend.Core.Database.Tables; +using Microsoft.Extensions.Options; namespace Iceshrimp.Backend.Controllers.Renderers; -public class UserRenderer +public class UserRenderer(IOptions config) { - public static UserResponse RenderOne(User user) + public UserResponse RenderOne(User user) { return new UserResponse { - Id = user.Id, Username = user.Username, AvatarUrl = user.AvatarUrl, BannerUrl = user.BannerUrl + Id = user.Id, + Username = user.Username, + AvatarUrl = user.AvatarUrl ?? $"https://{config.Value.WebDomain}/identicon/{user.Id}", + BannerUrl = user.BannerUrl }; } - public static IEnumerable RenderMany(IEnumerable users) + public IEnumerable RenderMany(IEnumerable users) { return users.Select(RenderOne); } diff --git a/Iceshrimp.Backend/Controllers/TimelineController.cs b/Iceshrimp.Backend/Controllers/TimelineController.cs index cb032b73..f501c2e4 100644 --- a/Iceshrimp.Backend/Controllers/TimelineController.cs +++ b/Iceshrimp.Backend/Controllers/TimelineController.cs @@ -17,7 +17,7 @@ namespace Iceshrimp.Backend.Controllers; [EnableRateLimiting("sliding")] [Route("/api/iceshrimp/v1/timeline")] [Produces(MediaTypeNames.Application.Json)] -public class TimelineController(DatabaseContext db, IDistributedCache cache) : ControllerBase +public class TimelineController(DatabaseContext db, IDistributedCache cache, NoteRenderer noteRenderer) : ControllerBase { [HttpGet("home")] [Authenticate] @@ -40,6 +40,6 @@ public class TimelineController(DatabaseContext db, IDistributedCache cache) : C .PrecomputeVisibilities(user) .ToListAsync(); - return Ok(NoteRenderer.RenderMany(notes.EnforceRenoteReplyVisibility())); + return Ok(noteRenderer.RenderMany(notes.EnforceRenoteReplyVisibility())); } } \ No newline at end of file diff --git a/Iceshrimp.Backend/Controllers/UserController.cs b/Iceshrimp.Backend/Controllers/UserController.cs index 4d6995ab..f670ef4f 100644 --- a/Iceshrimp.Backend/Controllers/UserController.cs +++ b/Iceshrimp.Backend/Controllers/UserController.cs @@ -15,7 +15,7 @@ namespace Iceshrimp.Backend.Controllers; [EnableRateLimiting("sliding")] [Route("/api/iceshrimp/v1/user/{id}")] [Produces(MediaTypeNames.Application.Json)] -public class UserController(DatabaseContext db) : ControllerBase +public class UserController(DatabaseContext db, UserRenderer userRenderer, NoteRenderer noteRenderer) : ControllerBase { [HttpGet] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(UserResponse))] @@ -26,7 +26,7 @@ public class UserController(DatabaseContext db) : ControllerBase .FirstOrDefaultAsync(p => p.Id == id) ?? throw GracefulException.NotFound("User not found"); - return Ok(UserRenderer.RenderOne(user)); + return Ok(userRenderer.RenderOne(user)); } [HttpGet("notes")] @@ -48,6 +48,6 @@ public class UserController(DatabaseContext db) : ControllerBase .Paginate(pq, ControllerContext) .ToListAsync(); - return Ok(NoteRenderer.RenderMany(notes.EnforceRenoteReplyVisibility())); + return Ok(noteRenderer.RenderMany(notes.EnforceRenoteReplyVisibility())); } } \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs b/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs index 985bd9d1..9ae2827b 100644 --- a/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs +++ b/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs @@ -49,6 +49,8 @@ public static class ServiceExtensions .AddScoped() .AddScoped() .AddScoped() + .AddScoped() + .AddScoped() .AddScoped() .AddScoped();