diff --git a/fern/definition/servers/common.yml b/fern/definition/servers/common.yml index f02d0fa847..85ff88be18 100644 --- a/fern/definition/servers/common.yml +++ b/fern/definition/servers/common.yml @@ -17,7 +17,6 @@ types: lifecycle: Lifecycle created_at: long started_at: optional - connectable_at: optional destroyed_at: optional Runtime: @@ -95,3 +94,9 @@ types: tags: docs: Tags of this build type: map + + Datacenter: + properties: + id: uuid + slug: string + name: string diff --git a/fern/definition/servers/datacenters.yml b/fern/definition/servers/datacenters.yml new file mode 100644 index 0000000000..f43f5db49e --- /dev/null +++ b/fern/definition/servers/datacenters.yml @@ -0,0 +1,27 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/fern-api/fern/main/fern.schema.json + +imports: + commons: ../common.yml + localCommons: common.yml + uploadCommons: ../upload/common.yml + +service: + auth: true + base-path: /games/{game_id}/environments/{environment_id}/datacenters + path-parameters: + game_id: uuid + environment_id: uuid + endpoints: + listDatacenters: + path: "" + method: GET + request: + name: ListDatacentersRequest + response: ListDatacentersResponse + +types: + ListDatacentersResponse: + properties: + datacenters: + type: list + diff --git a/sdks/full/go/servers/client/client.go b/sdks/full/go/servers/client/client.go index 8b01708208..1499d84a30 100644 --- a/sdks/full/go/servers/client/client.go +++ b/sdks/full/go/servers/client/client.go @@ -16,6 +16,7 @@ import ( core "sdk/core" servers "sdk/servers" builds "sdk/servers/builds" + datacenters "sdk/servers/datacenters" logs "sdk/servers/logs" ) @@ -24,8 +25,9 @@ type Client struct { caller *core.Caller header http.Header - Builds *builds.Client - Logs *logs.Client + Builds *builds.Client + Datacenters *datacenters.Client + Logs *logs.Client } func NewClient(opts ...core.ClientOption) *Client { @@ -34,11 +36,12 @@ func NewClient(opts ...core.ClientOption) *Client { opt(options) } return &Client{ - baseURL: options.BaseURL, - caller: core.NewCaller(options.HTTPClient), - header: options.ToHeader(), - Builds: builds.NewClient(opts...), - Logs: logs.NewClient(opts...), + baseURL: options.BaseURL, + caller: core.NewCaller(options.HTTPClient), + header: options.ToHeader(), + Builds: builds.NewClient(opts...), + Datacenters: datacenters.NewClient(opts...), + Logs: logs.NewClient(opts...), } } diff --git a/sdks/full/go/servers/datacenters.go b/sdks/full/go/servers/datacenters.go new file mode 100644 index 0000000000..8e35fdf45f --- /dev/null +++ b/sdks/full/go/servers/datacenters.go @@ -0,0 +1,38 @@ +// This file was auto-generated by Fern from our API Definition. + +package servers + +import ( + json "encoding/json" + fmt "fmt" + core "sdk/core" +) + +type ListDatacentersResponse struct { + Datacenters []*Datacenter `json:"datacenters,omitempty"` + + _rawJSON json.RawMessage +} + +func (l *ListDatacentersResponse) UnmarshalJSON(data []byte) error { + type unmarshaler ListDatacentersResponse + var value unmarshaler + if err := json.Unmarshal(data, &value); err != nil { + return err + } + *l = ListDatacentersResponse(value) + l._rawJSON = json.RawMessage(data) + return nil +} + +func (l *ListDatacentersResponse) String() string { + if len(l._rawJSON) > 0 { + if value, err := core.StringifyJSON(l._rawJSON); err == nil { + return value + } + } + if value, err := core.StringifyJSON(l); err == nil { + return value + } + return fmt.Sprintf("%#v", l) +} diff --git a/sdks/full/go/servers/datacenters/client.go b/sdks/full/go/servers/datacenters/client.go new file mode 100644 index 0000000000..91506e1336 --- /dev/null +++ b/sdks/full/go/servers/datacenters/client.go @@ -0,0 +1,112 @@ +// This file was auto-generated by Fern from our API Definition. + +package datacenters + +import ( + bytes "bytes" + context "context" + json "encoding/json" + errors "errors" + fmt "fmt" + uuid "github.com/google/uuid" + io "io" + http "net/http" + sdk "sdk" + core "sdk/core" + servers "sdk/servers" +) + +type Client struct { + baseURL string + caller *core.Caller + header http.Header +} + +func NewClient(opts ...core.ClientOption) *Client { + options := core.NewClientOptions() + for _, opt := range opts { + opt(options) + } + return &Client{ + baseURL: options.BaseURL, + caller: core.NewCaller(options.HTTPClient), + header: options.ToHeader(), + } +} + +func (c *Client) ListDatacenters(ctx context.Context, gameId uuid.UUID, environmentId uuid.UUID) (*servers.ListDatacentersResponse, error) { + baseURL := "https://api.rivet.gg" + if c.baseURL != "" { + baseURL = c.baseURL + } + endpointURL := fmt.Sprintf(baseURL+"/"+"games/%v/environments/%v/datacenters", gameId, environmentId) + + errorDecoder := func(statusCode int, body io.Reader) error { + raw, err := io.ReadAll(body) + if err != nil { + return err + } + apiError := core.NewAPIError(statusCode, errors.New(string(raw))) + decoder := json.NewDecoder(bytes.NewReader(raw)) + switch statusCode { + case 500: + value := new(sdk.InternalError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 429: + value := new(sdk.RateLimitError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 403: + value := new(sdk.ForbiddenError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 408: + value := new(sdk.UnauthorizedError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 404: + value := new(sdk.NotFoundError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + case 400: + value := new(sdk.BadRequestError) + value.APIError = apiError + if err := decoder.Decode(value); err != nil { + return apiError + } + return value + } + return apiError + } + + var response *servers.ListDatacentersResponse + if err := c.caller.Call( + ctx, + &core.CallParams{ + URL: endpointURL, + Method: http.MethodGet, + Headers: c.header, + Response: &response, + ErrorDecoder: errorDecoder, + }, + ); err != nil { + return nil, err + } + return response, nil +} diff --git a/sdks/full/go/servers/types.go b/sdks/full/go/servers/types.go index b576d37c27..8d51bb788c 100644 --- a/sdks/full/go/servers/types.go +++ b/sdks/full/go/servers/types.go @@ -104,6 +104,37 @@ func (b *Build) String() string { return fmt.Sprintf("%#v", b) } +type Datacenter struct { + Id uuid.UUID `json:"id"` + Slug string `json:"slug"` + Name string `json:"name"` + + _rawJSON json.RawMessage +} + +func (d *Datacenter) UnmarshalJSON(data []byte) error { + type unmarshaler Datacenter + var value unmarshaler + if err := json.Unmarshal(data, &value); err != nil { + return err + } + *d = Datacenter(value) + d._rawJSON = json.RawMessage(data) + return nil +} + +func (d *Datacenter) String() string { + if len(d._rawJSON) > 0 { + if value, err := core.StringifyJSON(d._rawJSON); err == nil { + return value + } + } + if value, err := core.StringifyJSON(d); err == nil { + return value + } + return fmt.Sprintf("%#v", d) +} + type GameGuardRouting struct { _rawJSON json.RawMessage } diff --git a/sdks/full/openapi/openapi.yml b/sdks/full/openapi/openapi.yml index b58a84bfca..190ba5f285 100644 --- a/sdks/full/openapi/openapi.yml +++ b/sdks/full/openapi/openapi.yml @@ -9564,6 +9564,68 @@ paths: schema: $ref: '#/components/schemas/ErrorBody' security: *ref_0 + /games/{game_id}/environments/{environment_id}/datacenters: + get: + operationId: servers_datacenters_listDatacenters + tags: + - ServersDatacenters + parameters: + - name: game_id + in: path + required: true + schema: + type: string + format: uuid + - name: environment_id + in: path + required: true + schema: + type: string + format: uuid + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ServersListDatacentersResponse' + '400': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '403': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '404': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '408': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '429': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + '500': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + security: *ref_0 /games/{game_id}/environments/{environment_id}/servers/{server_id}/logs: get: description: Returns the logs for a given server. @@ -14500,6 +14562,29 @@ components: - created_at - content_length - tags + ServersDatacenter: + type: object + properties: + id: + type: string + format: uuid + slug: + type: string + name: + type: string + required: + - id + - slug + - name + ServersListDatacentersResponse: + type: object + properties: + datacenters: + type: array + items: + $ref: '#/components/schemas/ServersDatacenter' + required: + - datacenters ServersGetServerLogsResponse: type: object properties: diff --git a/sdks/full/openapi_compat/openapi.yml b/sdks/full/openapi_compat/openapi.yml index cd3ef7375f..32370a6cec 100644 --- a/sdks/full/openapi_compat/openapi.yml +++ b/sdks/full/openapi_compat/openapi.yml @@ -4538,6 +4538,20 @@ components: required: - build type: object + ServersDatacenter: + properties: + id: + format: uuid + type: string + name: + type: string + slug: + type: string + required: + - id + - slug + - name + type: object ServersDestroyServerResponse: properties: {} type: object @@ -4599,6 +4613,15 @@ components: required: - builds type: object + ServersListDatacentersResponse: + properties: + datacenters: + items: + $ref: '#/components/schemas/ServersDatacenter' + type: array + required: + - datacenters + type: object ServersListServersResponse: properties: servers: @@ -9243,6 +9266,68 @@ paths: security: *id001 tags: - ServersBuilds + /games/{game_id}/environments/{environment_id}/datacenters: + get: + operationId: servers_datacenters_listDatacenters + parameters: + - in: path + name: game_id + required: true + schema: + format: uuid + type: string + - in: path + name: environment_id + required: true + schema: + format: uuid + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ServersListDatacentersResponse' + description: '' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + description: '' + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + description: '' + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + description: '' + '408': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + description: '' + '429': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + description: '' + '500': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorBody' + description: '' + security: *id001 + tags: + - ServersDatacenters /games/{game_id}/environments/{environment_id}/servers: get: description: Lists all servers associated with the token used. Can be filtered diff --git a/sdks/full/rust-cli/.openapi-generator/FILES b/sdks/full/rust-cli/.openapi-generator/FILES index 6e22b666de..7d8cc9a763 100644 --- a/sdks/full/rust-cli/.openapi-generator/FILES +++ b/sdks/full/rust-cli/.openapi-generator/FILES @@ -359,11 +359,14 @@ docs/ServersCreateServerPortRequest.md docs/ServersCreateServerRequest.md docs/ServersCreateServerResponse.md docs/ServersCreateServerRuntimeRequest.md +docs/ServersDatacenter.md +docs/ServersDatacentersApi.md docs/ServersGetBuildResponse.md docs/ServersGetServerLogsResponse.md docs/ServersGetServerResponse.md docs/ServersLifecycle.md docs/ServersListBuildsResponse.md +docs/ServersListDatacentersResponse.md docs/ServersListServersResponse.md docs/ServersLogStream.md docs/ServersLogsApi.md @@ -425,6 +428,7 @@ src/apis/provision_datacenters_api.rs src/apis/provision_servers_api.rs src/apis/servers_api.rs src/apis/servers_builds_api.rs +src/apis/servers_datacenters_api.rs src/apis/servers_logs_api.rs src/lib.rs src/models/admin_clusters_build_delivery_method.rs @@ -742,11 +746,13 @@ src/models/servers_create_server_port_request.rs src/models/servers_create_server_request.rs src/models/servers_create_server_response.rs src/models/servers_create_server_runtime_request.rs +src/models/servers_datacenter.rs src/models/servers_get_build_response.rs src/models/servers_get_server_logs_response.rs src/models/servers_get_server_response.rs src/models/servers_lifecycle.rs src/models/servers_list_builds_response.rs +src/models/servers_list_datacenters_response.rs src/models/servers_list_servers_response.rs src/models/servers_log_stream.rs src/models/servers_network.rs diff --git a/sdks/full/rust-cli/README.md b/sdks/full/rust-cli/README.md index a3710de8a3..0d13cb305d 100644 --- a/sdks/full/rust-cli/README.md +++ b/sdks/full/rust-cli/README.md @@ -176,6 +176,7 @@ Class | Method | HTTP request | Description *ServersBuildsApi* | [**servers_builds_list_builds**](docs/ServersBuildsApi.md#servers_builds_list_builds) | **GET** /games/{game_id}/environments/{environment_id}/builds | *ServersBuildsApi* | [**servers_builds_patch_tags**](docs/ServersBuildsApi.md#servers_builds_patch_tags) | **PATCH** /games/{game_id}/environments/{environment_id}/builds/{build_id}/tags | *ServersBuildsApi* | [**servers_builds_prepare_build**](docs/ServersBuildsApi.md#servers_builds_prepare_build) | **POST** /games/{game_id}/environments/{environment_id}/builds/prepare | +*ServersDatacentersApi* | [**servers_datacenters_list_datacenters**](docs/ServersDatacentersApi.md#servers_datacenters_list_datacenters) | **GET** /games/{game_id}/environments/{environment_id}/datacenters | *ServersLogsApi* | [**servers_logs_get_server_logs**](docs/ServersLogsApi.md#servers_logs_get_server_logs) | **GET** /games/{game_id}/environments/{environment_id}/servers/{server_id}/logs | @@ -495,11 +496,13 @@ Class | Method | HTTP request | Description - [ServersCreateServerRequest](docs/ServersCreateServerRequest.md) - [ServersCreateServerResponse](docs/ServersCreateServerResponse.md) - [ServersCreateServerRuntimeRequest](docs/ServersCreateServerRuntimeRequest.md) + - [ServersDatacenter](docs/ServersDatacenter.md) - [ServersGetBuildResponse](docs/ServersGetBuildResponse.md) - [ServersGetServerLogsResponse](docs/ServersGetServerLogsResponse.md) - [ServersGetServerResponse](docs/ServersGetServerResponse.md) - [ServersLifecycle](docs/ServersLifecycle.md) - [ServersListBuildsResponse](docs/ServersListBuildsResponse.md) + - [ServersListDatacentersResponse](docs/ServersListDatacentersResponse.md) - [ServersListServersResponse](docs/ServersListServersResponse.md) - [ServersLogStream](docs/ServersLogStream.md) - [ServersNetwork](docs/ServersNetwork.md) diff --git a/sdks/full/rust-cli/docs/ServersDatacenter.md b/sdks/full/rust-cli/docs/ServersDatacenter.md new file mode 100644 index 0000000000..c8161ed9c1 --- /dev/null +++ b/sdks/full/rust-cli/docs/ServersDatacenter.md @@ -0,0 +1,13 @@ +# ServersDatacenter + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | [**uuid::Uuid**](uuid::Uuid.md) | | +**name** | **String** | | +**slug** | **String** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sdks/full/rust-cli/docs/ServersDatacentersApi.md b/sdks/full/rust-cli/docs/ServersDatacentersApi.md new file mode 100644 index 0000000000..c9f707681a --- /dev/null +++ b/sdks/full/rust-cli/docs/ServersDatacentersApi.md @@ -0,0 +1,38 @@ +# \ServersDatacentersApi + +All URIs are relative to *https://api.rivet.gg* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**servers_datacenters_list_datacenters**](ServersDatacentersApi.md#servers_datacenters_list_datacenters) | **GET** /games/{game_id}/environments/{environment_id}/datacenters | + + + +## servers_datacenters_list_datacenters + +> crate::models::ServersListDatacentersResponse servers_datacenters_list_datacenters(game_id, environment_id) + + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**game_id** | **uuid::Uuid** | | [required] | +**environment_id** | **uuid::Uuid** | | [required] | + +### Return type + +[**crate::models::ServersListDatacentersResponse**](ServersListDatacentersResponse.md) + +### Authorization + +[BearerAuth](../README.md#BearerAuth) + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sdks/full/rust-cli/docs/ServersListDatacentersResponse.md b/sdks/full/rust-cli/docs/ServersListDatacentersResponse.md new file mode 100644 index 0000000000..de8f16f5ee --- /dev/null +++ b/sdks/full/rust-cli/docs/ServersListDatacentersResponse.md @@ -0,0 +1,11 @@ +# ServersListDatacentersResponse + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**datacenters** | [**Vec**](ServersDatacenter.md) | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sdks/full/rust-cli/src/apis/mod.rs b/sdks/full/rust-cli/src/apis/mod.rs index 01e8bb0477..a32e01afe2 100644 --- a/sdks/full/rust-cli/src/apis/mod.rs +++ b/sdks/full/rust-cli/src/apis/mod.rs @@ -132,6 +132,7 @@ pub mod provision_datacenters_api; pub mod provision_servers_api; pub mod servers_api; pub mod servers_builds_api; +pub mod servers_datacenters_api; pub mod servers_logs_api; pub mod configuration; diff --git a/sdks/full/rust-cli/src/apis/servers_datacenters_api.rs b/sdks/full/rust-cli/src/apis/servers_datacenters_api.rs new file mode 100644 index 0000000000..a99e1abb23 --- /dev/null +++ b/sdks/full/rust-cli/src/apis/servers_datacenters_api.rs @@ -0,0 +1,61 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + + +use reqwest; + +use crate::apis::ResponseContent; +use super::{Error, configuration}; + + +/// struct for typed errors of method [`servers_datacenters_list_datacenters`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ServersDatacentersListDatacentersError { + Status400(crate::models::ErrorBody), + Status403(crate::models::ErrorBody), + Status404(crate::models::ErrorBody), + Status408(crate::models::ErrorBody), + Status429(crate::models::ErrorBody), + Status500(crate::models::ErrorBody), + UnknownValue(serde_json::Value), +} + + +pub async fn servers_datacenters_list_datacenters(configuration: &configuration::Configuration, game_id: &str, environment_id: &str) -> Result> { + let local_var_configuration = configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/datacenters", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id)); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + serde_json::from_str(&local_var_content).map_err(Error::from) + } else { + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; + Err(Error::ResponseError(local_var_error)) + } +} + diff --git a/sdks/full/rust-cli/src/models/mod.rs b/sdks/full/rust-cli/src/models/mod.rs index 9de0d8ad50..dfb93cb2a3 100644 --- a/sdks/full/rust-cli/src/models/mod.rs +++ b/sdks/full/rust-cli/src/models/mod.rs @@ -626,6 +626,8 @@ pub mod servers_create_server_response; pub use self::servers_create_server_response::ServersCreateServerResponse; pub mod servers_create_server_runtime_request; pub use self::servers_create_server_runtime_request::ServersCreateServerRuntimeRequest; +pub mod servers_datacenter; +pub use self::servers_datacenter::ServersDatacenter; pub mod servers_get_build_response; pub use self::servers_get_build_response::ServersGetBuildResponse; pub mod servers_get_server_logs_response; @@ -636,6 +638,8 @@ pub mod servers_lifecycle; pub use self::servers_lifecycle::ServersLifecycle; pub mod servers_list_builds_response; pub use self::servers_list_builds_response::ServersListBuildsResponse; +pub mod servers_list_datacenters_response; +pub use self::servers_list_datacenters_response::ServersListDatacentersResponse; pub mod servers_list_servers_response; pub use self::servers_list_servers_response::ServersListServersResponse; pub mod servers_log_stream; diff --git a/sdks/full/rust-cli/src/models/servers_datacenter.rs b/sdks/full/rust-cli/src/models/servers_datacenter.rs new file mode 100644 index 0000000000..b267b68a6e --- /dev/null +++ b/sdks/full/rust-cli/src/models/servers_datacenter.rs @@ -0,0 +1,34 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + + + + +#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +pub struct ServersDatacenter { + #[serde(rename = "id")] + pub id: uuid::Uuid, + #[serde(rename = "name")] + pub name: String, + #[serde(rename = "slug")] + pub slug: String, +} + +impl ServersDatacenter { + pub fn new(id: uuid::Uuid, name: String, slug: String) -> ServersDatacenter { + ServersDatacenter { + id, + name, + slug, + } + } +} + + diff --git a/sdks/full/rust-cli/src/models/servers_list_datacenters_response.rs b/sdks/full/rust-cli/src/models/servers_list_datacenters_response.rs new file mode 100644 index 0000000000..ac3a02b52d --- /dev/null +++ b/sdks/full/rust-cli/src/models/servers_list_datacenters_response.rs @@ -0,0 +1,28 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + + + + +#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +pub struct ServersListDatacentersResponse { + #[serde(rename = "datacenters")] + pub datacenters: Vec, +} + +impl ServersListDatacentersResponse { + pub fn new(datacenters: Vec) -> ServersListDatacentersResponse { + ServersListDatacentersResponse { + datacenters, + } + } +} + + diff --git a/sdks/full/rust/.openapi-generator/FILES b/sdks/full/rust/.openapi-generator/FILES index 6e22b666de..7d8cc9a763 100644 --- a/sdks/full/rust/.openapi-generator/FILES +++ b/sdks/full/rust/.openapi-generator/FILES @@ -359,11 +359,14 @@ docs/ServersCreateServerPortRequest.md docs/ServersCreateServerRequest.md docs/ServersCreateServerResponse.md docs/ServersCreateServerRuntimeRequest.md +docs/ServersDatacenter.md +docs/ServersDatacentersApi.md docs/ServersGetBuildResponse.md docs/ServersGetServerLogsResponse.md docs/ServersGetServerResponse.md docs/ServersLifecycle.md docs/ServersListBuildsResponse.md +docs/ServersListDatacentersResponse.md docs/ServersListServersResponse.md docs/ServersLogStream.md docs/ServersLogsApi.md @@ -425,6 +428,7 @@ src/apis/provision_datacenters_api.rs src/apis/provision_servers_api.rs src/apis/servers_api.rs src/apis/servers_builds_api.rs +src/apis/servers_datacenters_api.rs src/apis/servers_logs_api.rs src/lib.rs src/models/admin_clusters_build_delivery_method.rs @@ -742,11 +746,13 @@ src/models/servers_create_server_port_request.rs src/models/servers_create_server_request.rs src/models/servers_create_server_response.rs src/models/servers_create_server_runtime_request.rs +src/models/servers_datacenter.rs src/models/servers_get_build_response.rs src/models/servers_get_server_logs_response.rs src/models/servers_get_server_response.rs src/models/servers_lifecycle.rs src/models/servers_list_builds_response.rs +src/models/servers_list_datacenters_response.rs src/models/servers_list_servers_response.rs src/models/servers_log_stream.rs src/models/servers_network.rs diff --git a/sdks/full/rust/README.md b/sdks/full/rust/README.md index a3710de8a3..0d13cb305d 100644 --- a/sdks/full/rust/README.md +++ b/sdks/full/rust/README.md @@ -176,6 +176,7 @@ Class | Method | HTTP request | Description *ServersBuildsApi* | [**servers_builds_list_builds**](docs/ServersBuildsApi.md#servers_builds_list_builds) | **GET** /games/{game_id}/environments/{environment_id}/builds | *ServersBuildsApi* | [**servers_builds_patch_tags**](docs/ServersBuildsApi.md#servers_builds_patch_tags) | **PATCH** /games/{game_id}/environments/{environment_id}/builds/{build_id}/tags | *ServersBuildsApi* | [**servers_builds_prepare_build**](docs/ServersBuildsApi.md#servers_builds_prepare_build) | **POST** /games/{game_id}/environments/{environment_id}/builds/prepare | +*ServersDatacentersApi* | [**servers_datacenters_list_datacenters**](docs/ServersDatacentersApi.md#servers_datacenters_list_datacenters) | **GET** /games/{game_id}/environments/{environment_id}/datacenters | *ServersLogsApi* | [**servers_logs_get_server_logs**](docs/ServersLogsApi.md#servers_logs_get_server_logs) | **GET** /games/{game_id}/environments/{environment_id}/servers/{server_id}/logs | @@ -495,11 +496,13 @@ Class | Method | HTTP request | Description - [ServersCreateServerRequest](docs/ServersCreateServerRequest.md) - [ServersCreateServerResponse](docs/ServersCreateServerResponse.md) - [ServersCreateServerRuntimeRequest](docs/ServersCreateServerRuntimeRequest.md) + - [ServersDatacenter](docs/ServersDatacenter.md) - [ServersGetBuildResponse](docs/ServersGetBuildResponse.md) - [ServersGetServerLogsResponse](docs/ServersGetServerLogsResponse.md) - [ServersGetServerResponse](docs/ServersGetServerResponse.md) - [ServersLifecycle](docs/ServersLifecycle.md) - [ServersListBuildsResponse](docs/ServersListBuildsResponse.md) + - [ServersListDatacentersResponse](docs/ServersListDatacentersResponse.md) - [ServersListServersResponse](docs/ServersListServersResponse.md) - [ServersLogStream](docs/ServersLogStream.md) - [ServersNetwork](docs/ServersNetwork.md) diff --git a/sdks/full/rust/docs/ServersDatacenter.md b/sdks/full/rust/docs/ServersDatacenter.md new file mode 100644 index 0000000000..c8161ed9c1 --- /dev/null +++ b/sdks/full/rust/docs/ServersDatacenter.md @@ -0,0 +1,13 @@ +# ServersDatacenter + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | [**uuid::Uuid**](uuid::Uuid.md) | | +**name** | **String** | | +**slug** | **String** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sdks/full/rust/docs/ServersDatacentersApi.md b/sdks/full/rust/docs/ServersDatacentersApi.md new file mode 100644 index 0000000000..c9f707681a --- /dev/null +++ b/sdks/full/rust/docs/ServersDatacentersApi.md @@ -0,0 +1,38 @@ +# \ServersDatacentersApi + +All URIs are relative to *https://api.rivet.gg* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**servers_datacenters_list_datacenters**](ServersDatacentersApi.md#servers_datacenters_list_datacenters) | **GET** /games/{game_id}/environments/{environment_id}/datacenters | + + + +## servers_datacenters_list_datacenters + +> crate::models::ServersListDatacentersResponse servers_datacenters_list_datacenters(game_id, environment_id) + + +### Parameters + + +Name | Type | Description | Required | Notes +------------- | ------------- | ------------- | ------------- | ------------- +**game_id** | **uuid::Uuid** | | [required] | +**environment_id** | **uuid::Uuid** | | [required] | + +### Return type + +[**crate::models::ServersListDatacentersResponse**](ServersListDatacentersResponse.md) + +### Authorization + +[BearerAuth](../README.md#BearerAuth) + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sdks/full/rust/docs/ServersListDatacentersResponse.md b/sdks/full/rust/docs/ServersListDatacentersResponse.md new file mode 100644 index 0000000000..de8f16f5ee --- /dev/null +++ b/sdks/full/rust/docs/ServersListDatacentersResponse.md @@ -0,0 +1,11 @@ +# ServersListDatacentersResponse + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**datacenters** | [**Vec**](ServersDatacenter.md) | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sdks/full/rust/src/apis/mod.rs b/sdks/full/rust/src/apis/mod.rs index 01e8bb0477..a32e01afe2 100644 --- a/sdks/full/rust/src/apis/mod.rs +++ b/sdks/full/rust/src/apis/mod.rs @@ -132,6 +132,7 @@ pub mod provision_datacenters_api; pub mod provision_servers_api; pub mod servers_api; pub mod servers_builds_api; +pub mod servers_datacenters_api; pub mod servers_logs_api; pub mod configuration; diff --git a/sdks/full/rust/src/apis/servers_datacenters_api.rs b/sdks/full/rust/src/apis/servers_datacenters_api.rs new file mode 100644 index 0000000000..a99e1abb23 --- /dev/null +++ b/sdks/full/rust/src/apis/servers_datacenters_api.rs @@ -0,0 +1,61 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + + +use reqwest; + +use crate::apis::ResponseContent; +use super::{Error, configuration}; + + +/// struct for typed errors of method [`servers_datacenters_list_datacenters`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ServersDatacentersListDatacentersError { + Status400(crate::models::ErrorBody), + Status403(crate::models::ErrorBody), + Status404(crate::models::ErrorBody), + Status408(crate::models::ErrorBody), + Status429(crate::models::ErrorBody), + Status500(crate::models::ErrorBody), + UnknownValue(serde_json::Value), +} + + +pub async fn servers_datacenters_list_datacenters(configuration: &configuration::Configuration, game_id: &str, environment_id: &str) -> Result> { + let local_var_configuration = configuration; + + let local_var_client = &local_var_configuration.client; + + let local_var_uri_str = format!("{}/games/{game_id}/environments/{environment_id}/datacenters", local_var_configuration.base_path, game_id=crate::apis::urlencode(game_id), environment_id=crate::apis::urlencode(environment_id)); + let mut local_var_req_builder = local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str()); + + if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { + local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); + } + if let Some(ref local_var_token) = local_var_configuration.bearer_access_token { + local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned()); + }; + + let local_var_req = local_var_req_builder.build()?; + let local_var_resp = local_var_client.execute(local_var_req).await?; + + let local_var_status = local_var_resp.status(); + let local_var_content = local_var_resp.text().await?; + + if !local_var_status.is_client_error() && !local_var_status.is_server_error() { + serde_json::from_str(&local_var_content).map_err(Error::from) + } else { + let local_var_entity: Option = serde_json::from_str(&local_var_content).ok(); + let local_var_error = ResponseContent { status: local_var_status, content: local_var_content, entity: local_var_entity }; + Err(Error::ResponseError(local_var_error)) + } +} + diff --git a/sdks/full/rust/src/models/mod.rs b/sdks/full/rust/src/models/mod.rs index 9de0d8ad50..dfb93cb2a3 100644 --- a/sdks/full/rust/src/models/mod.rs +++ b/sdks/full/rust/src/models/mod.rs @@ -626,6 +626,8 @@ pub mod servers_create_server_response; pub use self::servers_create_server_response::ServersCreateServerResponse; pub mod servers_create_server_runtime_request; pub use self::servers_create_server_runtime_request::ServersCreateServerRuntimeRequest; +pub mod servers_datacenter; +pub use self::servers_datacenter::ServersDatacenter; pub mod servers_get_build_response; pub use self::servers_get_build_response::ServersGetBuildResponse; pub mod servers_get_server_logs_response; @@ -636,6 +638,8 @@ pub mod servers_lifecycle; pub use self::servers_lifecycle::ServersLifecycle; pub mod servers_list_builds_response; pub use self::servers_list_builds_response::ServersListBuildsResponse; +pub mod servers_list_datacenters_response; +pub use self::servers_list_datacenters_response::ServersListDatacentersResponse; pub mod servers_list_servers_response; pub use self::servers_list_servers_response::ServersListServersResponse; pub mod servers_log_stream; diff --git a/sdks/full/rust/src/models/servers_datacenter.rs b/sdks/full/rust/src/models/servers_datacenter.rs new file mode 100644 index 0000000000..b267b68a6e --- /dev/null +++ b/sdks/full/rust/src/models/servers_datacenter.rs @@ -0,0 +1,34 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + + + + +#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +pub struct ServersDatacenter { + #[serde(rename = "id")] + pub id: uuid::Uuid, + #[serde(rename = "name")] + pub name: String, + #[serde(rename = "slug")] + pub slug: String, +} + +impl ServersDatacenter { + pub fn new(id: uuid::Uuid, name: String, slug: String) -> ServersDatacenter { + ServersDatacenter { + id, + name, + slug, + } + } +} + + diff --git a/sdks/full/rust/src/models/servers_list_datacenters_response.rs b/sdks/full/rust/src/models/servers_list_datacenters_response.rs new file mode 100644 index 0000000000..ac3a02b52d --- /dev/null +++ b/sdks/full/rust/src/models/servers_list_datacenters_response.rs @@ -0,0 +1,28 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + + + + +#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +pub struct ServersListDatacentersResponse { + #[serde(rename = "datacenters")] + pub datacenters: Vec, +} + +impl ServersListDatacentersResponse { + pub fn new(datacenters: Vec) -> ServersListDatacentersResponse { + ServersListDatacentersResponse { + datacenters, + } + } +} + + diff --git a/sdks/full/typescript/archive.tgz b/sdks/full/typescript/archive.tgz index 0ea0f31dca..1da1d389ce 100644 --- a/sdks/full/typescript/archive.tgz +++ b/sdks/full/typescript/archive.tgz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54b8e42fe1d533223759cf98f6c00e348e00a60f26b621e4fcb6722b7277cd2a -size 547997 +oid sha256:9389c1649c6f50b08c9ceecb6d9639b0b42725d359e4622afadb74e50458066d +size 550005 diff --git a/sdks/full/typescript/src/api/resources/servers/client/Client.ts b/sdks/full/typescript/src/api/resources/servers/client/Client.ts index 9114e8638b..37e2ffe117 100644 --- a/sdks/full/typescript/src/api/resources/servers/client/Client.ts +++ b/sdks/full/typescript/src/api/resources/servers/client/Client.ts @@ -9,6 +9,7 @@ import urlJoin from "url-join"; import * as serializers from "../../../../serialization/index"; import * as errors from "../../../../errors/index"; import { Builds } from "../resources/builds/client/Client"; +import { Datacenters } from "../resources/datacenters/client/Client"; import { Logs } from "../resources/logs/client/Client"; export declare namespace Servers { @@ -617,6 +618,12 @@ export class Servers { return (this._builds ??= new Builds(this._options)); } + protected _datacenters: Datacenters | undefined; + + public get datacenters(): Datacenters { + return (this._datacenters ??= new Datacenters(this._options)); + } + protected _logs: Logs | undefined; public get logs(): Logs { diff --git a/sdks/full/typescript/src/api/resources/servers/resources/datacenters/client/Client.ts b/sdks/full/typescript/src/api/resources/servers/resources/datacenters/client/Client.ts new file mode 100644 index 0000000000..a919af9724 --- /dev/null +++ b/sdks/full/typescript/src/api/resources/servers/resources/datacenters/client/Client.ts @@ -0,0 +1,170 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../../../environments"; +import * as core from "../../../../../../core"; +import * as Rivet from "../../../../../index"; +import urlJoin from "url-join"; +import * as serializers from "../../../../../../serialization/index"; +import * as errors from "../../../../../../errors/index"; + +export declare namespace Datacenters { + interface Options { + environment?: core.Supplier; + token?: core.Supplier; + fetcher?: core.FetchFunction; + } + + interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + } +} + +export class Datacenters { + constructor(protected readonly _options: Datacenters.Options = {}) {} + + /** + * @param {string} gameId + * @param {string} environmentId + * @param {Datacenters.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Rivet.InternalError} + * @throws {@link Rivet.RateLimitError} + * @throws {@link Rivet.ForbiddenError} + * @throws {@link Rivet.UnauthorizedError} + * @throws {@link Rivet.NotFoundError} + * @throws {@link Rivet.BadRequestError} + * + * @example + * await client.servers.datacenters.listDatacenters("d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32", "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32") + */ + public async listDatacenters( + gameId: string, + environmentId: string, + requestOptions?: Datacenters.RequestOptions + ): Promise { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.environment)) ?? environments.RivetEnvironment.Production, + `/games/${encodeURIComponent(gameId)}/environments/${encodeURIComponent(environmentId)}/datacenters` + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + }, + contentType: "application/json", + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 180000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return serializers.servers.ListDatacentersResponse.parseOrThrow(_response.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }); + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 500: + throw new Rivet.InternalError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 429: + throw new Rivet.RateLimitError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 403: + throw new Rivet.ForbiddenError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 408: + throw new Rivet.UnauthorizedError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 404: + throw new Rivet.NotFoundError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + case 400: + throw new Rivet.BadRequestError( + serializers.ErrorBody.parseOrThrow(_response.error.body, { + unrecognizedObjectKeys: "passthrough", + allowUnrecognizedUnionMembers: true, + allowUnrecognizedEnumValues: true, + skipValidation: true, + breadcrumbsPrefix: ["response"], + }) + ); + default: + throw new errors.RivetError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.RivetError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + }); + case "timeout": + throw new errors.RivetTimeoutError(); + case "unknown": + throw new errors.RivetError({ + message: _response.error.errorMessage, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + const bearer = await core.Supplier.get(this._options.token); + if (bearer != null) { + return `Bearer ${bearer}`; + } + + return undefined; + } +} diff --git a/sdks/full/typescript/src/api/resources/servers/resources/datacenters/client/index.ts b/sdks/full/typescript/src/api/resources/servers/resources/datacenters/client/index.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/sdks/full/typescript/src/api/resources/servers/resources/datacenters/client/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/sdks/full/typescript/src/api/resources/servers/resources/datacenters/index.ts b/sdks/full/typescript/src/api/resources/servers/resources/datacenters/index.ts new file mode 100644 index 0000000000..c9240f83b4 --- /dev/null +++ b/sdks/full/typescript/src/api/resources/servers/resources/datacenters/index.ts @@ -0,0 +1,2 @@ +export * from "./types"; +export * from "./client"; diff --git a/sdks/full/typescript/src/api/resources/servers/resources/index.ts b/sdks/full/typescript/src/api/resources/servers/resources/index.ts index 75444c1681..bd6852f57d 100644 --- a/sdks/full/typescript/src/api/resources/servers/resources/index.ts +++ b/sdks/full/typescript/src/api/resources/servers/resources/index.ts @@ -2,6 +2,8 @@ export * as builds from "./builds"; export * from "./builds/types"; export * as common from "./common"; export * from "./common/types"; +export * as datacenters from "./datacenters"; +export * from "./datacenters/types"; export * as logs from "./logs"; export * from "./logs/types"; export * from "./builds/client/requests"; diff --git a/sdks/full/typescript/src/serialization/resources/servers/resources/datacenters/index.ts b/sdks/full/typescript/src/serialization/resources/servers/resources/datacenters/index.ts new file mode 100644 index 0000000000..eea524d655 --- /dev/null +++ b/sdks/full/typescript/src/serialization/resources/servers/resources/datacenters/index.ts @@ -0,0 +1 @@ +export * from "./types"; diff --git a/sdks/full/typescript/src/serialization/resources/servers/resources/index.ts b/sdks/full/typescript/src/serialization/resources/servers/resources/index.ts index 8786b62a24..0e665158b0 100644 --- a/sdks/full/typescript/src/serialization/resources/servers/resources/index.ts +++ b/sdks/full/typescript/src/serialization/resources/servers/resources/index.ts @@ -2,5 +2,7 @@ export * as builds from "./builds"; export * from "./builds/types"; export * as common from "./common"; export * from "./common/types"; +export * as datacenters from "./datacenters"; +export * from "./datacenters/types"; export * as logs from "./logs"; export * from "./logs/types"; diff --git a/sdks/runtime/typescript/archive.tgz b/sdks/runtime/typescript/archive.tgz index 4570fe5af7..757461da8e 100644 --- a/sdks/runtime/typescript/archive.tgz +++ b/sdks/runtime/typescript/archive.tgz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66163bdbde5b21a1aa86ce74b4cbffe69502e29d21cec4771ccba0109b83a00d -size 282561 +oid sha256:c6b9a2ec5104ef4300ab8c2010a8cb334592269ac9a2e183279771aa0a36a5be +size 282615 diff --git a/svc/api/servers/src/route/dc.rs b/svc/api/servers/src/route/dc.rs new file mode 100644 index 0000000000..241cf11dbf --- /dev/null +++ b/svc/api/servers/src/route/dc.rs @@ -0,0 +1,52 @@ +use api_helper::{anchor::WatchIndexQuery, ctx::Ctx}; +use rivet_api::models; +use rivet_operation::prelude::*; + +use crate::auth::Auth; + +// MARK: GET /games/{}/environments/{}/datacenters +pub async fn list( + ctx: Ctx, + game_id: Uuid, + env_id: Uuid, + _watch_index: WatchIndexQuery, +) -> GlobalResult { + ctx.auth() + .check_game(ctx.op_ctx(), game_id, env_id, true) + .await?; + + let cluster_res = ctx + .op(cluster::ops::get_for_game::Input { + game_ids: vec![game_id], + }) + .await?; + let cluster_id = unwrap!(cluster_res.games.first()).cluster_id; + + let mut cluster_dcs_res = ctx + .op(cluster::ops::datacenter::list::Input { + cluster_ids: vec![cluster_id], + }) + .await?; + let cluster_dcs = unwrap!(cluster_dcs_res.clusters.first()) + .datacenter_ids + .clone(); + + let mut dcs_res = ctx + .op(cluster::ops::datacenter::get::Input { + datacenter_ids: cluster_dcs, + }) + .await?; + dcs_res.datacenters.sort_by_key(|x| x.name_id.clone()); + + let datacenters = dcs_res + .datacenters + .into_iter() + .map(|dc| models::ServersDatacenter { + id: dc.datacenter_id, + slug: dc.name_id, + name: dc.display_name, + }) + .collect::>(); + + Ok(models::ServersListDatacentersResponse { datacenters }) +} diff --git a/svc/api/servers/src/route/mod.rs b/svc/api/servers/src/route/mod.rs index ebdebc05dd..a1a6377c53 100644 --- a/svc/api/servers/src/route/mod.rs +++ b/svc/api/servers/src/route/mod.rs @@ -4,6 +4,7 @@ use rivet_api::models; use uuid::Uuid; pub mod builds; +pub mod dc; pub mod logs; pub mod servers; @@ -23,6 +24,7 @@ pub async fn handle( define_router! { cors: CorsConfigBuilder::hub().build(), routes: { + // MARK: Servers "games" / Uuid / "environments" / Uuid / "servers": { GET: servers::list_servers( query: servers::ListQuery, @@ -39,12 +41,14 @@ define_router! { ), }, + // MARK: Logs "games" / Uuid / "environments" / Uuid / "servers" / Uuid / "logs" : { GET: logs::get_logs( query: logs::GetServerLogsQuery, ), }, + // MARK: Builds "games" / Uuid / "environments" / Uuid / "builds": { GET: builds::list( query: builds::GetQuery, @@ -66,5 +70,10 @@ define_router! { "games" / Uuid / "environments" / Uuid / "builds" / Uuid / "complete": { POST: builds::complete_build(body: serde_json::Value), }, + + // MARK: Datacenters + "games" / Uuid / "environments" / Uuid / "datacenters": { + GET: dc::list(), + }, }, }