Skip to content

Commit

Permalink
Add new workspace api endpoint (#18983)
Browse files Browse the repository at this point in the history
* Add new workspace api endpoint
  • Loading branch information
alovew authored Nov 4, 2022
1 parent 350d544 commit 1d809a7
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 0 deletions.
23 changes: 23 additions & 0 deletions airbyte-api/src/main/openapi/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,29 @@ paths:
$ref: "#/components/responses/NotFoundResponse"
"422":
$ref: "#/components/responses/InvalidInputResponse"
/v1/workspaces/get_by_connection_id:
post:
tags:
- workspace
summary: Find workspace by connection id
operationId: getWorkspaceByConnectionId
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/ConnectionIdRequestBody"
required: true
responses:
"200":
description: Successful operation
content:
application/json:
schema:
$ref: "#/components/schemas/WorkspaceRead"
"404":
$ref: "#/components/responses/NotFoundResponse"
"422":
$ref: "#/components/responses/InvalidInputResponse"
/v1/workspaces/update:
post:
tags:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,11 @@ public WorkspaceRead getWorkspaceBySlug(final SlugRequestBody slugRequestBody) {
return execute(() -> workspacesHandler.getWorkspaceBySlug(slugRequestBody));
}

@Override
public WorkspaceRead getWorkspaceByConnectionId(final ConnectionIdRequestBody connectionIdRequestBody) {
return execute(() -> workspacesHandler.getWorkspaceByConnectionId(connectionIdRequestBody));
}

@Override
public WorkspaceRead updateWorkspace(final WorkspaceUpdate workspaceUpdate) {
return execute(() -> workspacesHandler.updateWorkspace(workspaceUpdate));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import io.airbyte.analytics.TrackingClientSingleton;
import io.airbyte.api.model.generated.ConnectionIdRequestBody;
import io.airbyte.api.model.generated.ConnectionRead;
import io.airbyte.api.model.generated.DestinationRead;
import io.airbyte.api.model.generated.Geography;
Expand Down Expand Up @@ -163,6 +164,11 @@ public WorkspaceRead getWorkspaceBySlug(final SlugRequestBody slugRequestBody)
return buildWorkspaceRead(workspace);
}

public WorkspaceRead getWorkspaceByConnectionId(final ConnectionIdRequestBody connectionIdRequestBody) {
final StandardWorkspace workspace = configRepository.getStandardWorkspaceFromConnection(connectionIdRequestBody.getConnectionId(), false);
return buildWorkspaceRead(workspace);
}

public WorkspaceRead updateWorkspace(final WorkspaceUpdate workspacePatch) throws ConfigNotFoundException, IOException, JsonValidationException {
final UUID workspaceId = workspacePatch.getWorkspaceId();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.collect.Lists;
import io.airbyte.api.model.generated.ConnectionIdRequestBody;
import io.airbyte.api.model.generated.ConnectionRead;
import io.airbyte.api.model.generated.ConnectionReadList;
import io.airbyte.api.model.generated.DestinationRead;
Expand Down Expand Up @@ -333,6 +334,28 @@ void testGetWorkspaceBySlug() throws JsonValidationException, ConfigNotFoundExce
assertEquals(workspaceRead, workspacesHandler.getWorkspaceBySlug(slugRequestBody));
}

@Test
void testGetWorkspaceByConnectionId() {
final UUID connectionId = UUID.randomUUID();
when(configRepository.getStandardWorkspaceFromConnection(connectionId, false)).thenReturn(workspace);
final ConnectionIdRequestBody connectionIdRequestBody = new ConnectionIdRequestBody().connectionId(connectionId);
final WorkspaceRead workspaceRead = new WorkspaceRead()
.workspaceId(workspace.getWorkspaceId())
.customerId(workspace.getCustomerId())
.email(TEST_EMAIL)
.name(workspace.getName())
.slug(workspace.getSlug())
.initialSetupComplete(workspace.getInitialSetupComplete())
.displaySetupWizard(workspace.getDisplaySetupWizard())
.news(workspace.getNews())
.anonymousDataCollection(workspace.getAnonymousDataCollection())
.securityUpdates(workspace.getSecurityUpdates())
.notifications(NotificationConverter.toApiList(workspace.getNotifications()))
.defaultGeography(GEOGRAPHY_AUTO);

assertEquals(workspaceRead, workspacesHandler.getWorkspaceByConnectionId(connectionIdRequestBody));
}

@Test
void testUpdateWorkspace() throws JsonValidationException, ConfigNotFoundException, IOException {
final io.airbyte.api.model.generated.Notification apiNotification = generateApiNotification();
Expand Down
92 changes: 92 additions & 0 deletions docs/reference/api/generated-api-html/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,7 @@ <h4><a href="#Workspace">Workspace</a></h4>
<li><a href="#createWorkspace"><code><span class="http-method">post</span> /v1/workspaces/create</code></a></li>
<li><a href="#deleteWorkspace"><code><span class="http-method">post</span> /v1/workspaces/delete</code></a></li>
<li><a href="#getWorkspace"><code><span class="http-method">post</span> /v1/workspaces/get</code></a></li>
<li><a href="#getWorkspaceByConnectionId"><code><span class="http-method">post</span> /v1/workspaces/get_by_connection_id</code></a></li>
<li><a href="#getWorkspaceBySlug"><code><span class="http-method">post</span> /v1/workspaces/get_by_slug</code></a></li>
<li><a href="#listWorkspaces"><code><span class="http-method">post</span> /v1/workspaces/list</code></a></li>
<li><a href="#updateWorkspace"><code><span class="http-method">post</span> /v1/workspaces/update</code></a></li>
Expand Down Expand Up @@ -9758,6 +9759,97 @@ <h3 class="field-label">Request body</h3>



<h3 class="field-label">Return type</h3>
<div class="return-type">
<a href="#WorkspaceRead">WorkspaceRead</a>

</div>

<!--Todo: process Response Object and its headers, schema, examples -->

<h3 class="field-label">Example data</h3>
<div class="example-data-content-type">Content-Type: application/json</div>
<pre class="example"><code>{
"news" : true,
"webhookConfigs" : [ {
"name" : "name",
"id" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
}, {
"name" : "name",
"id" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
} ],
"displaySetupWizard" : true,
"initialSetupComplete" : true,
"anonymousDataCollection" : true,
"customerId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
"name" : "name",
"firstCompletedSync" : true,
"feedbackDone" : true,
"email" : "email",
"slug" : "slug",
"securityUpdates" : true,
"notifications" : [ {
"slackConfiguration" : {
"webhook" : "webhook"
},
"sendOnSuccess" : false,
"sendOnFailure" : true,
"customerioConfiguration" : "{}"
}, {
"slackConfiguration" : {
"webhook" : "webhook"
},
"sendOnSuccess" : false,
"sendOnFailure" : true,
"customerioConfiguration" : "{}"
} ],
"workspaceId" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91"
}</code></pre>

<h3 class="field-label">Produces</h3>
This API call produces the following media types according to the <span class="header">Accept</span> request header;
the media type will be conveyed by the <span class="header">Content-Type</span> response header.
<ul>
<li><code>application/json</code></li>
</ul>

<h3 class="field-label">Responses</h3>
<h4 class="field-label">200</h4>
Successful operation
<a href="#WorkspaceRead">WorkspaceRead</a>
<h4 class="field-label">404</h4>
Object with given id was not found.
<a href="#NotFoundKnownExceptionInfo">NotFoundKnownExceptionInfo</a>
<h4 class="field-label">422</h4>
Input failed validation
<a href="#InvalidInputExceptionInfo">InvalidInputExceptionInfo</a>
</div> <!-- method -->
<hr/>
<div class="method"><a name="getWorkspaceByConnectionId"/>
<div class="method-path">
<a class="up" href="#__Methods">Up</a>
<pre class="post"><code class="huge"><span class="http-method">post</span> /v1/workspaces/get_by_connection_id</code></pre></div>
<div class="method-summary">Find workspace by connection id (<span class="nickname">getWorkspaceByConnectionId</span>)</div>
<div class="method-notes"></div>


<h3 class="field-label">Consumes</h3>
This API call consumes the following media types via the <span class="header">Content-Type</span> request header:
<ul>
<li><code>application/json</code></li>
</ul>

<h3 class="field-label">Request body</h3>
<div class="field-items">
<div class="param">ConnectionIdRequestBody <a href="#ConnectionIdRequestBody">ConnectionIdRequestBody</a> (required)</div>

<div class="param-desc"><span class="param-type">Body Parameter</span> &mdash; </div>

</div> <!-- field-items -->




<h3 class="field-label">Return type</h3>
<div class="return-type">
<a href="#WorkspaceRead">WorkspaceRead</a>
Expand Down

0 comments on commit 1d809a7

Please sign in to comment.