Compare commits

...

2 Commits

Author SHA1 Message Date
gamer147
3612c89b99 [FA-55] Resolve linter error
All checks were successful
CI / build-backend (pull_request) Successful in 1m7s
CI / build-frontend (pull_request) Successful in 42s
2025-12-29 14:35:17 -05:00
gamer147
ebb2e6e7fc [FA-55] User service should be done
Some checks failed
CI / build-backend (pull_request) Successful in 2m2s
CI / build-frontend (pull_request) Failing after 30s
2025-12-29 14:33:08 -05:00
4 changed files with 40 additions and 4 deletions

View File

@@ -1,3 +1,4 @@
using FictionArchive.Service.Shared.Services.EventBus;
using FictionArchive.Service.UserService.Models.Database;
using FictionArchive.Service.UserService.Services;
using FictionArchive.Service.UserService.Services.AuthenticationClient;
@@ -25,12 +26,14 @@ public class UserManagementServiceTests
private static UserManagementService CreateService(
UserServiceDbContext dbContext,
IAuthenticationServiceClient authClient)
IAuthenticationServiceClient authClient,
IEventBus? eventBus = null)
{
return new UserManagementService(
dbContext,
NullLogger<UserManagementService>.Instance,
authClient);
authClient,
eventBus ?? Substitute.For<IEventBus>());
}
private static User CreateTestUser(string username, string email, int availableInvites = 5)

View File

@@ -0,0 +1,17 @@
using FictionArchive.Service.Shared.Services.EventBus;
namespace FictionArchive.Service.UserService.Models.IntegrationEvents;
public class UserInvitedEvent : IIntegrationEvent
{
// Invited user info
public Guid InvitedUserId { get; set; }
public required string InvitedUsername { get; set; }
public required string InvitedEmail { get; set; }
public required string InvitedOAuthProviderId { get; set; }
// Inviter info
public Guid InviterId { get; set; }
public required string InviterUsername { get; set; }
public required string InviterOAuthProviderId { get; set; }
}

View File

@@ -1,4 +1,6 @@
using FictionArchive.Service.Shared.Services.EventBus;
using FictionArchive.Service.UserService.Models.Database;
using FictionArchive.Service.UserService.Models.IntegrationEvents;
using FictionArchive.Service.UserService.Services.AuthenticationClient;
using Microsoft.EntityFrameworkCore;
@@ -9,15 +11,18 @@ public class UserManagementService
private readonly ILogger<UserManagementService> _logger;
private readonly UserServiceDbContext _dbContext;
private readonly IAuthenticationServiceClient _authClient;
private readonly IEventBus _eventBus;
public UserManagementService(
UserServiceDbContext dbContext,
ILogger<UserManagementService> logger,
IAuthenticationServiceClient authClient)
IAuthenticationServiceClient authClient,
IEventBus eventBus)
{
_dbContext = dbContext;
_logger = logger;
_authClient = authClient;
_eventBus = eventBus;
}
/// <summary>
@@ -94,6 +99,17 @@ public class UserManagementService
await _dbContext.SaveChangesAsync();
await _eventBus.Publish(new UserInvitedEvent
{
InvitedUserId = newUser.Id,
InvitedUsername = newUser.Username,
InvitedEmail = newUser.Email,
InvitedOAuthProviderId = newUser.OAuthProviderId,
InviterId = inviter.Id,
InviterUsername = inviter.Username,
InviterOAuthProviderId = inviter.OAuthProviderId
});
_logger.LogInformation(
"User {Username} was successfully invited by {InviterId}. New user id: {NewUserId}",
username, inviter.Id, newUser.Id);

View File

@@ -193,7 +193,7 @@
</p>
{:else}
<div class="divide-y">
{#each currentUser.invitedUsers as user}
{#each currentUser.invitedUsers as user (user.username)}
<div class="flex items-center justify-between py-3 first:pt-0 last:pb-0">
<div>
<p class="font-medium">{user.username}</p>