using MoonCore.Extended.Abstractions; using Moonlight.ApiServer.Database.Entities; using Moonlight.ApiServer.Interfaces; using Moonlight.ApiServer.Models; namespace Moonlight.ApiServer.Services; public class UserDeletionService { private readonly IUserDeleteHandler[] Handlers; private readonly DatabaseRepository UserRepository; public UserDeletionService( IEnumerable handlers, DatabaseRepository userRepository ) { UserRepository = userRepository; Handlers = handlers.ToArray(); } public async Task Validate(User user) { foreach (var handler in Handlers) { var result = await handler.Validate(user); if (!result.IsAllowed) return result; } return UserDeleteValidationResult.Allow(); } public async Task Delete(User user, bool force) { foreach (var handler in Handlers) await handler.Delete(user, force); await UserRepository.RemoveAsync(user); } }