Skip to content

Commit

Permalink
added basic api docs variables for the three methods of API versioning.
Browse files Browse the repository at this point in the history
  • Loading branch information
eelco2k committed Aug 18, 2024
1 parent a2d57ed commit fea4cf3
Show file tree
Hide file tree
Showing 5 changed files with 322 additions and 18 deletions.
68 changes: 65 additions & 3 deletions stubs/Api/CreateHandler.stub
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,36 @@ $hasTenancy = $panel->hasTenancy();
$tenantSlugAttribute = $panel->getTenantSlugAttribute();
$panelPrefix = app(ApiService::class)->isRoutePrefixedByPanel() ? $panelPath ?? $panelId : '';

defined("API_DEFAULT_TRANSFORMER_NAME") ?: define("API_DEFAULT_TRANSFORMER_NAME", config('api-service.route.default_transformer_name'));
defined("API_VERSION_PARAMETER_NAME") ?: define("API_VERSION_PARAMETER_NAME", config('api-service.route.api_version_parameter_name'));
defined("API_TRANSFORMER_HEADER") ?: define("API_TRANSFORMER_HEADER", config('api-service.route.api_transformer_header'));

function apiVersionPath() {
defined("API_VERSION_URL_PATH") ?: define("API_VERSION_URL_PATH", '{version}/');
}

function apiVersionQuery() {
defined("API_VERSION_URL_QUERY") ?: define("API_VERSION_URL_QUERY", true);
}

function apiVersionHeaders() {
defined("API_VERSION_URL_HEADERS") ?: define("API_VERSION_URL_HEADERS", true);
}

function apiVersionDefault() {
defined("API_VERSION_URL_PATH") ?: define("API_VERSION_URL_PATH", '');
defined("API_VERSION_URL_QUERY") ?: define("API_VERSION_URL_QUERY", false);
defined("API_VERSION_URL_HEADERS") ?: define("API_VERSION_URL_HEADERS", false);
}

match (config('api-service.route.api_version_method')) {
'path' => apiVersionPath(),
'query' => apiVersionQuery(),
'headers' => apiVersionHeaders(),
default => apiVersionDefault(),
};


if (
ApiService::isTenancyEnabled() &&
ApiService::tenancyAwareness() &&
Expand Down Expand Up @@ -49,7 +79,7 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));
(TENANT_AWARENESS_{{ capitalsResource }}) ?
new OAT\Server(
description: "API Server Filament Panel",
url: BASE_URL . "/api/{panel}" . PANEL_PREFIX_{{ capitalsResource }}_CREATE . "/{tenant}",
url: BASE_URL . "/api/" . API_VERSION_URL_PATH . "{panel}" . PANEL_PREFIX_{{ capitalsResource }}_CREATE . "/{tenant}",
variables: [
new OAT\ServerVariable(
serverVariable: "panel",
Expand All @@ -63,16 +93,48 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));
default: ""
),

]
(API_VERSION_URL_PATH != '') ?
new OAT\ServerVariable(
serverVariable: "version",
description: 'Version or Transformer name of this API endpoint',
default: API_DEFAULT_TRANSFORMER_NAME,
),
: null,
]
) :
new OAT\Server(
description: "API Server Filament Panel",
url: BASE_URL . "/api/" . PANEL_PREFIX_{{ capitalsResource }}_CREATE . "/",
url: BASE_URL . "/api/" . API_VERSION_URL_PATH . PANEL_PREFIX_{{ capitalsResource }}_CREATE . "/",
variables: [
(API_VERSION_URL_PATH != '') ?
new OAT\ServerVariable(
serverVariable: "version",
description: 'Version or Transformer name of this API endpoint',
default: API_DEFAULT_TRANSFORMER_NAME,
),
: null,
]
)
],
security: (!RESOURCE_PUBLIC_{{ capitalsResource }}_CREATE) ? [["bearerAuth" => []]] : null,
parameters: [
// (TENANT_AWARENESS_{{ capitalsResource }}) ? new OAT\Parameter(ref: "#/components/parameters/tenant") : null,

(API_VERSION_URL_QUERY) ? new OAT\Parameter(
name: API_VERSION_PARAMETER_NAME,
in: "query",
required: true,
description: "Set the correct API Version / Transformer you want to use.",
schema: new OAT\Schema(type: "string")
) : null,

(API_VERSION_URL_HEADERS) ? new OAT\Parameter(
name: API_TRANSFORMER_HEADER,
in: "header",
required: true,
description: "Set the correct API Version / Transformer you want to use.",
schema: new OAT\Schema(type: "string")
) : null,
],
requestBody: new OAT\RequestBody(
required: true,
Expand Down
66 changes: 63 additions & 3 deletions stubs/Api/DeleteHandler.stub
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,35 @@ $hasTenancy = $panel->hasTenancy();
$tenantSlugAttribute = $panel->getTenantSlugAttribute();
$panelPrefix = app(ApiService::class)->isRoutePrefixedByPanel() ? $panelPath ?? $panelId : '';

defined("API_DEFAULT_TRANSFORMER_NAME") ?: define("API_DEFAULT_TRANSFORMER_NAME", config('api-service.route.default_transformer_name'));
defined("API_VERSION_PARAMETER_NAME") ?: define("API_VERSION_PARAMETER_NAME", config('api-service.route.api_version_parameter_name'));
defined("API_TRANSFORMER_HEADER") ?: define("API_TRANSFORMER_HEADER", config('api-service.route.api_transformer_header'));

function apiVersionPath() {
defined("API_VERSION_URL_PATH") ?: define("API_VERSION_URL_PATH", '{version}/');
}

function apiVersionQuery() {
defined("API_VERSION_URL_QUERY") ?: define("API_VERSION_URL_QUERY", true);
}

function apiVersionHeaders() {
defined("API_VERSION_URL_HEADERS") ?: define("API_VERSION_URL_HEADERS", true);
}

function apiVersionDefault() {
defined("API_VERSION_URL_PATH") ?: define("API_VERSION_URL_PATH", '');
defined("API_VERSION_URL_QUERY") ?: define("API_VERSION_URL_QUERY", false);
defined("API_VERSION_URL_HEADERS") ?: define("API_VERSION_URL_HEADERS", false);
}

match (config('api-service.route.api_version_method')) {
'path' => apiVersionPath(),
'query' => apiVersionQuery(),
'headers' => apiVersionHeaders(),
default => apiVersionDefault(),
};

if (
ApiService::isTenancyEnabled() &&
ApiService::tenancyAwareness() &&
Expand Down Expand Up @@ -49,7 +78,7 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));
(TENANT_AWARENESS_{{ capitalsResource }}) ?
new OAT\Server(
description: "API Server Filament Panel",
url: BASE_URL . "/api/{panel}" . PANEL_PREFIX_{{ capitalsResource }}_DELETE . "/{tenant}",
url: BASE_URL . "/api/" . API_VERSION_URL_PATH . "{panel}" . PANEL_PREFIX_{{ capitalsResource }}_DELETE . "/{tenant}",
variables: [
new OAT\ServerVariable(
serverVariable: "panel",
Expand All @@ -62,11 +91,27 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));
description: 'ID of the tenant',
default: ""
),
]
(API_VERSION_URL_PATH != '') ?
new OAT\ServerVariable(
serverVariable: "version",
description: 'Version or Transformer name of this API endpoint',
default: API_DEFAULT_TRANSFORMER_NAME,
),
: null,
]
) :
new OAT\Server(
description: "API Server Filament Panel",
url: BASE_URL . "/api/" . PANEL_PREFIX_{{ capitalsResource }}_DELETE . "/",
url: BASE_URL . "/api/" . API_VERSION_URL_PATH . PANEL_PREFIX_{{ capitalsResource }}_DELETE . "/",
variables: [
(API_VERSION_URL_PATH != '') ?
new OAT\ServerVariable(
serverVariable: "version",
description: 'Version or Transformer name of this API endpoint',
default: API_DEFAULT_TRANSFORMER_NAME,
),
: null,
]
)
],
security: (!RESOURCE_PUBLIC_{{ capitalsResource }}_DELETE) ? [["bearerAuth" => []]] : null,
Expand All @@ -80,6 +125,21 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));
schema: new OAT\Schema(type: "integer"),
example: "", // OAT\Examples(example="int", value="0", summary="An int value."),
),
(API_VERSION_URL_QUERY) ? new OAT\Parameter(
name: API_VERSION_PARAMETER_NAME,
in: "query",
required: true,
description: "Set the correct API Version / Transformer you want to use.",
schema: new OAT\Schema(type: "string")
) : null,

(API_VERSION_URL_HEADERS) ? new OAT\Parameter(
name: API_TRANSFORMER_HEADER,
in: "header",
required: true,
description: "Set the correct API Version / Transformer you want to use.",
schema: new OAT\Schema(type: "string")
) : null,
],
responses: [
new OAT\Response(response: 200, description: 'Operation succesful', content: new OAT\JsonContent(type: "object", properties: [
Expand Down
69 changes: 65 additions & 4 deletions stubs/Api/DetailHandler.stub
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,36 @@ $hasTenancy = $panel->hasTenancy();
$tenantSlugAttribute = $panel->getTenantSlugAttribute();
$panelPrefix = app(ApiService::class)->isRoutePrefixedByPanel() ? $panelPath ?? $panelId : '';

defined("API_DEFAULT_TRANSFORMER_NAME") ?: define("API_DEFAULT_TRANSFORMER_NAME", config('api-service.route.default_transformer_name'));
defined("API_VERSION_PARAMETER_NAME") ?: define("API_VERSION_PARAMETER_NAME", config('api-service.route.api_version_parameter_name'));
defined("API_TRANSFORMER_HEADER") ?: define("API_TRANSFORMER_HEADER", config('api-service.route.api_transformer_header'));

function apiVersionPath() {
defined("API_VERSION_URL_PATH") ?: define("API_VERSION_URL_PATH", '{version}/');
}

function apiVersionQuery() {
defined("API_VERSION_URL_QUERY") ?: define("API_VERSION_URL_QUERY", true);
}

function apiVersionHeaders() {
defined("API_VERSION_URL_HEADERS") ?: define("API_VERSION_URL_HEADERS", true);
}

function apiVersionDefault() {
defined("API_VERSION_URL_PATH") ?: define("API_VERSION_URL_PATH", '');
defined("API_VERSION_URL_QUERY") ?: define("API_VERSION_URL_QUERY", false);
defined("API_VERSION_URL_HEADERS") ?: define("API_VERSION_URL_HEADERS", false);
}

match (config('api-service.route.api_version_method')) {
'path' => apiVersionPath(),
'query' => apiVersionQuery(),
'headers' => apiVersionHeaders(),
default => apiVersionDefault(),
};


if (
ApiService::isTenancyEnabled() &&
ApiService::tenancyAwareness() &&
Expand Down Expand Up @@ -59,7 +89,7 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));
(TENANT_AWARENESS_{{ capitalsResource }}) ?
new OAT\Server(
description: "API Server Filament Panel",
url: BASE_URL . "/api/{panel}" . PANEL_PREFIX_{{ capitalsResource }}_DETAIL . "/{tenant}",
url: BASE_URL . "/api/" . API_VERSION_URL_PATH . "{panel}" . PANEL_PREFIX_{{ capitalsResource }}_DETAIL . "/{tenant}",
variables: [
new OAT\ServerVariable(
serverVariable: "panel",
Expand All @@ -72,12 +102,27 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));
description: 'ID of the tenant',
default: ""
),

]
(API_VERSION_URL_PATH != '') ?
new OAT\ServerVariable(
serverVariable: "version",
description: 'Version or Transformer name of this API endpoint',
default: API_DEFAULT_TRANSFORMER_NAME,
),
: null,
]
) :
new OAT\Server(
description: "API Server Filament Panel",
url: BASE_URL . "/api/" . PANEL_PREFIX_{{ capitalsResource }}_DETAIL . "/",
url: BASE_URL . "/api/" . API_VERSION_URL_PATH . PANEL_PREFIX_{{ capitalsResource }}_DETAIL . "/",
variables: [
(API_VERSION_URL_PATH != '') ?
new OAT\ServerVariable(
serverVariable: "version",
description: 'Version or Transformer name of this API endpoint',
default: API_DEFAULT_TRANSFORMER_NAME,
),
: null,
]
)
],
security: (!RESOURCE_PUBLIC_{{ capitalsResource }}_DETAIL) ? [["bearerAuth" => []]] : null,
Expand All @@ -93,6 +138,22 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));

// (TENANT_AWARENESS_{{ capitalsResource }}) ? new OAT\Parameter(ref: "#/components/parameters/tenant") : null,

(API_VERSION_URL_QUERY) ? new OAT\Parameter(
name: API_VERSION_PARAMETER_NAME,
in: "query",
required: true,
description: "Set the correct API Version / Transformer you want to use.",
schema: new OAT\Schema(type: "string")
) : null,

(API_VERSION_URL_HEADERS) ? new OAT\Parameter(
name: API_TRANSFORMER_HEADER,
in: "header",
required: true,
description: "Set the correct API Version / Transformer you want to use.",
schema: new OAT\Schema(type: "string")
) : null,

new OAT\Parameter(
name: "id",
description: "{{ modelClass }} ID",
Expand Down
68 changes: 64 additions & 4 deletions stubs/Api/PaginationHandler.stub
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,35 @@ $hasTenancy = $panel->hasTenancy();
$tenantSlugAttribute = $panel->getTenantSlugAttribute();
$panelPrefix = app(ApiService::class)->isRoutePrefixedByPanel() ? $panelPath ?? $panelId : '';

defined("API_DEFAULT_TRANSFORMER_NAME") ?: define("API_DEFAULT_TRANSFORMER_NAME", config('api-service.route.default_transformer_name'));
defined("API_VERSION_PARAMETER_NAME") ?: define("API_VERSION_PARAMETER_NAME", config('api-service.route.api_version_parameter_name'));
defined("API_TRANSFORMER_HEADER") ?: define("API_TRANSFORMER_HEADER", config('api-service.route.api_transformer_header'));

function apiVersionPath() {
defined("API_VERSION_URL_PATH") ?: define("API_VERSION_URL_PATH", '{version}/');
}

function apiVersionQuery() {
defined("API_VERSION_URL_QUERY") ?: define("API_VERSION_URL_QUERY", true);
}

function apiVersionHeaders() {
defined("API_VERSION_URL_HEADERS") ?: define("API_VERSION_URL_HEADERS", true);
}

function apiVersionDefault() {
defined("API_VERSION_URL_PATH") ?: define("API_VERSION_URL_PATH", '');
defined("API_VERSION_URL_QUERY") ?: define("API_VERSION_URL_QUERY", false);
defined("API_VERSION_URL_HEADERS") ?: define("API_VERSION_URL_HEADERS", false);
}

match (config('api-service.route.api_version_method')) {
'path' => apiVersionPath(),
'query' => apiVersionQuery(),
'headers' => apiVersionHeaders(),
default => apiVersionDefault(),
};

if (
ApiService::isTenancyEnabled() &&
ApiService::tenancyAwareness() &&
Expand Down Expand Up @@ -59,7 +88,7 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));
(TENANT_AWARENESS_{{ capitalsResource }}) ?
new OAT\Server(
description: "API Server Filament Panel",
url: BASE_URL . "/api/{panel}" . PANEL_PREFIX_{{ capitalsResource }}_PAGINATION . "/{tenant}",
url: BASE_URL . "/api/" . API_VERSION_URL_PATH . "{panel}" . PANEL_PREFIX_{{ capitalsResource }}_PAGINATION . "/{tenant}",
variables: [
new OAT\ServerVariable(
serverVariable: "panel",
Expand All @@ -72,12 +101,27 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));
description: 'ID of the tenant',
default: ""
),

]
(API_VERSION_URL_PATH != '') ?
new OAT\ServerVariable(
serverVariable: "version",
description: 'Version or Transformer name of this API endpoint',
default: API_DEFAULT_TRANSFORMER_NAME,
),
: null,
]
) :
new OAT\Server(
description: "API Server Filament Panel",
url: BASE_URL . "/api/" . PANEL_PREFIX_{{ capitalsResource }}_PAGINATION . "/",
url: BASE_URL . "/api/" . API_VERSION_URL_PATH . API_VERSION_URL_PATH . PANEL_PREFIX_{{ capitalsResource }}_PAGINATION . "/",
variables: [
(API_VERSION_URL_PATH != '') ?
new OAT\ServerVariable(
serverVariable: "version",
description: 'Version or Transformer name of this API endpoint',
default: API_DEFAULT_TRANSFORMER_NAME,
),
: null,
]
)
],
summary: "Get list of {{ pluralClass }}",
Expand All @@ -96,6 +140,22 @@ defined("BASE_URL") ?: define("BASE_URL", config('app.url'));
// (TENANT_AWARENESS_{{ capitalsResource }}) ? new OAT\Parameter(ref: "#/components/parameters/tenant") : null,
// (TENANT_AWARENESS_{{ capitalsResource }}) ? new OAT\Parameter(name: "tenant", description: 'ID of the tenant', schema: new OAT\Schema(type: 'integer|string'), required: true, in: "path") : null,

(API_VERSION_URL_QUERY) ? new OAT\Parameter(
name: API_VERSION_PARAMETER_NAME,
in: "query",
required: true,
description: "Set the correct API Version / Transformer you want to use.",
schema: new OAT\Schema(type: "string")
) : null,

(API_VERSION_URL_HEADERS) ? new OAT\Parameter(
name: API_TRANSFORMER_HEADER,
in: "header",
required: true,
description: "Set the correct API Version / Transformer you want to use.",
schema: new OAT\Schema(type: "string")
) : null,

new OAT\Parameter(
name: "page[offset]",
description: "Pagination offset option",
Expand Down
Loading

0 comments on commit fea4cf3

Please sign in to comment.