diff --git a/templates/dart/base/requests/api.twig b/templates/dart/base/requests/api.twig new file mode 100644 index 000000000..b3e5dd819 --- /dev/null +++ b/templates/dart/base/requests/api.twig @@ -0,0 +1,13 @@ +{% import 'flutter/base/utils.twig' as utils %} + final Map params = { + {{ utils.map_parameter(method.parameters.query) }} + {{ utils.map_parameter(method.parameters.body) }} + }; + + final Map headers = { + {{ utils.map_headers(method.headers) }} + }; + + final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers); + + return {% if method.responseModel and method.responseModel != 'any' %}models.{{method.responseModel | caseUcfirst}}.fromMap(res.data){% else %} res.data{% endif %}; diff --git a/templates/dart/base/requests/file.twig b/templates/dart/base/requests/file.twig new file mode 100644 index 000000000..53b166375 --- /dev/null +++ b/templates/dart/base/requests/file.twig @@ -0,0 +1,42 @@ + {% import 'flutter/base/utils.twig' as utils %} + final Map params = { + {{ utils.map_parameter(method.parameters.query) }} + {{ utils.map_parameter(method.parameters.body) }} + }; + + final Map headers = { + {{ utils.map_headers(method.headers) }} + }; + +{% if 'multipart/form-data' in method.consumes %} + dynamic res; + if(identical(0, 0.0)) { +{% for parameter in method.parameters.all %} +{% if parameter.type == 'file' %} + params['{{ parameter.name }}'] = {{ parameter.name }}.file; +{% endif %} +{% endfor %} + res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers); + } else { + String idParamName = ''; +{% for parameter in method.parameters.all %} +{% if parameter.type == 'file' %} + final paramName = '{{ parameter.name }}'; +{% endif %} +{% if parameter.isUploadID %} + idParamName = '{{ parameter.name }}'; +{% endif %} +{% endfor %} + res = await chunkedUpload( + client: client, + path: path, + params: params, + paramName: paramName, + idParamName: idParamName, + headers: headers, + onProgress: onProgress, + ); + } + + return {% if method.responseModel and method.responseModel != 'any' %}models.{{method.responseModel | caseUcfirst}}.fromMap(res.data){% else %} res.data{% endif %}; +{% endif %} diff --git a/templates/dart/base/requests/location.twig b/templates/dart/base/requests/location.twig new file mode 100644 index 000000000..47731d778 --- /dev/null +++ b/templates/dart/base/requests/location.twig @@ -0,0 +1,14 @@ +{% import 'flutter/base/utils.twig' as utils %} + final Map params = { + {{ utils.map_parameter(method.parameters.query) }} + {{ utils.map_parameter(method.parameters.body) }} +{% if method.security|length > 0 %}{% for node in method.security %} +{% for key,header in node|keys %} + '{{header|caseLower}}': client.config['{{header|caseLower}}'], +{% endfor %} +{% endfor %} +{% endif %} + }; + + final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, responseType: ResponseType.bytes); + return res.data; \ No newline at end of file diff --git a/templates/dart/base/requests/oauth.twig b/templates/dart/base/requests/oauth.twig new file mode 100644 index 000000000..4a19160be --- /dev/null +++ b/templates/dart/base/requests/oauth.twig @@ -0,0 +1,34 @@ +{% import 'flutter/base/utils.twig' as utils %} + final Map params = { + {{ utils.map_parameter(method.parameters.query) }} + {{ utils.map_parameter(method.parameters.body) }} +{% if method.security|length > 0 %} +{% for node in method.security %} +{% for key,header in node|keys %} + '{{header|caseLower}}': client.config['{{header|caseLower}}'], +{% endfor %} +{% endfor %} +{% endif %} + }; + + final List query = []; + + params.forEach((key, value) { + if (value is List) { + for (var item in value) { + query.add(Uri.encodeComponent(key + '[]') + '=' + Uri.encodeComponent(item)); + } + } else if(value != null) { + query.add(Uri.encodeComponent(key) + '=' + Uri.encodeComponent(value)); + } + }); + + Uri endpoint = Uri.parse(client.endPoint); + Uri url = Uri(scheme: endpoint.scheme, + host: endpoint.host, + port: endpoint.port, + path: endpoint.path + path, + query: query.join('&') + ); + + return client.webAuth(url); \ No newline at end of file diff --git a/templates/dart/base/utils.twig b/templates/dart/base/utils.twig new file mode 100644 index 000000000..2a23dbd98 --- /dev/null +++ b/templates/dart/base/utils.twig @@ -0,0 +1,11 @@ +{% macro map_parameter(parameters) %} +{% for parameter in parameters %} +'{{ parameter.name }}': {{ parameter.name | caseCamel | escapeKeyword }}, +{% endfor %} +{% endmacro %} + +{% macro map_headers(headers) %} +{% for key, header in headers %} +'{{ key }}': '{{ header }}', +{% endfor %} +{% endmacro %} \ No newline at end of file diff --git a/templates/dart/lib/services/service.dart.twig b/templates/dart/lib/services/service.dart.twig index 1a5390b2a..fa43fb491 100644 --- a/templates/dart/lib/services/service.dart.twig +++ b/templates/dart/lib/services/service.dart.twig @@ -4,7 +4,6 @@ part of {{ language.params.packageName }}; {% macro method_parameters(parameters, consumes) %} {% if parameters.all|length > 0 %}{{ '{' }}{% for parameter in parameters.all %}{{ _self.parameter(parameter) }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in consumes %}, Function(UploadProgress)? onProgress{% endif %}{{ '}' }}{% endif %} {% endmacro %} -{% macro map_parameter(parameter) %}'{{ parameter.name }}': {{ parameter.name | caseCamel | escapeKeyword }},{% endmacro %} {%if service.description %} {{ service.description|dartComment}} @@ -19,72 +18,17 @@ class {{ service.name | caseUcfirst }} extends Service { {{ method.description | dartComment }} /// {% endif %} - {% if method.type == 'webAuth' %}Future{% elseif method.type == 'location' %} Future {% else %} {% if method.responseModel and method.responseModel != 'any' %}Future{% else %}Future{% endif %}{% endif %} {{ method.name | caseCamel }}({{ _self.method_parameters(method.parameters, method.consumes) }}) async { + {% if method.type == 'location' %} Future {% else %} {% if method.responseModel and method.responseModel != 'any' %}Future{% else %}Future{% endif %}{% endif %} {{ method.name | caseCamel }}({{ _self.method_parameters(method.parameters, method.consumes) }}) async { final String path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replaceAll('{{ '{' }}{{ parameter.name | caseCamel }}{{ '}' }}', {{ parameter.name | caseCamel | escapeKeyword }}){% endfor %}; - final Map params = { -{% for parameter in method.parameters.query %} - {{ _self.map_parameter(parameter) }} -{% endfor %} -{% for parameter in method.parameters.body %} - {{ _self.map_parameter(parameter) }} -{% endfor %} -{% if method.type == 'location' %} -{% if method.security|length > 0 %} -{% for node in method.security %} -{% for key,header in node|keys %} - '{{header|caseLower}}': client.config['{{header|caseLower}}'], -{% endfor %} -{% endfor %} -{% endif %} -{% endif %} - }; - -{% if method.type == 'location' %} - final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, responseType: ResponseType.bytes); - return res.data; -{% else %} - final Map headers = { -{% for key, header in method.headers %} - '{{ key }}': '{{ header }}', -{% endfor %} - }; - - {% if 'multipart/form-data' in method.consumes %} - dynamic res; - if(identical(0, 0.0)) { -{% for parameter in method.parameters.all %} -{% if parameter.type == 'file' %} - params['{{ parameter.name }}'] = {{ parameter.name }}.file; -{% endif %} -{% endfor %} - res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers); - } else { - String idParamName = ''; -{% for parameter in method.parameters.all %} -{% if parameter.type == 'file' %} - final paramName = '{{ parameter.name }}'; -{% endif %} -{% if parameter.isUploadID %} - idParamName = '{{ parameter.name }}'; -{% endif %} -{% endfor %} - res = await chunkedUpload( - client: client, - path: path, - params: params, - paramName: paramName, - idParamName: idParamName, - headers: headers, - onProgress: onProgress, - ); - } +{{ include('dart/base/requests/file.twig') }} +{% elseif method.type == 'location' %} +{{ include('dart/base/requests/location.twig') }} {% else %} - final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers); -{% endif %} - return {% if method.responseModel and method.responseModel != 'any' %}models.{{method.responseModel | caseUcfirst | overrideIdentifier}}.fromMap(res.data){% else %} res.data{% endif %}; +{{ include('dart/base/requests/api.twig') }} {% endif %} + } {% endfor %} } \ No newline at end of file diff --git a/templates/flutter/base/requests/api.twig b/templates/flutter/base/requests/api.twig new file mode 100644 index 000000000..b3e5dd819 --- /dev/null +++ b/templates/flutter/base/requests/api.twig @@ -0,0 +1,13 @@ +{% import 'flutter/base/utils.twig' as utils %} + final Map params = { + {{ utils.map_parameter(method.parameters.query) }} + {{ utils.map_parameter(method.parameters.body) }} + }; + + final Map headers = { + {{ utils.map_headers(method.headers) }} + }; + + final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers); + + return {% if method.responseModel and method.responseModel != 'any' %}models.{{method.responseModel | caseUcfirst}}.fromMap(res.data){% else %} res.data{% endif %}; diff --git a/templates/flutter/base/requests/file.twig b/templates/flutter/base/requests/file.twig new file mode 100644 index 000000000..e2e80cbad --- /dev/null +++ b/templates/flutter/base/requests/file.twig @@ -0,0 +1,42 @@ + {% import 'flutter/base/utils.twig' as utils %} + final Map params = { + {{ utils.map_parameter(method.parameters.query) }} + {{ utils.map_parameter(method.parameters.body) }} + }; + + final Map headers = { + {{ utils.map_headers(method.headers) }} + }; + +{% if 'multipart/form-data' in method.consumes %} + dynamic res; + if(kIsWeb) { +{% for parameter in method.parameters.all %} +{% if parameter.type == 'file' %} + params['{{ parameter.name }}'] = {{ parameter.name }}.file; +{% endif %} +{% endfor %} + res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers); + } else { + String idParamName = ''; +{% for parameter in method.parameters.all %} +{% if parameter.type == 'file' %} + final paramName = '{{ parameter.name }}'; +{% endif %} +{% if parameter.isUploadID %} + idParamName = '{{ parameter.name }}'; +{% endif %} +{% endfor %} + res = await chunkedUpload( + client: client, + path: path, + params: params, + paramName: paramName, + idParamName: idParamName, + headers: headers, + onProgress: onProgress, + ); + } + + return {% if method.responseModel and method.responseModel != 'any' %}models.{{method.responseModel | caseUcfirst}}.fromMap(res.data){% else %} res.data{% endif %}; +{% endif %} diff --git a/templates/flutter/base/requests/location.twig b/templates/flutter/base/requests/location.twig new file mode 100644 index 000000000..47731d778 --- /dev/null +++ b/templates/flutter/base/requests/location.twig @@ -0,0 +1,14 @@ +{% import 'flutter/base/utils.twig' as utils %} + final Map params = { + {{ utils.map_parameter(method.parameters.query) }} + {{ utils.map_parameter(method.parameters.body) }} +{% if method.security|length > 0 %}{% for node in method.security %} +{% for key,header in node|keys %} + '{{header|caseLower}}': client.config['{{header|caseLower}}'], +{% endfor %} +{% endfor %} +{% endif %} + }; + + final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, responseType: ResponseType.bytes); + return res.data; \ No newline at end of file diff --git a/templates/flutter/base/requests/oauth.twig b/templates/flutter/base/requests/oauth.twig new file mode 100644 index 000000000..4a19160be --- /dev/null +++ b/templates/flutter/base/requests/oauth.twig @@ -0,0 +1,34 @@ +{% import 'flutter/base/utils.twig' as utils %} + final Map params = { + {{ utils.map_parameter(method.parameters.query) }} + {{ utils.map_parameter(method.parameters.body) }} +{% if method.security|length > 0 %} +{% for node in method.security %} +{% for key,header in node|keys %} + '{{header|caseLower}}': client.config['{{header|caseLower}}'], +{% endfor %} +{% endfor %} +{% endif %} + }; + + final List query = []; + + params.forEach((key, value) { + if (value is List) { + for (var item in value) { + query.add(Uri.encodeComponent(key + '[]') + '=' + Uri.encodeComponent(item)); + } + } else if(value != null) { + query.add(Uri.encodeComponent(key) + '=' + Uri.encodeComponent(value)); + } + }); + + Uri endpoint = Uri.parse(client.endPoint); + Uri url = Uri(scheme: endpoint.scheme, + host: endpoint.host, + port: endpoint.port, + path: endpoint.path + path, + query: query.join('&') + ); + + return client.webAuth(url); \ No newline at end of file diff --git a/templates/flutter/base/utils.twig b/templates/flutter/base/utils.twig new file mode 100644 index 000000000..331cc931f --- /dev/null +++ b/templates/flutter/base/utils.twig @@ -0,0 +1,11 @@ +{% macro map_parameter(parameters) %} +{% for parameter in parameters %} +'{{ parameter.name }}': {{ parameter.name | caseCamel | escapeKeyword }}, +{% endfor %} +{% endmacro %} + +{% macro map_headers(headers) %} +{% for key, header in headers %} + '{{ key }}': '{{ header }}', +{% endfor %} +{% endmacro %} \ No newline at end of file diff --git a/templates/flutter/lib/services/service.dart.twig b/templates/flutter/lib/services/service.dart.twig index 23cc10289..e253f1cfb 100644 --- a/templates/flutter/lib/services/service.dart.twig +++ b/templates/flutter/lib/services/service.dart.twig @@ -1,10 +1,8 @@ part of {{ language.params.packageName }}; - {% macro parameter(parameter) %}{% if parameter.required %}required {{ parameter.type | typeName }}{% else %}{{ parameter.type | typeName }}?{% endif %} {{ parameter.name | caseCamel | escapeKeyword }}{% endmacro %} {% macro method_parameters(parameters, consumes) %} {% if parameters.all|length > 0 %}{{ '{' }}{% for parameter in parameters.all %}{{ _self.parameter(parameter) }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in consumes %}, Function(UploadProgress)? onProgress{% endif %}{{ '}' }}{% endif %} {% endmacro %} -{% macro map_parameter(parameter) %}'{{ parameter.name }}': {{ parameter.name | caseCamel | escapeKeyword }},{% endmacro %} {%if service.description %} {{ service.description|dartComment}} @@ -22,92 +20,16 @@ class {{ service.name | caseUcfirst }} extends Service { {% if method.type == 'webAuth' %}Future{% elseif method.type == 'location' %} Future {% else %} {% if method.responseModel and method.responseModel != 'any' %}Future{% else %}Future{% endif %}{% endif %} {{ method.name | caseCamel }}({{ _self.method_parameters(method.parameters, method.consumes) }}) async { {% if method.parameters.path | length > 0 %}final{% else %}const{% endif %} String path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replaceAll('{{ '{' }}{{ parameter.name | caseCamel }}{{ '}' }}', {{ parameter.name | caseCamel | escapeKeyword }}){% endfor %}; - final Map params = { -{% for parameter in method.parameters.query %} - {{ _self.map_parameter(parameter) }} -{% endfor %} -{% for parameter in method.parameters.body %} - {{ _self.map_parameter(parameter) }} -{% endfor %} -{% if method.type == 'webAuth' or method.type == 'location' %} -{% if method.security|length > 0 %} -{% for node in method.security %} -{% for key,header in node|keys %} - '{{header|caseLower}}': client.config['{{header|caseLower}}'], -{% endfor %} -{% endfor %} -{% endif %} -{% endif %} - }; - -{% if method.type == 'webAuth' %} - - final List query = []; - - params.forEach((key, value) { - if (value is List) { - for (var item in value) { - query.add(Uri.encodeComponent(key + '[]') + '=' + Uri.encodeComponent(item)); - } - } else if(value != null) { - query.add(Uri.encodeComponent(key) + '=' + Uri.encodeComponent(value)); - } - }); - - Uri endpoint = Uri.parse(client.endPoint); - Uri url = Uri(scheme: endpoint.scheme, - host: endpoint.host, - port: endpoint.port, - path: endpoint.path + path, - query: query.join('&') - ); - - return client.webAuth(url); - -{% elseif method.type == 'location' %} - final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, responseType: ResponseType.bytes); - return res.data; -{% else %} - final Map headers = { -{% for key, header in method.headers %} - '{{ key }}': '{{ header }}', -{% endfor %} - }; - {% if 'multipart/form-data' in method.consumes %} - dynamic res; - if(kIsWeb) { -{% for parameter in method.parameters.all %} -{% if parameter.type == 'file' %} - params['{{ parameter.name }}'] = {{ parameter.name }}.file; -{% endif %} -{% endfor %} - res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers); - } else { - String idParamName = ''; -{% for parameter in method.parameters.all %} -{% if parameter.type == 'file' %} - final paramName = '{{ parameter.name }}'; -{% endif %} -{% if parameter.isUploadID %} - idParamName = '{{ parameter.name }}'; -{% endif %} -{% endfor %} - res = await chunkedUpload( - client: client, - path: path, - params: params, - paramName: paramName, - idParamName: idParamName, - headers: headers, - onProgress: onProgress, - ); - } +{{ include('flutter/base/requests/file.twig') }} +{% elseif method.type == 'webAuth' %} +{{ include('flutter/base/requests/oauth.twig') }} +{% elseif method.type == 'location' %} +{{ include('flutter/base/requests/location.twig') }} {% else %} - final res = await client.call(HttpMethod.{{ method.method | caseLower }}, path: path, params: params, headers: headers); -{% endif %} - return {% if method.responseModel and method.responseModel != 'any' %}models.{{method.responseModel | caseUcfirst}}.fromMap(res.data){% else %} res.data{% endif %}; +{{ include('flutter/base/requests/api.twig') }} {% endif %} + } {% endfor %} } \ No newline at end of file