diff --git a/CHANGELOG.md b/CHANGELOG.md index a39d09e..5e06a81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.2.4 +- Added default query parameters to all calls + +## 1.2.3 +- Added asymetric api response converters +- Added basic auth + ## 1.2.2 - Added requestModel parameter to GET request diff --git a/lib/src/api_service.dart b/lib/src/api_service.dart index b8108df..5a72d50 100644 --- a/lib/src/api_service.dart +++ b/lib/src/api_service.dart @@ -13,8 +13,10 @@ class HttpApiService { ApiConverter? apiResponseConverter, Map defaultHeaders = const {}, + Map defaultQueryParameters = const {}, http.Client? client, }) : _defaultHeaders = defaultHeaders, + _defaultQueryParameters = defaultQueryParameters, _apiResponseConverter = apiResponseConverter ?? NonConverter(), _baseUrl = baseUrl, @@ -27,6 +29,7 @@ class HttpApiService { /// The authentication service used to retrieve credentials. final AuthenticationService authenticationService; final Map _defaultHeaders; + final Map _defaultQueryParameters; final http.Client _client; /// The base URL of the API service. @@ -43,6 +46,7 @@ class HttpApiService { ) => Endpoint._( endpoint: _baseUrl.replace(path: path), + defaultQueryParameter: _defaultQueryParameters, converter: _apiResponseConverter, apiService: this, defaultHeaders: _defaultHeaders, @@ -121,10 +125,17 @@ class HttpApiService { required RequestMethod method, Map? fields, Map? headers, + Map? queryParameters, bool isAuthenticated = false, }) async { + endpoint = endpoint.replace( + queryParameters: { + ..._defaultQueryParameters, + ...?queryParameters, + }, + ); var request = http.MultipartRequest(method.name.toUpperCase(), endpoint); - var allHeaders = headers ?? {}; + var allHeaders = {...?headers}; if (isAuthenticated) { var credentials = await authenticationService.getCredentials(); @@ -161,8 +172,10 @@ class Endpoint { required ApiConverter converter, required HttpApiService apiService, Map defaultHeaders = const {}, + Map defaultQueryParameter = const {}, bool authenticated = false, }) : _defaultHeaders = defaultHeaders, + _defaultQueryParameters = defaultQueryParameter, _converter = converter, _authenticated = authenticated, _apiService = apiService, @@ -172,6 +185,7 @@ class Endpoint { final HttpApiService _apiService; final bool _authenticated; final Map _defaultHeaders; + final Map _defaultQueryParameters; final ApiConverter _converter; /// get the currently set path. @@ -186,6 +200,7 @@ class Endpoint { RequestMethod method = RequestMethod.post, Map? fields, Map? headers, + Map? queryParameters, }) async { var response = await _apiService._upload( endpoint: _endpoint, @@ -195,6 +210,7 @@ class Endpoint { method: method, fields: fields, headers: {..._defaultHeaders, ...?headers}, + queryParameters: {..._defaultQueryParameters, ...?queryParameters}, isAuthenticated: _authenticated, ); @@ -219,12 +235,13 @@ class Endpoint { apiService: _apiService, authenticated: _authenticated, defaultHeaders: _defaultHeaders, + defaultQueryParameter: _defaultQueryParameters, ); } /// Add to the existing default headers. /// - /// This does overwrite existing headers of the same name. + /// This does override existing headers of the same name. Endpoint addHeaders( Map headers, ) => @@ -243,6 +260,31 @@ class Endpoint { apiService: _apiService, authenticated: _authenticated, defaultHeaders: headers, + defaultQueryParameter: _defaultQueryParameters, + ); + + /// Add to existing default query parameters + /// + /// This does override existing query parameters of the same name. + Endpoint addDefaultQueryParameters( + Map queryParameters, + ) => + setDefaultQueryParameters({ + ..._defaultQueryParameters, + ...queryParameters, + }); + + /// Set the default query parameters + Endpoint setDefaultQueryParameters( + Map queryParameters, + ) => + Endpoint._( + endpoint: _endpoint, + converter: _converter, + apiService: _apiService, + authenticated: _authenticated, + defaultHeaders: _defaultQueryParameters, + defaultQueryParameter: queryParameters, ); /// Binds variables to paths. @@ -276,6 +318,7 @@ class Endpoint { apiService: _apiService, authenticated: _authenticated, defaultHeaders: _defaultHeaders, + defaultQueryParameter: _defaultQueryParameters, ); } @@ -286,6 +329,7 @@ class Endpoint { converter: _converter, authenticated: true, defaultHeaders: _defaultHeaders, + defaultQueryParameter: _defaultQueryParameters, ); /// Add a response converter to more easily handle response conversion @@ -298,6 +342,7 @@ class Endpoint { apiService: _apiService, authenticated: _authenticated, defaultHeaders: _defaultHeaders, + defaultQueryParameter: _defaultQueryParameters, ); /// Change the multiplicity of the endpoint @@ -395,7 +440,12 @@ class Endpoint { RequestModel? requestModel, Encoding? encoding, }) async { - var endpoint = _endpoint.replace(queryParameters: queryParameters ?? {}); + var endpoint = _endpoint.replace( + queryParameters: { + ..._defaultQueryParameters, + ...?queryParameters, + }, + ); Object? body; if (requestModel != null) { diff --git a/pubspec.yaml b/pubspec.yaml index aed3bbc..94c10c5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: dart_api_service description: A starting point for Dart libraries or applications. -version: 1.2.3 +version: 1.2.4 repository: https://github.com/Iconica-Development/dart_api_service publish_to: https://forgejo.internal.iconica.nl/api/packages/internal/pub/