Skip to content

Commit 17cdffc

Browse files
Merge pull request #469 from appwrite/feat-service-level-params
Service level attributes
2 parents 6ec112a + 8a67db5 commit 17cdffc

File tree

30 files changed

+307
-145
lines changed

30 files changed

+307
-145
lines changed

specs/swagger2-latest-console.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

src/SDK/Language/Dart.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public function getKeywords()
112112
*/
113113
public function getIdentifierOverrides()
114114
{
115-
return ['Function' => 'Func'];
115+
return ['Function' => 'Func', 'default' => 'xdefault', 'required' => 'xrequired'];
116116
}
117117

118118
/**

src/SDK/SDK.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,7 @@ public function generate($target)
556556
foreach ($this->spec->getServices() as $key => $service) {
557557
$methods = $this->spec->getMethods($key);
558558
$params['service'] = [
559+
'globalParams' => $service['globalParams'] ?? [],
559560
'description' => $service['description'] ?? '',
560561
'name' => $key,
561562
'features' => [

src/Spec/Swagger2.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66

77
class Swagger2 extends Spec
88
{
9+
/**
10+
* @var array
11+
*/
12+
private array $serviceParams = [];
913

1014
/**
1115
* @return string
@@ -104,9 +108,11 @@ public function getServices()
104108
if (isset($method['tags'])) {
105109
foreach ($method['tags'] as $tag) {
106110
if (!array_key_exists($tag, $list)) {
111+
$methods = $this->getMethods($tag);
107112
$list[$tag] = [
108113
'name' => $tag,
109-
'methods' => $this->getMethods($tag),
114+
'methods' => $methods,
115+
'globalParams' => $this->serviceParams[$tag] ?? [],
110116
];
111117
}
112118
}
@@ -132,7 +138,7 @@ public function getServices()
132138
public function getMethods($service)
133139
{
134140
$list = [];
135-
141+
$serviceParams= [];
136142
$security = $this->getAttribute('securityDefinitions', []);
137143
$paths = $this->getAttribute('paths', []);
138144

@@ -204,6 +210,7 @@ public function getMethods($service)
204210
'default' => $parameter['default'] ?? null,
205211
'example' => $parameter['x-example'] ?? null,
206212
'isUploadID' => $parameter['x-upload-id'] ?? false,
213+
'isGlobal' => $parameter['x-global'] ?? false,
207214
'array' => [
208215
'type' => $parameter['items']['type'] ?? '',
209216
],
@@ -215,6 +222,10 @@ public function getMethods($service)
215222

216223
$param['default'] = (is_array($param['default'])) ? json_encode($param['default']) : $param['default'];
217224

225+
if(($parameter['x-global'] ?? false)) {
226+
$serviceParams[$param['name']] = $param;
227+
}
228+
218229
switch ($parameter['in']) {
219230
case 'header':
220231
$output['parameters']['header'][] = $param;
@@ -239,6 +250,7 @@ public function getMethods($service)
239250
$param['required'] = (in_array($key, $bodyRequired));
240251
$param['default'] = $value['default'] ?? null;
241252
$param['example'] = $value['x-example'] ?? null;
253+
$param['isGlobal'] = $value['x-global'] ?? false;
242254
$param['isUploadID'] = $value['x-upload-id'] ?? false;
243255
$param['array'] = [
244256
'type' => $value['items']['type'] ?? '',
@@ -270,6 +282,8 @@ public function getMethods($service)
270282
}
271283
}
272284

285+
$this->serviceParams[$service] = $serviceParams;
286+
273287
return $list;
274288
}
275289

templates/dart/base/requests/api.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% import 'flutter/base/utils.twig' as utils %}
1+
{% import 'dart/base/utils.twig' as utils %}
22
final Map<String, dynamic> params = {
33
{{ utils.map_parameter(method.parameters.query) }}
44
{{ utils.map_parameter(method.parameters.body) }}

templates/dart/base/requests/file.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% import 'flutter/base/utils.twig' as utils %}
1+
{% import 'dart/base/utils.twig' as utils %}
22
final Map<String, dynamic> params = {
33
{{ utils.map_parameter(method.parameters.query) }}
44
{{ utils.map_parameter(method.parameters.body) }}

templates/dart/base/requests/location.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% import 'flutter/base/utils.twig' as utils %}
1+
{% import 'dart/base/utils.twig' as utils %}
22
final Map<String, dynamic> params = {
33
{{ utils.map_parameter(method.parameters.query) }}
44
{{ utils.map_parameter(method.parameters.body) }}

templates/dart/base/requests/oauth.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% import 'flutter/base/utils.twig' as utils %}
1+
{% import 'dart/base/utils.twig' as utils %}
22
final Map<String, dynamic> params = {
33
{{ utils.map_parameter(method.parameters.query) }}
44
{{ utils.map_parameter(method.parameters.body) }}

templates/dart/base/utils.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@
88
{% for key, header in headers %}
99
'{{ key }}': '{{ header }}',
1010
{% endfor %}
11-
{% endmacro %}
11+
{% endmacro %}

templates/dart/lib/services/service.dart.twig

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
part of {{ language.params.packageName }};
2-
{% macro parameter(parameter) %}
3-
{% if parameter.required %}required {{ parameter.type | typeName }}{% else %}{{ parameter.type | typeName }}?{% endif %} {{ parameter.name | caseCamel | escapeKeyword }}{% endmacro %}
2+
{% macro parameter(parameter) %}{% if parameter.required %}required {{ parameter.type | typeName }}{% else %}{{ parameter.type | typeName }}?{% endif %} {{ parameter.name | caseCamel | overrideIdentifier }}{% endmacro %}
43
{% macro method_parameters(parameters, consumes) %}
5-
{% 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 %}
4+
{% if parameters|length > 0 %}{{ '{' }}{% for parameter in parameters %}{{ _self.parameter(parameter) }}{% if not loop.last %}, {% endif %}{% endfor %}{% if 'multipart/form-data' in consumes %}, Function(UploadProgress)? onProgress{% endif %}{{ '}' }}{% endif %}
5+
{% endmacro %}
6+
{% macro service_params(parameters) %}
7+
{% if parameters|length > 0 %}{{ ', {' }}{% for parameter in parameters %}{% if parameter.required %}required {% endif %}this.{{ parameter.name | caseCamel | overrideIdentifier }}{% if not loop.last %}, {% endif %}{% endfor %}{{ '}' }}{% endif %}
68
{% endmacro %}
79

810
{%if service.description %}
911
{{ service.description|dartComment}}
1012
{% endif %}
1113
class {{ service.name | caseUcfirst }} extends Service {
12-
{{ service.name | caseUcfirst }}(Client client): super(client);
14+
{{ service.name | caseUcfirst }}(Client client{{ _self.service_params(service.globalParams) }}): super(client);
15+
{% if service.globalParams | length %}
16+
{% for parameter in service.globalParams %}
17+
{{ parameter.type | typeName }}{% if not parameter.required %}?{% endif %} {{ parameter.name | caseCamel | overrideIdentifier }};
18+
{% endfor %}
19+
{% endif %}
1320
{% for method in service.methods %}
1421

1522
/// {{ method.title }}
@@ -18,7 +25,7 @@ class {{ service.name | caseUcfirst }} extends Service {
1825
{{ method.description | dartComment }}
1926
///
2027
{% endif %}
21-
{% if method.type == 'location' %} Future<Uint8List> {% else %} {% if method.responseModel and method.responseModel != 'any' %}Future<models.{{method.responseModel | caseUcfirst | overrideIdentifier}}>{% else %}Future{% endif %}{% endif %} {{ method.name | caseCamel }}({{ _self.method_parameters(method.parameters, method.consumes) }}) async {
28+
{% if method.type == 'location' %} Future<Uint8List> {% else %} {% if method.responseModel and method.responseModel != 'any' %}Future<models.{{method.responseModel | caseUcfirst | overrideIdentifier}}>{% else %}Future{% endif %}{% endif %} {{ method.name | caseCamel }}({{ _self.method_parameters(method.parameters.all | filter((param) => not param.isGlobal), method.consumes) }}) async {
2229
final String path = '{{ method.path }}'{% for parameter in method.parameters.path %}.replaceAll('{{ '{' }}{{ parameter.name | caseCamel }}{{ '}' }}', {{ parameter.name | caseCamel | escapeKeyword }}){% endfor %};
2330

2431
{% if 'multipart/form-data' in method.consumes %}

0 commit comments

Comments
 (0)