|
15 | 15 | */ |
16 | 16 | package io.gravitee.rest.api.service.cockpit.command.handler; |
17 | 17 |
|
| 18 | +import com.fasterxml.jackson.databind.ObjectMapper; |
18 | 19 | import io.gravitee.apim.core.access_point.crud_service.AccessPointCrudService; |
19 | 20 | import io.gravitee.apim.core.access_point.model.AccessPoint; |
20 | 21 | import io.gravitee.apim.core.scoring.model.ScoringRuleset; |
|
53 | 54 | import io.gravitee.repository.management.api.ParameterRepository; |
54 | 55 | import io.gravitee.repository.management.api.PlanRepository; |
55 | 56 | import io.gravitee.repository.management.api.PortalMenuLinkRepository; |
| 57 | +import io.gravitee.repository.management.api.PortalNavigationItemRepository; |
56 | 58 | import io.gravitee.repository.management.api.PortalNotificationConfigRepository; |
| 59 | +import io.gravitee.repository.management.api.PortalPageContentRepository; |
57 | 60 | import io.gravitee.repository.management.api.PortalPageContextRepository; |
58 | 61 | import io.gravitee.repository.management.api.PortalPageRepository; |
59 | 62 | import io.gravitee.repository.management.api.PromotionRepository; |
|
84 | 87 | import io.gravitee.repository.management.model.NotificationReferenceType; |
85 | 88 | import io.gravitee.repository.management.model.PageReferenceType; |
86 | 89 | import io.gravitee.repository.management.model.ParameterReferenceType; |
| 90 | +import io.gravitee.repository.management.model.PortalNavigationItem; |
87 | 91 | import io.gravitee.repository.management.model.QualityRule; |
88 | 92 | import io.gravitee.repository.management.model.RatingReferenceType; |
89 | 93 | import io.gravitee.repository.management.model.RoleReferenceType; |
|
114 | 118 | @Component |
115 | 119 | public class DeleteEnvironmentCommandHandler implements CommandHandler<DeleteEnvironmentCommand, DeleteEnvironmentReply> { |
116 | 120 |
|
| 121 | + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); |
117 | 122 | private final AccessPointCrudService accessPointService; |
118 | 123 | private final AccessPointRepository accessPointRepository; |
119 | 124 | private final AlertService alertService; |
@@ -153,6 +158,8 @@ public class DeleteEnvironmentCommandHandler implements CommandHandler<DeleteEnv |
153 | 158 | private final PortalNotificationConfigRepository portalNotificationConfigRepository; |
154 | 159 | private final PortalPageRepository portalPageRepository; |
155 | 160 | private final PortalPageContextRepository portalPageContextRepository; |
| 161 | + private final PortalNavigationItemRepository portalNavigationItemRepository; |
| 162 | + private final PortalPageContentRepository portalPageContentRepository; |
156 | 163 | private final PromotionRepository promotionRepository; |
157 | 164 | private final QualityRuleRepository qualityRuleRepository; |
158 | 165 | private final RatingAnswerRepository ratingAnswerRepository; |
@@ -204,6 +211,8 @@ public DeleteEnvironmentCommandHandler( |
204 | 211 | @Lazy PortalNotificationConfigRepository portalNotificationConfigRepository, |
205 | 212 | @Lazy PortalPageRepository portalPageRepository, |
206 | 213 | @Lazy PortalPageContextRepository portalPageContextRepository, |
| 214 | + @Lazy PortalNavigationItemRepository portalNavigationItemRepository, |
| 215 | + @Lazy PortalPageContentRepository portalPageContentRepository, |
207 | 216 | @Lazy PromotionRepository promotionRepository, |
208 | 217 | @Lazy QualityRuleRepository qualityRuleRepository, |
209 | 218 | @Lazy RatingAnswerRepository ratingAnswerRepository, |
@@ -268,6 +277,8 @@ public DeleteEnvironmentCommandHandler( |
268 | 277 | this.portalNotificationConfigRepository = portalNotificationConfigRepository; |
269 | 278 | this.portalPageRepository = portalPageRepository; |
270 | 279 | this.portalPageContextRepository = portalPageContextRepository; |
| 280 | + this.portalNavigationItemRepository = portalNavigationItemRepository; |
| 281 | + this.portalPageContentRepository = portalPageContentRepository; |
271 | 282 | this.promotionRepository = promotionRepository; |
272 | 283 | this.qualityRuleRepository = qualityRuleRepository; |
273 | 284 | this.ratingAnswerRepository = ratingAnswerRepository; |
@@ -367,7 +378,8 @@ private void deleteEnvironment(ExecutionContext executionContext, EnvironmentEnt |
367 | 378 | parameterRepository.deleteByReferenceIdAndReferenceType(environment.getId(), ParameterReferenceType.ENVIRONMENT); |
368 | 379 | portalMenuLinkRepository.deleteByEnvironmentId(environment.getId()); |
369 | 380 | portalPageRepository.deleteByEnvironmentId(environment.getId()); |
370 | | - portalPageContextRepository.deleteByEnvironmentId(environment.getId()); |
| 381 | + deletePortalNavigationItems(environment); |
| 382 | + portalNavigationItemRepository.deleteByEnvironmentId(environment.getId()); |
371 | 383 | customUserFieldsRepository.deleteByReferenceIdAndReferenceType(environment.getId(), CustomUserFieldReferenceType.ENVIRONMENT); |
372 | 384 | groupRepository |
373 | 385 | .deleteByEnvironmentId(environment.getId()) |
@@ -410,6 +422,40 @@ private void deleteEnvironment(ExecutionContext executionContext, EnvironmentEnt |
410 | 422 | clusterRepository.deleteByEnvironmentId(environment.getId()); |
411 | 423 | } |
412 | 424 |
|
| 425 | + private void deletePortalNavigationItems(EnvironmentEntity environment) throws TechnicalException { |
| 426 | + portalNavigationItemRepository |
| 427 | + .findAllByOrganizationIdAndEnvironmentId(environment.getOrganizationId(), environment.getId()) |
| 428 | + .stream() |
| 429 | + .filter(item -> item.getType() == PortalNavigationItem.Type.PAGE) |
| 430 | + .forEach(item -> { |
| 431 | + try { |
| 432 | + var pageContentId = extractPageContentId(item.getConfiguration()); |
| 433 | + if (pageContentId == null) { |
| 434 | + return; |
| 435 | + } |
| 436 | + portalPageContentRepository.delete(pageContentId); |
| 437 | + } catch (TechnicalException e) { |
| 438 | + throw new TechnicalManagementException(e); |
| 439 | + } |
| 440 | + }); |
| 441 | + portalPageContextRepository.deleteByEnvironmentId(environment.getId()); |
| 442 | + } |
| 443 | + |
| 444 | + private String extractPageContentId(String configuration) { |
| 445 | + if (configuration == null || configuration.isEmpty()) { |
| 446 | + return null; |
| 447 | + } |
| 448 | + try { |
| 449 | + var node = OBJECT_MAPPER.readTree(configuration); |
| 450 | + if (node.has("pageId")) { |
| 451 | + return node.get("pageId").asText(); |
| 452 | + } |
| 453 | + } catch (Exception e) { |
| 454 | + log.error("Failed to extract pageId from configuration: {}", configuration, e); |
| 455 | + } |
| 456 | + return null; |
| 457 | + } |
| 458 | + |
413 | 459 | private void deleteApis(ExecutionContext executionContext) throws TechnicalException { |
414 | 460 | apiRepository |
415 | 461 | .deleteByEnvironmentId(executionContext.getEnvironmentId()) |
|
0 commit comments