From 9b8f0177638e9aa41ea6f00e8a6c8ec0d48d6dcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20B=C3=A9gaudeau?= Date: Fri, 23 Feb 2024 10:19:22 +0100 Subject: [PATCH] [3156] Make Viewer a type instead of an interface in our GraphQL API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: https://github.com/eclipse-sirius/sirius-web/issues/3156 Signed-off-by: Stéphane Bégaudeau --- CHANGELOG.adoc | 2 + .../src/main/resources/schema/core.graphqls | 4 +- .../ViewerEditingContextDataFetcher.java | 2 +- .../controllers/ViewerProjectDataFetcher.java | 2 +- .../ViewerProjectTemplatesDataFetcher.java | 2 +- .../ViewerProjectsDataFetcher.java | 2 +- .../dto/DeleteProjectSuccessPayload.java | 31 ----------- .../services/ProjectApplicationService.java | 4 +- .../web/application/viewer/DefaultViewer.java | 21 -------- .../web/application/viewer/IViewer.java | 21 -------- ...tcher.java => QueryViewerDataFetcher.java} | 8 ++- .../main/resources/schema/siriusweb.graphqls | 18 +------ .../graphql/datafetchers/IViewerProvider.java | 28 ---------- .../MutationDeleteProjectDataFetcher.java | 29 +++-------- .../query/QueryViewerDataFetcher.java | 18 ++----- .../ViewerEditingContextDataFetcher.java} | 10 ++-- .../ViewerProjectDataFetcher.java} | 10 ++-- .../ViewerProjectTemplatesDataFetcher.java} | 10 ++-- .../ViewerProjectsDataFetcher.java} | 8 +-- .../main/resources/schema/siriusweb.graphqls | 23 ++------- .../web/sample/services/ViewerProvider.java | 37 -------------- .../projects/DeleteProjectSuccessPayload.java | 31 ----------- .../web/services/api/viewer/IViewer.java | 26 ---------- .../sirius/web/services/api/viewer/User.java | 51 ------------------- .../ProjectControllerIntegrationTests.java | 6 +-- .../modals/delete-project/useDeleteProject.ts | 2 +- 26 files changed, 51 insertions(+), 355 deletions(-) delete mode 100644 packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/dto/DeleteProjectSuccessPayload.java delete mode 100644 packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/DefaultViewer.java delete mode 100644 packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/IViewer.java rename packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/controllers/{QueryViewDataFetcher.java => QueryViewerDataFetcher.java} (74%) delete mode 100644 packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/IViewerProvider.java rename packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/{user/UserEditingContextDataFetcher.java => viewer/ViewerEditingContextDataFetcher.java} (86%) rename packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/{user/UserProjectDataFetcher.java => viewer/ViewerProjectDataFetcher.java} (84%) rename packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/{user/UserProjectTemplatesDataFetcher.java => viewer/ViewerProjectTemplatesDataFetcher.java} (91%) rename packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/{user/UserProjectsDataFetcher.java => viewer/ViewerProjectsDataFetcher.java} (92%) delete mode 100644 packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/ViewerProvider.java delete mode 100644 packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/projects/DeleteProjectSuccessPayload.java delete mode 100644 packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/viewer/IViewer.java delete mode 100644 packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/viewer/User.java diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 2102c6c01c..49ad0d969a 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -58,6 +58,8 @@ It's current location is only there to simplify the transition to the new Sirius - https://github.com/eclipse-sirius/sirius-web/issues/3019[#3019] [emf] Remove the dependency from `sirius-components-emf` to the validation representation. Reusing the EMF compatibility layer will not add any dependency to specific representations. The EMF validation support will now be provided by `sirius-web-services`. +- https://github.com/eclipse-sirius/sirius-web/issues/3156[#3156] [core] In our GraphQL schema, `Viewer` is now a type instead of an interface. +Having `Viewer` as a type did not bring any additional value and it created some overhead by having to create and keep updated an additional type without any benefit. === Dependency update diff --git a/packages/core/backend/sirius-components-collaborative/src/main/resources/schema/core.graphqls b/packages/core/backend/sirius-components-collaborative/src/main/resources/schema/core.graphqls index 8f80075c54..66313f1b96 100644 --- a/packages/core/backend/sirius-components-collaborative/src/main/resources/schema/core.graphqls +++ b/packages/core/backend/sirius-components-collaborative/src/main/resources/schema/core.graphqls @@ -5,9 +5,7 @@ type Query { viewer: Viewer! } -interface Viewer { - id: ID! - username: String! +type Viewer { editingContext(editingContextId: ID!): EditingContext } diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/editingcontext/controllers/ViewerEditingContextDataFetcher.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/editingcontext/controllers/ViewerEditingContextDataFetcher.java index 33cefec19a..2e71300268 100644 --- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/editingcontext/controllers/ViewerEditingContextDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/editingcontext/controllers/ViewerEditingContextDataFetcher.java @@ -29,7 +29,7 @@ * * @author sbegaudeau */ -@QueryDataFetcher(type = "DefaultViewer", field = "editingContext") +@QueryDataFetcher(type = "Viewer", field = "editingContext") public class ViewerEditingContextDataFetcher implements IDataFetcherWithFieldCoordinates> { private static final String EDITING_CONTEXT_ID_ARGUMENT = "editingContextId"; diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectDataFetcher.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectDataFetcher.java index 79023f8eff..28b7391671 100644 --- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectDataFetcher.java @@ -27,7 +27,7 @@ * * @author sbegaudeau */ -@QueryDataFetcher(type = "DefaultViewer", field = "project") +@QueryDataFetcher(type = "Viewer", field = "project") public class ViewerProjectDataFetcher implements IDataFetcherWithFieldCoordinates { private static final String PROJECT_ID_ARGUMENT = "projectId"; diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectTemplatesDataFetcher.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectTemplatesDataFetcher.java index 7199fba4cc..845ee938d5 100644 --- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectTemplatesDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectTemplatesDataFetcher.java @@ -37,7 +37,7 @@ * * @author sbegaudeau */ -@QueryDataFetcher(type = "DefaultViewer", field = "projectTemplates") +@QueryDataFetcher(type = "Viewer", field = "projectTemplates") public class ViewerProjectTemplatesDataFetcher implements IDataFetcherWithFieldCoordinates> { private static final String PAGE_ARGUMENT = "page"; diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectsDataFetcher.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectsDataFetcher.java index 57656b22cf..33e14b6d7d 100644 --- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectsDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/controllers/ViewerProjectsDataFetcher.java @@ -37,7 +37,7 @@ * * @author sbegaudeau */ -@QueryDataFetcher(type = "DefaultViewer", field = "projects") +@QueryDataFetcher(type = "Viewer", field = "projects") public class ViewerProjectsDataFetcher implements IDataFetcherWithFieldCoordinates> { private static final String PAGE_ARGUMENT = "page"; diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/dto/DeleteProjectSuccessPayload.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/dto/DeleteProjectSuccessPayload.java deleted file mode 100644 index f82fde9ff9..0000000000 --- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/dto/DeleteProjectSuccessPayload.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.sirius.web.application.project.dto; - -import java.util.Objects; -import java.util.UUID; - -import org.eclipse.sirius.components.core.api.IPayload; - -import jakarta.validation.constraints.NotNull; - -/** - * Payload sent when a project is deleted. - * - * @author sbegaudeau - */ -public record DeleteProjectSuccessPayload(@NotNull UUID id) implements IPayload { - public DeleteProjectSuccessPayload { - Objects.requireNonNull(id); - } -} diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/services/ProjectApplicationService.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/services/ProjectApplicationService.java index 7489be14b7..4e21fbdb26 100644 --- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/services/ProjectApplicationService.java +++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/project/services/ProjectApplicationService.java @@ -18,10 +18,10 @@ import org.eclipse.sirius.components.core.api.ErrorPayload; import org.eclipse.sirius.components.core.api.IPayload; +import org.eclipse.sirius.components.core.api.SuccessPayload; import org.eclipse.sirius.web.application.project.dto.CreateProjectInput; import org.eclipse.sirius.web.application.project.dto.CreateProjectSuccessPayload; import org.eclipse.sirius.web.application.project.dto.DeleteProjectInput; -import org.eclipse.sirius.web.application.project.dto.DeleteProjectSuccessPayload; import org.eclipse.sirius.web.application.project.dto.ProjectDTO; import org.eclipse.sirius.web.application.project.dto.RenameProjectInput; import org.eclipse.sirius.web.application.project.dto.RenameProjectSuccessPayload; @@ -113,7 +113,7 @@ public IPayload deleteProject(DeleteProjectInput input) { if (result instanceof Failure failure) { payload = new ErrorPayload(input.id(), failure.message()); } else if (result instanceof Success) { - payload = new DeleteProjectSuccessPayload(input.id()); + payload = new SuccessPayload(input.id()); } return payload; } diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/DefaultViewer.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/DefaultViewer.java deleted file mode 100644 index a84f36e175..0000000000 --- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/DefaultViewer.java +++ /dev/null @@ -1,21 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.sirius.web.application.viewer; - -/** - * The viewer DTO. - * - * @author sbegaudeau - */ -public record DefaultViewer() implements IViewer { -} diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/IViewer.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/IViewer.java deleted file mode 100644 index c6ac3a1322..0000000000 --- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/IViewer.java +++ /dev/null @@ -1,21 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.sirius.web.application.viewer; - -/** - * Interface used to represent a viewer. - * - * @author gcoutable - */ -public interface IViewer { -} diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/controllers/QueryViewDataFetcher.java b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/controllers/QueryViewerDataFetcher.java similarity index 74% rename from packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/controllers/QueryViewDataFetcher.java rename to packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/controllers/QueryViewerDataFetcher.java index d4cba7958d..a572642a84 100644 --- a/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/controllers/QueryViewDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-application/src/main/java/org/eclipse/sirius/web/application/viewer/controllers/QueryViewerDataFetcher.java @@ -14,8 +14,6 @@ import org.eclipse.sirius.components.annotations.spring.graphql.QueryDataFetcher; import org.eclipse.sirius.components.graphql.api.IDataFetcherWithFieldCoordinates; -import org.eclipse.sirius.web.application.viewer.IViewer; -import org.eclipse.sirius.web.application.viewer.DefaultViewer; import graphql.schema.DataFetchingEnvironment; @@ -25,9 +23,9 @@ * @author sbegaudeau */ @QueryDataFetcher(type = "Query", field = "viewer") -public class QueryViewDataFetcher implements IDataFetcherWithFieldCoordinates { +public class QueryViewerDataFetcher implements IDataFetcherWithFieldCoordinates { @Override - public IViewer get(DataFetchingEnvironment environment) throws Exception { - return new DefaultViewer(); + public Object get(DataFetchingEnvironment environment) throws Exception { + return new Object(); } } diff --git a/packages/sirius-web/backend/sirius-web-application/src/main/resources/schema/siriusweb.graphqls b/packages/sirius-web/backend/sirius-web-application/src/main/resources/schema/siriusweb.graphqls index 0df8457d8e..dd5b0bcd6f 100644 --- a/packages/sirius-web/backend/sirius-web-application/src/main/resources/schema/siriusweb.graphqls +++ b/packages/sirius-web/backend/sirius-web-application/src/main/resources/schema/siriusweb.graphqls @@ -1,10 +1,9 @@ -extend interface Viewer { +extend type Viewer { project(projectId: ID!): Project projects(page: Int!, limit: Int!): ViewerProjectsConnection! projectTemplates(page: Int!, limit: Int!): ViewerProjectTemplatesConnection! } - type ViewerProjectsConnection { edges: [ViewerProjectsEdge!]! pageInfo: PageInfo! @@ -35,15 +34,6 @@ type ProjectTemplate { imageURL: String! } -type DefaultViewer implements Viewer { - id: ID! - username: String! - editingContext(editingContextId: ID!): EditingContext - project(projectId: ID!): Project - projects(page: Int!, limit: Int!): ViewerProjectsConnection! - projectTemplates(page: Int!, limit: Int!): ViewerProjectTemplatesConnection! -} - extend type Mutation { createProject(input: CreateProjectInput!): CreateProjectPayload! renameProject(input: RenameProjectInput!): RenameProjectPayload! @@ -80,11 +70,7 @@ input DeleteProjectInput { projectId: ID! } -union DeleteProjectPayload = ErrorPayload | DeleteProjectSuccessPayload - -type DeleteProjectSuccessPayload { - id: ID! -} +union DeleteProjectPayload = ErrorPayload | SuccessPayload extend type Subscription { projectEvent(input: ProjectEventInput!): ProjectEventPayload! diff --git a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/IViewerProvider.java b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/IViewerProvider.java deleted file mode 100644 index 090dafc150..0000000000 --- a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/IViewerProvider.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019, 2022 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.sirius.web.graphql.datafetchers; - -import java.util.Optional; - -import org.eclipse.sirius.web.services.api.viewer.IViewer; - -import graphql.schema.DataFetchingEnvironment; - -/** - * Interface to obtain the current {@link IViewer} from a GraphQL {@link DataFetchingEnvironment}. - * - * @author pcdavid - */ -public interface IViewerProvider { - Optional getViewer(DataFetchingEnvironment environment); -} diff --git a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/mutation/MutationDeleteProjectDataFetcher.java b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/mutation/MutationDeleteProjectDataFetcher.java index db6faa2b64..fb50025f0f 100644 --- a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/mutation/MutationDeleteProjectDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/mutation/MutationDeleteProjectDataFetcher.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. + * Copyright (c) 2019, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -13,19 +13,17 @@ package org.eclipse.sirius.web.graphql.datafetchers.mutation; import com.fasterxml.jackson.databind.ObjectMapper; + import java.util.Objects; import org.eclipse.sirius.components.annotations.spring.graphql.MutationDataFetcher; import org.eclipse.sirius.components.collaborative.api.IEditingContextEventProcessorRegistry; -import org.eclipse.sirius.components.core.api.ErrorPayload; import org.eclipse.sirius.components.core.api.IPayload; +import org.eclipse.sirius.components.core.api.SuccessPayload; import org.eclipse.sirius.components.graphql.api.IDataFetcherWithFieldCoordinates; -import org.eclipse.sirius.web.graphql.datafetchers.IViewerProvider; import org.eclipse.sirius.web.graphql.messages.IGraphQLMessageService; import org.eclipse.sirius.web.services.api.projects.DeleteProjectInput; -import org.eclipse.sirius.web.services.api.projects.DeleteProjectSuccessPayload; import org.eclipse.sirius.web.services.api.projects.IProjectService; -import org.eclipse.sirius.web.services.api.viewer.IViewer; import graphql.schema.DataFetchingEnvironment; @@ -52,21 +50,15 @@ public class MutationDeleteProjectDataFetcher implements IDataFetcherWithFieldCo private final ObjectMapper objectMapper; - private final IViewerProvider viewerProvider; - private final IEditingContextEventProcessorRegistry editingContextEventProcessorRegistry; private final IProjectService projectService; - private final IGraphQLMessageService messageService; - - public MutationDeleteProjectDataFetcher(ObjectMapper objectMapper, IViewerProvider viewerProvider, IProjectService projectService, + public MutationDeleteProjectDataFetcher(ObjectMapper objectMapper, IProjectService projectService, IEditingContextEventProcessorRegistry editingContextEventProcessorRegistry, IGraphQLMessageService messageService) { this.objectMapper = Objects.requireNonNull(objectMapper); - this.viewerProvider = Objects.requireNonNull(viewerProvider); this.projectService = Objects.requireNonNull(projectService); this.editingContextEventProcessorRegistry = Objects.requireNonNull(editingContextEventProcessorRegistry); - this.messageService = Objects.requireNonNull(messageService); } @Override @@ -74,15 +66,8 @@ public IPayload get(DataFetchingEnvironment environment) throws Exception { Object argument = environment.getArgument(INPUT_ARGUMENT); var input = this.objectMapper.convertValue(argument, DeleteProjectInput.class); - var optionalViewer = this.viewerProvider.getViewer(environment); - IPayload payload = new ErrorPayload(input.id(), this.messageService.unexpectedError()); - if (optionalViewer.isPresent()) { - IViewer viewer = optionalViewer.get(); - this.editingContextEventProcessorRegistry.disposeEditingContextEventProcessor(input.projectId().toString()); - this.projectService.delete(input.projectId()); - payload = new DeleteProjectSuccessPayload(input.id(), viewer); - } - - return payload; + this.editingContextEventProcessorRegistry.disposeEditingContextEventProcessor(input.projectId().toString()); + this.projectService.delete(input.projectId()); + return new SuccessPayload(input.id()); } } diff --git a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/query/QueryViewerDataFetcher.java b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/query/QueryViewerDataFetcher.java index 406a392515..97f10ae937 100644 --- a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/query/QueryViewerDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/query/QueryViewerDataFetcher.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. + * Copyright (c) 2019, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -12,12 +12,8 @@ *******************************************************************************/ package org.eclipse.sirius.web.graphql.datafetchers.query; -import java.util.Objects; - import org.eclipse.sirius.components.annotations.spring.graphql.QueryDataFetcher; import org.eclipse.sirius.components.graphql.api.IDataFetcherWithFieldCoordinates; -import org.eclipse.sirius.web.graphql.datafetchers.IViewerProvider; -import org.eclipse.sirius.web.services.api.viewer.IViewer; import graphql.schema.DataFetchingEnvironment; @@ -36,16 +32,10 @@ * @author sbegaudeau */ @QueryDataFetcher(type = "Query", field = "viewer") -public class QueryViewerDataFetcher implements IDataFetcherWithFieldCoordinates { - - private final IViewerProvider viewerProvider; - - public QueryViewerDataFetcher(IViewerProvider viewerProvider) { - this.viewerProvider = Objects.requireNonNull(viewerProvider); - } +public class QueryViewerDataFetcher implements IDataFetcherWithFieldCoordinates { @Override - public IViewer get(DataFetchingEnvironment environment) throws Exception { - return this.viewerProvider.getViewer(environment).orElse(null); + public Object get(DataFetchingEnvironment environment) throws Exception { + return new Object(); } } diff --git a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserEditingContextDataFetcher.java b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerEditingContextDataFetcher.java similarity index 86% rename from packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserEditingContextDataFetcher.java rename to packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerEditingContextDataFetcher.java index 66bf0a1a34..0841f6bdd0 100644 --- a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserEditingContextDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerEditingContextDataFetcher.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021, 2023 Obeo. + * Copyright (c) 2021, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -10,7 +10,7 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.web.graphql.datafetchers.user; +package org.eclipse.sirius.web.graphql.datafetchers.viewer; import java.util.HashMap; import java.util.Map; @@ -29,15 +29,15 @@ *

* *
- * type User {
+ * type Viewer {
  *   editingContext(editingContextId: ID!): EditingContext
  * }
  * 
* * @author sbegaudeau */ -@QueryDataFetcher(type = "User", field = "editingContext") -public class UserEditingContextDataFetcher implements IDataFetcherWithFieldCoordinates> { +@QueryDataFetcher(type = "Viewer", field = "editingContext") +public class ViewerEditingContextDataFetcher implements IDataFetcherWithFieldCoordinates> { private static final String EDITING_CONTEXT_ID_ARGUMENT = "editingContextId"; @Override diff --git a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserProjectDataFetcher.java b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerProjectDataFetcher.java similarity index 84% rename from packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserProjectDataFetcher.java rename to packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerProjectDataFetcher.java index c613eaf53c..03feb73e4f 100644 --- a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserProjectDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerProjectDataFetcher.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. + * Copyright (c) 2019, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -10,7 +10,7 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.web.graphql.datafetchers.user; +package org.eclipse.sirius.web.graphql.datafetchers.viewer; import java.util.Objects; @@ -36,14 +36,14 @@ * * @author sbegaudeau */ -@QueryDataFetcher(type = "User", field = "project") -public class UserProjectDataFetcher implements IDataFetcherWithFieldCoordinates { +@QueryDataFetcher(type = "Viewer", field = "project") +public class ViewerProjectDataFetcher implements IDataFetcherWithFieldCoordinates { private static final String PROJECT_ID_ARGUMENT = "projectId"; private final IProjectService projectService; - public UserProjectDataFetcher(IProjectService projectService) { + public ViewerProjectDataFetcher(IProjectService projectService) { this.projectService = Objects.requireNonNull(projectService); } diff --git a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserProjectTemplatesDataFetcher.java b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerProjectTemplatesDataFetcher.java similarity index 91% rename from packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserProjectTemplatesDataFetcher.java rename to packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerProjectTemplatesDataFetcher.java index f579adb41a..571c17eb72 100644 --- a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserProjectTemplatesDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerProjectTemplatesDataFetcher.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Obeo. + * Copyright (c) 2023, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -10,7 +10,7 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.web.graphql.datafetchers.user; +package org.eclipse.sirius.web.graphql.datafetchers.viewer; import java.util.Comparator; import java.util.List; @@ -39,15 +39,15 @@ * * @author pcdavid */ -@QueryDataFetcher(type = "User", field = "projectTemplates") -public class UserProjectTemplatesDataFetcher implements IDataFetcherWithFieldCoordinates> { +@QueryDataFetcher(type = "Viewer", field = "projectTemplates") +public class ViewerProjectTemplatesDataFetcher implements IDataFetcherWithFieldCoordinates> { private static final String PAGE_ARGUMENT = "page"; private static final String LIMIT_ARGUMENT = "limit"; private final List projectTemplateProviders; - public UserProjectTemplatesDataFetcher(List projectTemplateProviders) { + public ViewerProjectTemplatesDataFetcher(List projectTemplateProviders) { this.projectTemplateProviders = Objects.requireNonNull(projectTemplateProviders); } diff --git a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserProjectsDataFetcher.java b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerProjectsDataFetcher.java similarity index 92% rename from packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserProjectsDataFetcher.java rename to packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerProjectsDataFetcher.java index 64f77c4aac..549c5eb3be 100644 --- a/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/user/UserProjectsDataFetcher.java +++ b/packages/sirius-web/backend/sirius-web-graphql/src/main/java/org/eclipse/sirius/web/graphql/datafetchers/viewer/ViewerProjectsDataFetcher.java @@ -10,7 +10,7 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -package org.eclipse.sirius.web.graphql.datafetchers.user; +package org.eclipse.sirius.web.graphql.datafetchers.viewer; import java.util.List; import java.util.Objects; @@ -47,8 +47,8 @@ * * @author pcdavid */ -@QueryDataFetcher(type = "User", field = "projects") -public class UserProjectsDataFetcher implements IDataFetcherWithFieldCoordinates> { +@QueryDataFetcher(type = "Viewer", field = "projects") +public class ViewerProjectsDataFetcher implements IDataFetcherWithFieldCoordinates> { private static final String PAGE_ARGUMENT = "page"; @@ -56,7 +56,7 @@ public class UserProjectsDataFetcher implements IDataFetcherWithFieldCoordinates private final IProjectService projectService; - public UserProjectsDataFetcher(IProjectService projectService) { + public ViewerProjectsDataFetcher(IProjectService projectService) { this.projectService = Objects.requireNonNull(projectService); } diff --git a/packages/sirius-web/backend/sirius-web-graphql/src/main/resources/schema/siriusweb.graphqls b/packages/sirius-web/backend/sirius-web-graphql/src/main/resources/schema/siriusweb.graphqls index bbfb779837..0928306842 100644 --- a/packages/sirius-web/backend/sirius-web-graphql/src/main/resources/schema/siriusweb.graphqls +++ b/packages/sirius-web/backend/sirius-web-graphql/src/main/resources/schema/siriusweb.graphqls @@ -1,6 +1,7 @@ -extend interface Viewer { +extend type Viewer { project(projectId: ID!): Project projects(page: Int!, limit: Int!): ViewerProjectConnection! + projectTemplates(page: Int!, limit: Int!): ViewerProjectTemplateConnection! } type ViewerProjectConnection { @@ -48,10 +49,6 @@ type ProjectTemplate { imageURL: String! } -extend interface Viewer { - projectTemplates(page: Int!, limit: Int!): ViewerProjectTemplateConnection! -} - type ViewerProjectTemplateConnection { edges: [ViewerProjectTemplateEdge!]! pageInfo: PageInfo! @@ -61,15 +58,6 @@ type ViewerProjectTemplateEdge { node: ProjectTemplate! } -type User implements Viewer { - id: ID! - username: String! - editingContext(editingContextId: ID!): EditingContext - project(projectId: ID!): Project - projects(page: Int!, limit: Int!): ViewerProjectConnection! - projectTemplates(page: Int!, limit: Int!): ViewerProjectTemplateConnection! -} - extend type Mutation { createProject(input: CreateProjectInput!): CreateProjectPayload! createProjectFromTemplate(input: CreateProjectFromTemplateInput!): CreateProjectFromTemplatePayload! @@ -118,12 +106,7 @@ input DeleteProjectInput { projectId: ID! } -union DeleteProjectPayload = ErrorPayload | DeleteProjectSuccessPayload - -type DeleteProjectSuccessPayload { - id: ID! - viewer: Viewer! -} +union DeleteProjectPayload = ErrorPayload | SuccessPayload input RenameProjectInput { id: ID! diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/ViewerProvider.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/ViewerProvider.java deleted file mode 100644 index 46f3e958f4..0000000000 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/ViewerProvider.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019, 2022 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.sirius.web.sample.services; - -import java.util.Optional; -import java.util.UUID; - -import org.eclipse.sirius.web.graphql.datafetchers.IViewerProvider; -import org.eclipse.sirius.web.services.api.viewer.IViewer; -import org.eclipse.sirius.web.services.api.viewer.User; -import org.springframework.stereotype.Service; - -import graphql.schema.DataFetchingEnvironment; - -/** - * Service used to retrieve the current viewer. - * - * @author sbegaudeau - */ -@Service -public class ViewerProvider implements IViewerProvider { - @Override - public Optional getViewer(DataFetchingEnvironment environment) { - return Optional.of(new User(UUID.randomUUID(), "system")); - } - -} diff --git a/packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/projects/DeleteProjectSuccessPayload.java b/packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/projects/DeleteProjectSuccessPayload.java deleted file mode 100644 index 9b04130a69..0000000000 --- a/packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/projects/DeleteProjectSuccessPayload.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.sirius.web.services.api.projects; - -import java.util.Objects; -import java.util.UUID; - -import org.eclipse.sirius.components.core.api.IPayload; -import org.eclipse.sirius.web.services.api.viewer.IViewer; - -/** - * Represent the result returned when deleting a project through the graphql API. - * - * @author fbarbin - */ -public record DeleteProjectSuccessPayload(UUID id, IViewer viewer) implements IPayload { - public DeleteProjectSuccessPayload { - Objects.requireNonNull(id); - Objects.requireNonNull(viewer); - } -} diff --git a/packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/viewer/IViewer.java b/packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/viewer/IViewer.java deleted file mode 100644 index ec22b42c12..0000000000 --- a/packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/viewer/IViewer.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019, 2022 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.sirius.web.services.api.viewer; - -import java.util.UUID; - -/** - * Interface used to represent a viewer. - * - * @author gcoutable - */ -public interface IViewer { - UUID getId(); - - String getUsername(); -} diff --git a/packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/viewer/User.java b/packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/viewer/User.java deleted file mode 100644 index 5a3a088b60..0000000000 --- a/packages/sirius-web/backend/sirius-web-services-api/src/main/java/org/eclipse/sirius/web/services/api/viewer/User.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019, 2022 Obeo. - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Obeo - initial API and implementation - *******************************************************************************/ -package org.eclipse.sirius.web.services.api.viewer; - -import java.text.MessageFormat; -import java.util.UUID; - -/** - * Class used to represent a user. - * - * @author gcoutable - */ -public class User implements IViewer { - - private UUID id; - - private String username; - - public User(UUID id, String username) { - this.id = id; - this.username = username; - - } - - @Override - public UUID getId() { - return this.id; - } - - @Override - public String getUsername() { - return this.username; - } - - @Override - public String toString() { - String pattern = "{0} '{'id: {1}, username: {2}'}'"; - return MessageFormat.format(pattern, this.getClass().getSimpleName(), this.id, this.username); - } - -} diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/ProjectControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/ProjectControllerIntegrationTests.java index 52118e792d..28868780e4 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/ProjectControllerIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/ProjectControllerIntegrationTests.java @@ -22,12 +22,12 @@ import java.util.UUID; import org.eclipse.sirius.components.core.api.ErrorPayload; +import org.eclipse.sirius.components.core.api.SuccessPayload; import org.eclipse.sirius.web.AbstractIntegrationTests; import org.eclipse.sirius.web.TestIdentifiers; import org.eclipse.sirius.web.application.project.dto.CreateProjectInput; import org.eclipse.sirius.web.application.project.dto.CreateProjectSuccessPayload; import org.eclipse.sirius.web.application.project.dto.DeleteProjectInput; -import org.eclipse.sirius.web.application.project.dto.DeleteProjectSuccessPayload; import org.eclipse.sirius.web.application.project.dto.ProjectEventInput; import org.eclipse.sirius.web.application.project.dto.ProjectRenamedEventPayload; import org.eclipse.sirius.web.application.project.dto.RenameProjectInput; @@ -233,7 +233,7 @@ public void givenExistingProjectToDeleteWhenMutationIsPerformedThenProjectIsDele var input = new DeleteProjectInput(UUID.randomUUID(), TestIdentifiers.UML_SAMPLE_PROJECT); var result = this.graphQLRequestor.execute(DELETE_PROJECT_MUTATION, input); String typename = JsonPath.read(result, "$.data.deleteProject.__typename"); - assertThat(typename).isEqualTo(DeleteProjectSuccessPayload.class.getSimpleName()); + assertThat(typename).isEqualTo(SuccessPayload.class.getSimpleName()); assertThat(this.projectSearchService.existsById(TestIdentifiers.UML_SAMPLE_PROJECT)).isFalse(); @@ -314,7 +314,7 @@ public void givenProjectWhenTheProjectIsDeletedThenTheProjectEventIsCompleted() Runnable deleteProjectTask = () -> { var result = this.graphQLRequestor.execute(DELETE_PROJECT_MUTATION, input); String typename = JsonPath.read(result, "$.data.deleteProject.__typename"); - assertThat(typename).isEqualTo(DeleteProjectSuccessPayload.class.getSimpleName()); + assertThat(typename).isEqualTo(SuccessPayload.class.getSimpleName()); TestTransaction.flagForCommit(); TestTransaction.end(); diff --git a/packages/sirius-web/frontend/sirius-web-application/src/modals/delete-project/useDeleteProject.ts b/packages/sirius-web/frontend/sirius-web-application/src/modals/delete-project/useDeleteProject.ts index 1a3d513036..58056f77fa 100644 --- a/packages/sirius-web/frontend/sirius-web-application/src/modals/delete-project/useDeleteProject.ts +++ b/packages/sirius-web/frontend/sirius-web-application/src/modals/delete-project/useDeleteProject.ts @@ -65,7 +65,7 @@ export const useDeleteProject = (): UseDeleteProjectValue => { performProjectDeletion({ variables }); }; - const projectDeleted: boolean = data?.deleteProject.__typename === 'DeleteProjectSuccessPayload'; + const projectDeleted: boolean = data?.deleteProject.__typename === 'SuccessPayload'; return { deleteProject,