Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion src/Speckle.Sdk/Api/GraphQL/Models/Workspace.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using Speckle.Newtonsoft.Json;

namespace Speckle.Sdk.Api.GraphQL.Models;

public class LimitedWorkspace
Expand All @@ -6,8 +8,12 @@ public class LimitedWorkspace
public string name { get; init; }
public string? role { get; init; }
public string slug { get; init; }
public string? logo { get; init; }
public string? logoUri { get; init; }
public string? description { get; init; }

[JsonIgnore]
[Obsolete($"Deprecated, use {nameof(logoUri)} instead", true)]
public string? logo { get; init; }
}

public class Workspace : LimitedWorkspace
Expand All @@ -16,9 +22,13 @@ public class Workspace : LimitedWorkspace
public DateTime updatedAt { get; init; }
public bool readOnly { get; init; }
public WorkspacePermissionChecks permissions { get; init; }

[JsonIgnore]
[Obsolete("Workspaces no longer have creation state, is always created true", true)]
public WorkspaceCreationState? creationState { get; init; }
}

[Obsolete("Workspaces no longer have creation state, is always created true")]
public sealed class WorkspaceCreationState
{
public bool completed { get; init; }
Expand Down
50 changes: 43 additions & 7 deletions src/Speckle.Sdk/Api/GraphQL/Resources/ActiveUserResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -264,15 +264,11 @@ query ActiveUser($limit: Int!, $cursor: String, $filter: UserWorkspacesFilter) {
name
role
slug
logo
logoUrl
createdAt
updatedAt
readOnly
description
creationState
{
completed
}
permissions {
canCreateProject {
authorized
Expand Down Expand Up @@ -317,7 +313,7 @@ query ActiveUser($limit: Int!, $cursor: String, $filter: UserWorkspacesFilter) {
/// <remarks>note this returns a <see cref="LimitedWorkspace"/>, because it may be a workspace the user is not a member of</remarks>
/// <inheritdoc cref="ISpeckleGraphQLClient.ExecuteGraphQLRequest{T}"/>
/// <exception cref="SpeckleException">The ActiveUser could not be found (e.g. the client is not authenticated)</exception>
public async Task<LimitedWorkspace?> GetActiveWorkspace(CancellationToken cancellationToken = default)
private async Task<LimitedWorkspace?> GetActiveWorkspace_Legacy(CancellationToken cancellationToken = default)
{
//language=graphql
const string QUERY = """
Expand All @@ -328,7 +324,6 @@ query ActiveUser {
name
role
slug
logo
description
}
}
Expand All @@ -349,6 +344,47 @@ query ActiveUser {
return response.data.data;
}

public async Task<LimitedWorkspace?> GetActiveWorkspace(CancellationToken cancellationToken = default)
{
//language=graphql
const string QUERY = """
query ActiveUser {
data:activeUser {
data:activeWorkspace {
id
name
role
slug
logoUrl
description
}
}
}
""";

var request = new GraphQLRequest { Query = QUERY };

NullableResponse<NullableResponse<LimitedWorkspace?>?> response;
try
{
response = await _client
.ExecuteGraphQLRequest<NullableResponse<NullableResponse<LimitedWorkspace?>?>>(request, cancellationToken)
.ConfigureAwait(false);
}
catch (SpeckleGraphQLInvalidQueryException)
{
//v2.x.x servers do not have a logoUrl property
return await GetActiveWorkspace_Legacy(cancellationToken).ConfigureAwait(false);
}

if (response.data is null)
{
throw new SpeckleException("GraphQL response indicated that the ActiveUser could not be found");
}

return response.data.data;
}

/// <param name="limit">Max number of projects to fetch</param>
/// <param name="cursor">Optional cursor for pagination</param>
/// <param name="filter">Optional filter</param>
Expand Down
36 changes: 18 additions & 18 deletions src/Speckle.Sdk/Api/GraphQL/Resources/OtherUserResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ query LimitedUser($id: String!) {
/// <param name="query">String to search for. Must be at least 3 characters</param>
/// <param name="limit">Max number of users to fetch</param>
/// <param name="cursor">Optional cursor for pagination</param>
/// <param name="archived"></param>
/// <param name="emailOnly"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Expand All @@ -61,26 +60,25 @@ public async Task<UserSearchResultCollection> UserSearch(
string query,
int limit = ServerLimits.DEFAULT_PAGINATION_REQUEST,
string? cursor = null,
bool archived = false,
bool emailOnly = false,
CancellationToken cancellationToken = default
)
{
//language=graphql
const string QUERY = """
query UserSearch($query: String!, $limit: Int!, $cursor: String, $archived: Boolean, $emailOnly: Boolean) {
data:userSearch(query: $query, limit: $limit, cursor: $cursor, archived: $archived, emailOnly: $emailOnly) {
query Users($input: UsersRetrievalInput!) {
data:users(input: $input) {
cursor
items {
id
name
bio
company
avatar
verified
role
}
}
id
name
bio
company
avatar
verified
role
}
}
}
""";

Expand All @@ -89,11 +87,13 @@ query UserSearch($query: String!, $limit: Int!, $cursor: String, $archived: Bool
Query = QUERY,
Variables = new
{
query,
limit,
cursor,
archived,
emailOnly,
input = new
{
query,
limit,
emailOnly,
cursor,
},
},
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ subscription UserProjectsUpdated {
/// <summary>Subscribe to updates to resource comments/threads. Optionally specify resource ID string to only receive updates regarding comments for those resources</summary>
/// <remarks><inheritdoc cref="CreateUserProjectsUpdatedSubscription"/></remarks>
/// <inheritdoc cref="ISpeckleGraphQLClient.SubscribeTo{T}"/>
[Obsolete("Comments are now issues, and we've not update SDKs with the new subs")]
public Subscription<ProjectCommentsUpdatedMessage> CreateProjectCommentsUpdatedSubscription(
ViewerUpdateTrackingTarget target
)
Expand Down
6 changes: 1 addition & 5 deletions src/Speckle.Sdk/Api/GraphQL/Resources/WorkspaceResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,11 @@ query WorkspaceGet($workspaceId: String!) {
name
role
slug
logo
logoUrl
createdAt
updatedAt
readOnly
description
creationState
{
completed
}
permissions {
canCreateProject {
authorized
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ private static async Task<IClient> Setup()
return testUser;
}

[Fact]
[Fact, Trait("Server", "Internal")]
public async Task TestGetWorkspace()
{
var ex = await Assert.ThrowsAsync<AggregateException>(async () => _ = await Sut.Get("non-existent-id"));
Expand Down
Loading