async def METHOD_NAME(self, request) -> web.Response:
    """
    Updates ledfx config
    """
    try:
        config = await request.json()
        audio_config = validate_and_trim_config(
            config.pop("audio", {}),
            AudioInputSource.AUDIO_CONFIG_SCHEMA.fget(),
            "audio",
        )
        wled_config = validate_and_trim_config(
            config.pop("wled_preferences", {}),
            WLED_CONFIG_SCHEMA,
            "wled_preferences",
        )
        melbanks_config = validate_and_trim_config(
            config.pop("melbanks", {}), Melbanks.CONFIG_SCHEMA, "melbanks"
        )
        core_config = validate_and_trim_config(
            config, CORE_CONFIG_SCHEMA, "core"
        )
        self._ledfx.config["audio"].update(audio_config)
        self._ledfx.config["melbanks"].update(melbanks_config)
        self._ledfx.config.update(core_config)
        # handle special case wled_preferences nested dict
        for key in wled_config:
            if key in self._ledfx.config["wled_preferences"]:
                self._ledfx.config["wled_preferences"][key].update(
                    wled_config[key]
                )
            else:
                self._ledfx.config["wled_preferences"][key] = wled_config[
                    key
                ]
        # TODO
        # Do something if wled preferences config is updated
        if (
            hasattr(self._ledfx, "audio")
            and self._ledfx.audio is not None
            and audio_config
        ):
            self._ledfx.audio.update_config(self._ledfx.config["audio"])
        if hasattr(self._ledfx, "audio") and melbanks_config:
            self._ledfx.audio.melbanks.update_config(
                self._ledfx.config["melbanks"]
            )
        if core_config and not (
            any(
                key in core_config
                for key in ["global_brightness", "create_segments"]
            )
            and len(core_config) == 1
        ):
            self._ledfx.loop.call_soon_threadsafe(self._ledfx.stop, 4)
        save_config(
            config=self._ledfx.config,
            config_dir=self._ledfx.config_dir,
        )
        return web.json_response(data={"status": "success"}, status=200)
    except JSONDecodeError:
        response = {
            "status": "failed",
            "reason": "JSON Decoding failed",
        }
        return web.json_response(data=response, status=400)
    except (KeyError, vol.MultipleInvalid) as msg:
        response = {
            "status": "failed",
            "payload": {"type": "warning", "reason": str(msg)},
        }
        return web.json_response(data=response, status=400)