[backend/federation] Trigger user updates on web & mastodon api calls (ISH-35)

This commit is contained in:
Laura Hausmann 2024-02-26 20:12:44 +01:00
parent 0f670c1953
commit 435632857b
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
3 changed files with 9 additions and 4 deletions

View file

@ -47,7 +47,7 @@ public class AccountController(
{ {
var user = await db.Users.IncludeCommonProperties().FirstOrDefaultAsync(p => p.Id == id) ?? var user = await db.Users.IncludeCommonProperties().FirstOrDefaultAsync(p => p.Id == id) ??
throw GracefulException.RecordNotFound(); throw GracefulException.RecordNotFound();
var res = await userRenderer.RenderAsync(user); var res = await userRenderer.RenderAsync(await userResolver.GetUpdatedUser(user));
return Ok(res); return Ok(res);
} }

View file

@ -15,7 +15,12 @@ namespace Iceshrimp.Backend.Controllers;
[EnableRateLimiting("sliding")] [EnableRateLimiting("sliding")]
[Route("/api/iceshrimp/v1/user/{id}")] [Route("/api/iceshrimp/v1/user/{id}")]
[Produces(MediaTypeNames.Application.Json)] [Produces(MediaTypeNames.Application.Json)]
public class UserController(DatabaseContext db, UserRenderer userRenderer, NoteRenderer noteRenderer) : ControllerBase public class UserController(
DatabaseContext db,
UserRenderer userRenderer,
NoteRenderer noteRenderer,
ActivityPub.UserResolver userResolver
) : ControllerBase
{ {
[HttpGet] [HttpGet]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(UserResponse))] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(UserResponse))]
@ -26,7 +31,7 @@ public class UserController(DatabaseContext db, UserRenderer userRenderer, NoteR
.FirstOrDefaultAsync(p => p.Id == id) ?? .FirstOrDefaultAsync(p => p.Id == id) ??
throw GracefulException.NotFound("User not found"); throw GracefulException.NotFound("User not found");
return Ok(userRenderer.RenderOne(user)); return Ok(userRenderer.RenderOne(await userResolver.GetUpdatedUser(user)));
} }
[HttpGet("notes")] [HttpGet("notes")]

View file

@ -192,7 +192,7 @@ public class UserResolver(
} }
} }
private async Task<User> GetUpdatedUser(User user) public async Task<User> GetUpdatedUser(User user)
{ {
if (!user.NeedsUpdate) return user; if (!user.NeedsUpdate) return user;
user.LastFetchedAt = DateTime.UtcNow; // Prevent multiple background tasks from being started user.LastFetchedAt = DateTime.UtcNow; // Prevent multiple background tasks from being started