[backend/api] Return identicon for users without avatars
This commit is contained in:
parent
e4505d9d00
commit
703e58b3fe
6 changed files with 23 additions and 16 deletions
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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<NoteResponse> RenderMany(IEnumerable<Note> notes)
|
||||
public IEnumerable<NoteResponse> RenderMany(IEnumerable<Note> notes)
|
||||
{
|
||||
return notes.Select(RenderOne);
|
||||
}
|
||||
|
|
|
@ -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.InstanceSection> 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<UserResponse> RenderMany(IEnumerable<User> users)
|
||||
public IEnumerable<UserResponse> RenderMany(IEnumerable<User> users)
|
||||
{
|
||||
return users.Select(RenderOne);
|
||||
}
|
||||
|
|
|
@ -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()));
|
||||
}
|
||||
}
|
|
@ -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()));
|
||||
}
|
||||
}
|
|
@ -49,6 +49,8 @@ public static class ServiceExtensions
|
|||
.AddScoped<ErrorHandlerMiddleware>()
|
||||
.AddScoped<UserRenderer>()
|
||||
.AddScoped<NoteRenderer>()
|
||||
.AddScoped<Controllers.Renderers.NoteRenderer>()
|
||||
.AddScoped<Controllers.Renderers.UserRenderer>()
|
||||
.AddScoped<NotificationRenderer>()
|
||||
.AddScoped<ActivityPubController>();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue