public async Task <List <ClientChildDto> > HandleAsync(int id, ClientChildType type, string searchTerm,
                                                        CancellationToken cancellationToken = default)
 {
     return(type switch
     {
         ClientChildType.GrantType => await _grantsRepository.Query()
         .Where(e => e.ClientId == id)
         .Where(e => e.GrantType.Contains(searchTerm))
         .Select(e => new ClientChildDto {
             Id = e.Id, Value = e.GrantType
         })
         .ToListAsync(cancellationToken),
         ClientChildType.RedirectUri => await _redirectUriRepository.Query()
         .Where(e => e.ClientId == id)
         .Where(e => e.RedirectUri.Contains(searchTerm))
         .Select(e => new ClientChildDto {
             Id = e.Id, Value = e.RedirectUri
         })
         .ToListAsync(cancellationToken),
         ClientChildType.LogoutRedirectUri => await _logoutRedirectUrisRepository.Query()
         .Where(e => e.ClientId == id)
         .Where(e => e.PostLogoutRedirectUri.Contains(searchTerm))
         .Select(e => new ClientChildDto {
             Id = e.Id, Value = e.PostLogoutRedirectUri
         })
         .ToListAsync(cancellationToken),
         ClientChildType.CorsOrigin => await _corsRepository.Query()
         .Where(e => e.ClientId == id)
         .Where(e => e.Origin.Contains(searchTerm))
         .Select(e => new ClientChildDto {
             Id = e.Id, Value = e.Origin
         })
         .ToListAsync(cancellationToken),
         _ => throw new ArgumentOutOfRangeException()
     });
        public async Task <ActionResult <ClientChildAssignmentResponse> > HandleAsync(int id, ClientChildType childType, int childId,
                                                                                      CancellationToken cancellationToken = default)
        {
            if (!_clientRepository.Query()
                .Any(e => e.Id == id && e.ClientId != AppConstants.ReadOnlyEntities.AngularClient))
            {
                return(NotFound(id));
            }

            var toaster = new ToasterEvent(nameof(Client), ToasterType.Info, ToasterVerbs.Deleted);

            switch (childType)
            {
            case ClientChildType.GrantType:
                _grantsRepository.Delete(childId);
                await _grantsRepository.SaveAsync(toaster);

                break;

            case ClientChildType.RedirectUri:
                _redirectUriRepository.Delete(childId);
                await _redirectUriRepository.SaveAsync(toaster);

                break;

            case ClientChildType.LogoutRedirectUri:
                _logoutRedirectUrisRepository.Delete(childId);
                await _logoutRedirectUrisRepository.SaveAsync(toaster);

                break;

            case ClientChildType.CorsOrigin:
                _corsRepository.Delete(childId);
                await _corsRepository.SaveAsync(toaster);

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(NoContent());
        }