| // Copyright 2019 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:async'; |
| |
| import 'package:meta/meta.dart'; |
| |
| import '../request_handling/api_request_handler.dart'; |
| import '../request_handling/body.dart'; |
| import '../request_handling/exceptions.dart'; |
| import '../service/cache_service.dart'; |
| import '../service/config.dart'; |
| |
| /// Trigger a cache flush on a config key and return empty response if successful. |
| /// |
| /// If [cacheKeyParam] is not passed, throws [BadRequestException]. |
| /// If the cache does not have the given key, throws [NotFoundException]. |
| @immutable |
| class FlushCache extends ApiRequestHandler<Body> { |
| const FlushCache({ |
| required super.config, |
| required super.authenticationProvider, |
| required this.cache, |
| }); |
| |
| final CacheService cache; |
| |
| /// Name of the query parameter passed to the endpoint. |
| /// |
| /// The value is expected to be an existing value from [CocoonConfig]. |
| static const String cacheKeyParam = 'key'; |
| |
| @override |
| Future<Body> get() async { |
| checkRequiredQueryParameters(<String>[cacheKeyParam]); |
| final String cacheKey = request!.uri.queryParameters[cacheKeyParam]!; |
| |
| // To validate cache flushes, validate that the key exists. |
| await cache.getOrCreate( |
| Config.configCacheName, |
| cacheKey, |
| createFn: () => throw NotFoundException('Failed to find cache key: $cacheKey'), |
| ); |
| |
| await cache.purge(Config.configCacheName, cacheKey); |
| |
| return Body.empty; |
| } |
| } |