From ece7b42998c70b7e6d588fd80fc4fc1d6c9c05a2 Mon Sep 17 00:00:00 2001
From: Lukasz Lopatowski <llopat@man.poznan.pl>
Date: Tue, 27 May 2025 17:03:55 +0200
Subject: [PATCH] Some tests and package refactor

---
 build.gradle                                  |  7 ++---
 .../ConfigurationControllerTest.java          |  1 +
 .../api/user/UsersControllerIntTest.java      |  4 +--
 .../impl/BulkDomainServiceIntTest.java        |  4 +--
 .../impl/LocalFileStorageServiceTest.java     |  4 +--
 .../kubernetes/KubernetesConnectorHelper.java |  2 +-
 .../gitlab/GitLabEventsListener.java          |  2 +-
 .../kubernetes/KubernetesManager.java         |  2 +-
 .../notifications/NotificationController.java |  2 +-
 .../notifications/NotificationManager.java    |  6 ++---
 .../types/service/FormTypeService.java        |  1 -
 .../DefaultAppLifecycleManager.java           |  2 +-
 .../orchestration/jobs/DomainCreationJob.java |  2 +-
 .../orchestration/jobs/DomainGroupJob.java    |  2 +-
 .../net/geant/nmaas/portal/PortalConfig.java  |  4 +--
 .../portal/api/auth/BasicAuthController.java  |  4 +--
 .../portal/api/auth/OIDCAuthController.java   |  8 +++---
 .../nmaas/portal/api/bulk/BulkController.java |  7 ++++-
 .../api/bulk/{ => model}/BulkAppDetails.java  |  2 +-
 .../{ => model}/BulkDeploymentEntryView.java  |  3 ++-
 .../bulk/{ => model}/BulkDeploymentView.java  |  2 +-
 .../bulk/{ => model}/BulkDeploymentViewS.java |  3 ++-
 .../bulk/{ => model}/BulkQueueDetails.java    |  2 +-
 .../ConfigurationController.java              |  1 +
 .../{ => model}/ConfigurationView.java        |  5 ++--
 .../AuthenticationException.java              |  2 +-
 .../ExternalUserCanNotBeLinked.java           |  2 +-
 .../ExternalUserMatchException.java           |  2 +-
 .../MarketException.java                      |  2 +-
 .../MissingElementException.java              |  2 +-
 .../ProcessingException.java                  |  2 +-
 .../SignupException.java                      |  2 +-
 .../StorageException.java                     |  2 +-
 .../ValidationError.java                      |  2 +-
 .../ValidationErrorBuilder.java               |  2 +-
 .../portal/api/info/ContentController.java    |  2 +-
 .../api/market/ApiExceptionHandler.java       | 12 ++++-----
 .../portal/api/market/AppBaseController.java  |  2 +-
 .../api/market/AppCommentsController.java     |  4 +--
 .../market/AppConfigurationController.java    |  4 +--
 .../api/market/AppInstanceController.java     |  4 +--
 .../api/market/AppScreenshotsController.java  |  2 +-
 .../api/market/ApplicationController.java     |  6 ++---
 .../portal/api/market/BaseController.java     |  2 +-
 .../portal/api/market/DomainController.java   |  4 +--
 .../portal/api/market/GroupController.java    |  2 +-
 .../portal/api/market/RatingController.java   |  2 +-
 .../api/market/RegistrationController.java    |  4 +--
 .../api/market/WebhookEventController.java    |  2 +-
 .../portal/api/user/ProfileController.java    |  2 +-
 .../api/user/SSHKeysControllerAdvice.java     |  4 +--
 .../portal/api/user/UsersController.java      |  4 +--
 .../UndergoingMaintenanceException.java       |  2 +-
 .../service/BulkApplicationService.java       |  8 +++---
 .../portal/service/BulkDomainService.java     |  2 +-
 .../portal/service/ConfigurationManager.java  |  2 +-
 .../portal/service/WebhookEventService.java   |  2 +-
 .../impl/ApplicationBaseServiceImpl.java      |  4 +--
 .../service/impl/ApplicationServiceImpl.java  |  5 ++--
 .../ApplicationSubscriptionServiceImpl.java   |  2 +-
 .../impl/BulkApplicationServiceImpl.java      | 26 +++++++++----------
 .../service/impl/BulkCsvProcessorImpl.java    |  2 +-
 .../service/impl/BulkDomainServiceImpl.java   | 16 ++++++------
 .../impl/ConfigurationManagerImpl.java        |  2 +-
 .../service/impl/ContentServiceImpl.java      |  2 +-
 .../service/impl/DomainGroupServiceImpl.java  |  5 ++--
 .../service/impl/DomainServiceImpl.java       |  4 +--
 .../service/impl/K8sShellServiceImpl.java     |  2 +-
 .../service/impl/LocalFileStorageService.java |  4 +--
 .../service/impl/OidcUserServiceImpl.java     |  6 ++---
 .../portal/service/impl/UserServiceImpl.java  | 10 +++----
 .../bulk/BulkDeploymentJobServiceTest.java    |  2 +-
 .../NotificationManagerTest.java              |  4 +--
 .../types/service/FormTypeServiceTest.java    |  1 -
 .../api/auth/BasicAuthControllerTest.java     |  2 +-
 .../api/auth/OIDCAuthControllerTest.java      |  2 +-
 .../portal/api/bulk/BulkControllerTest.java   |  3 ++-
 .../api/info/ContentControllerTest.java       |  2 +-
 .../api/market/AppBaseControllerTest.java     |  2 +-
 .../api/market/AppCommentsControllerTest.java |  4 +--
 .../api/market/AppInstanceControllerTest.java |  3 +--
 .../market/AppScreenshotsControllerTest.java  |  2 +-
 .../market/RegistrationControllerTest.java    |  4 +--
 .../api/market/UsersControllerTest.java       |  4 +--
 .../persistent/entity/ConfigurationTest.java  |  2 +-
 .../impl/ApplicationBaseServiceTest.java      |  2 +-
 .../ApplicationSubscriptionServiceTest.java   |  4 +--
 .../impl/BulkApplicationServiceImplTest.java  |  3 +--
 .../impl/BulkDomainServiceImplTest.java       |  2 +-
 .../impl/ConfigurationManagerTest.java        |  2 +-
 .../service/impl/ContentServiceImplTest.java  |  2 +-
 .../service/impl/DomainServiceTest.java       |  4 +--
 .../impl/InternationalizationServiceTest.java |  2 +-
 .../service/impl/OidcUserServiceImplTest.java |  2 --
 .../service/impl/UserServiceImplTest.java     |  6 ++---
 95 files changed, 164 insertions(+), 172 deletions(-)
 rename src/main/java/net/geant/nmaas/portal/api/bulk/{ => model}/BulkAppDetails.java (92%)
 rename src/main/java/net/geant/nmaas/portal/api/bulk/{ => model}/BulkDeploymentEntryView.java (94%)
 rename src/main/java/net/geant/nmaas/portal/api/bulk/{ => model}/BulkDeploymentView.java (86%)
 rename src/main/java/net/geant/nmaas/portal/api/bulk/{ => model}/BulkDeploymentViewS.java (90%)
 rename src/main/java/net/geant/nmaas/portal/api/bulk/{ => model}/BulkQueueDetails.java (89%)
 rename src/main/java/net/geant/nmaas/portal/api/configuration/{ => model}/ConfigurationView.java (95%)
 rename src/main/java/net/geant/nmaas/portal/api/{exception => exceptions}/AuthenticationException.java (92%)
 rename src/main/java/net/geant/nmaas/portal/api/{exception => exceptions}/ExternalUserCanNotBeLinked.java (76%)
 rename src/main/java/net/geant/nmaas/portal/api/{exception => exceptions}/ExternalUserMatchException.java (77%)
 rename src/main/java/net/geant/nmaas/portal/api/{exception => exceptions}/MarketException.java (91%)
 rename src/main/java/net/geant/nmaas/portal/api/{exception => exceptions}/MissingElementException.java (92%)
 rename src/main/java/net/geant/nmaas/portal/api/{exception => exceptions}/ProcessingException.java (91%)
 rename src/main/java/net/geant/nmaas/portal/api/{exception => exceptions}/SignupException.java (91%)
 rename src/main/java/net/geant/nmaas/portal/api/{exception => exceptions}/StorageException.java (91%)
 rename src/main/java/net/geant/nmaas/portal/api/{exception => exceptions}/ValidationError.java (92%)
 rename src/main/java/net/geant/nmaas/portal/api/{exception => exceptions}/ValidationErrorBuilder.java (91%)

diff --git a/build.gradle b/build.gradle
index 34f070718..378199803 100644
--- a/build.gradle
+++ b/build.gradle
@@ -247,9 +247,7 @@ jacocoTestCoverageVerification {
             ]
             excludes = [
                     '**.model*',
-                    '**.exceptions**',
-                    '**.exception**',
-                    'net.geant.nmaas.portal.api.bulk'
+                    '**.exceptions**'
             ]
             limit {
                 counter = 'INSTRUCTION'
@@ -260,8 +258,7 @@ jacocoTestCoverageVerification {
         rule {
             element = 'PACKAGE'
             includes = [
-                    'net.geant.nmaas.orchestration.**',
-                    'net.geant.nmaas.portal.api.bulk'
+                    'net.geant.nmaas.orchestration.**'
             ]
             excludes = [
                     '**.model*',
diff --git a/src/integrationTest/java/net/geant/nmaas/portal/api/configuration/ConfigurationControllerTest.java b/src/integrationTest/java/net/geant/nmaas/portal/api/configuration/ConfigurationControllerTest.java
index d9dc7e03f..d3ac19828 100644
--- a/src/integrationTest/java/net/geant/nmaas/portal/api/configuration/ConfigurationControllerTest.java
+++ b/src/integrationTest/java/net/geant/nmaas/portal/api/configuration/ConfigurationControllerTest.java
@@ -2,6 +2,7 @@ package net.geant.nmaas.portal.api.configuration;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import net.geant.nmaas.portal.api.BaseControllerTestSetup;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.api.i18n.api.InternationalizationView;
 import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.persistent.entity.UsersHelper;
diff --git a/src/integrationTest/java/net/geant/nmaas/portal/api/user/UsersControllerIntTest.java b/src/integrationTest/java/net/geant/nmaas/portal/api/user/UsersControllerIntTest.java
index c4921e7bf..92c482a89 100644
--- a/src/integrationTest/java/net/geant/nmaas/portal/api/user/UsersControllerIntTest.java
+++ b/src/integrationTest/java/net/geant/nmaas/portal/api/user/UsersControllerIntTest.java
@@ -10,8 +10,8 @@ import net.geant.nmaas.portal.api.domain.PasswordReset;
 import net.geant.nmaas.portal.api.domain.UserRequest;
 import net.geant.nmaas.portal.api.domain.UserRoleView;
 import net.geant.nmaas.portal.api.domain.UserView;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.api.security.JWTTokenService;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.User;
diff --git a/src/integrationTest/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceIntTest.java b/src/integrationTest/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceIntTest.java
index 99f48216d..c218c1ade 100644
--- a/src/integrationTest/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceIntTest.java
+++ b/src/integrationTest/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceIntTest.java
@@ -2,10 +2,10 @@ package net.geant.nmaas.portal.service.impl;
 
 import jakarta.transaction.Transactional;
 import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.components.janitor.JanitorService;
-import net.geant.nmaas.portal.api.bulk.BulkDeploymentViewS;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentViewS;
 import net.geant.nmaas.portal.api.bulk.BulkType;
 import net.geant.nmaas.portal.api.bulk.CsvDomain;
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
 import net.geant.nmaas.portal.persistent.entity.BulkDeployment;
 import net.geant.nmaas.portal.persistent.entity.BulkDeploymentState;
diff --git a/src/integrationTest/java/net/geant/nmaas/portal/service/impl/LocalFileStorageServiceTest.java b/src/integrationTest/java/net/geant/nmaas/portal/service/impl/LocalFileStorageServiceTest.java
index 3b01ff026..110262496 100644
--- a/src/integrationTest/java/net/geant/nmaas/portal/service/impl/LocalFileStorageServiceTest.java
+++ b/src/integrationTest/java/net/geant/nmaas/portal/service/impl/LocalFileStorageServiceTest.java
@@ -1,7 +1,7 @@
 package net.geant.nmaas.portal.service.impl;
 
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.StorageException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.StorageException;
 import net.geant.nmaas.portal.persistent.entity.FileInfo;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
diff --git a/src/main/java/net/geant/nmaas/kubernetes/KubernetesConnectorHelper.java b/src/main/java/net/geant/nmaas/kubernetes/KubernetesConnectorHelper.java
index fb1391f8a..ab2d40005 100644
--- a/src/main/java/net/geant/nmaas/kubernetes/KubernetesConnectorHelper.java
+++ b/src/main/java/net/geant/nmaas/kubernetes/KubernetesConnectorHelper.java
@@ -5,7 +5,7 @@ import io.fabric8.kubernetes.client.KubernetesClient;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import net.geant.nmaas.orchestration.AppDeploymentRepositoryManager;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.AppInstance;
 import net.geant.nmaas.portal.service.ApplicationInstanceService;
 import org.springframework.stereotype.Component;
diff --git a/src/main/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabEventsListener.java b/src/main/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabEventsListener.java
index 34e4ce562..bbc39b778 100644
--- a/src/main/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabEventsListener.java
+++ b/src/main/java/net/geant/nmaas/nmservice/configuration/gitlab/GitLabEventsListener.java
@@ -9,7 +9,7 @@ import net.geant.nmaas.nmservice.configuration.gitlab.events.RemoveUserFromRepos
 import net.geant.nmaas.nmservice.configuration.gitlab.events.UserSshKeysUpdatedGitlabEvent;
 import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.KubernetesRepositoryManager;
 import net.geant.nmaas.orchestration.Identifier;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Component;
 
diff --git a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManager.java b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManager.java
index ab50670ce..d3fe9e1e8 100644
--- a/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManager.java
+++ b/src/main/java/net/geant/nmaas/nmservice/deployment/containerorchestrators/kubernetes/KubernetesManager.java
@@ -40,7 +40,7 @@ import net.geant.nmaas.orchestration.entities.AppDeploymentSpec;
 import net.geant.nmaas.orchestration.entities.AppStorageVolume;
 import net.geant.nmaas.orchestration.exceptions.InvalidConfigurationException;
 import net.geant.nmaas.orchestration.exceptions.InvalidDeploymentIdException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.utils.logging.LogLevel;
 import net.geant.nmaas.utils.logging.Loggable;
 import org.apache.commons.lang3.StringUtils;
diff --git a/src/main/java/net/geant/nmaas/notifications/NotificationController.java b/src/main/java/net/geant/nmaas/notifications/NotificationController.java
index d3e7619a8..964b5f164 100644
--- a/src/main/java/net/geant/nmaas/notifications/NotificationController.java
+++ b/src/main/java/net/geant/nmaas/notifications/NotificationController.java
@@ -1,7 +1,7 @@
 package net.geant.nmaas.notifications;
 
 import net.geant.nmaas.notifications.templates.MailType;
-import net.geant.nmaas.portal.api.exception.AuthenticationException;
+import net.geant.nmaas.portal.api.exceptions.AuthenticationException;
 import net.geant.nmaas.utils.captcha.ValidateCaptcha;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationEventPublisher;
diff --git a/src/main/java/net/geant/nmaas/notifications/NotificationManager.java b/src/main/java/net/geant/nmaas/notifications/NotificationManager.java
index 575d94cab..8686a47eb 100644
--- a/src/main/java/net/geant/nmaas/notifications/NotificationManager.java
+++ b/src/main/java/net/geant/nmaas/notifications/NotificationManager.java
@@ -16,11 +16,11 @@ import net.geant.nmaas.notifications.templates.api.LanguageMailContentView;
 import net.geant.nmaas.notifications.templates.api.MailTemplateView;
 import net.geant.nmaas.notifications.types.persistence.entity.FormType;
 import net.geant.nmaas.notifications.types.service.FormTypeService;
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.api.domain.UserView;
 import net.geant.nmaas.portal.api.domain.GroupAppListElement;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.Role;
 import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.service.ConfigurationManager;
diff --git a/src/main/java/net/geant/nmaas/notifications/types/service/FormTypeService.java b/src/main/java/net/geant/nmaas/notifications/types/service/FormTypeService.java
index 21426f5f5..6b7d6fce5 100644
--- a/src/main/java/net/geant/nmaas/notifications/types/service/FormTypeService.java
+++ b/src/main/java/net/geant/nmaas/notifications/types/service/FormTypeService.java
@@ -5,7 +5,6 @@ import net.geant.nmaas.notifications.types.model.FormTypeRequest;
 import net.geant.nmaas.notifications.types.model.FormTypeView;
 import net.geant.nmaas.notifications.types.persistence.entity.FormType;
 import net.geant.nmaas.notifications.types.persistence.repository.FormTypeRepository;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
 import net.geant.nmaas.portal.exceptions.DataConflictException;
 import org.springframework.stereotype.Service;
 
diff --git a/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java b/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java
index 922afaeb1..002a19f31 100644
--- a/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java
+++ b/src/main/java/net/geant/nmaas/orchestration/DefaultAppLifecycleManager.java
@@ -21,7 +21,7 @@ import net.geant.nmaas.orchestration.events.app.AppUpgradeActionEvent;
 import net.geant.nmaas.orchestration.events.app.AppVerifyRequestActionEvent;
 import net.geant.nmaas.orchestration.events.app.AppVerifyServiceActionEvent;
 import net.geant.nmaas.orchestration.exceptions.InvalidDeploymentIdException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.service.ConfigurationManager;
 import net.geant.nmaas.utils.logging.LogLevel;
 import net.geant.nmaas.utils.logging.Loggable;
diff --git a/src/main/java/net/geant/nmaas/orchestration/jobs/DomainCreationJob.java b/src/main/java/net/geant/nmaas/orchestration/jobs/DomainCreationJob.java
index a83c35376..3d5d751dc 100644
--- a/src/main/java/net/geant/nmaas/orchestration/jobs/DomainCreationJob.java
+++ b/src/main/java/net/geant/nmaas/orchestration/jobs/DomainCreationJob.java
@@ -4,7 +4,7 @@ import lombok.extern.slf4j.Slf4j;
 import net.geant.nmaas.orchestration.exceptions.WebServiceCommunicationException;
 import net.geant.nmaas.portal.api.domain.DomainView;
 import net.geant.nmaas.portal.api.domain.WebhookEventDto;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.WebhookEventType;
 import net.geant.nmaas.portal.service.DomainService;
diff --git a/src/main/java/net/geant/nmaas/orchestration/jobs/DomainGroupJob.java b/src/main/java/net/geant/nmaas/orchestration/jobs/DomainGroupJob.java
index 7fe42451e..0c4d59056 100644
--- a/src/main/java/net/geant/nmaas/orchestration/jobs/DomainGroupJob.java
+++ b/src/main/java/net/geant/nmaas/orchestration/jobs/DomainGroupJob.java
@@ -5,7 +5,7 @@ import net.geant.nmaas.orchestration.exceptions.WebServiceCommunicationException
 import net.geant.nmaas.portal.api.domain.DomainGroupView;
 import net.geant.nmaas.portal.api.domain.DomainGroupWebhookDto;
 import net.geant.nmaas.portal.api.domain.WebhookEventDto;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.WebhookEventType;
 import net.geant.nmaas.portal.service.WebhookEventService;
 import org.modelmapper.ModelMapper;
diff --git a/src/main/java/net/geant/nmaas/portal/PortalConfig.java b/src/main/java/net/geant/nmaas/portal/PortalConfig.java
index 7ef5f2a31..ead54e07b 100644
--- a/src/main/java/net/geant/nmaas/portal/PortalConfig.java
+++ b/src/main/java/net/geant/nmaas/portal/PortalConfig.java
@@ -2,8 +2,8 @@ package net.geant.nmaas.portal;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.exceptions.OnlyOneConfigurationSupportedException;
 import net.geant.nmaas.portal.persistent.entity.Content;
 import net.geant.nmaas.portal.persistent.entity.Domain;
diff --git a/src/main/java/net/geant/nmaas/portal/api/auth/BasicAuthController.java b/src/main/java/net/geant/nmaas/portal/api/auth/BasicAuthController.java
index 4ad5fb8d2..6cf9f0112 100644
--- a/src/main/java/net/geant/nmaas/portal/api/auth/BasicAuthController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/auth/BasicAuthController.java
@@ -6,8 +6,8 @@ import jakarta.servlet.http.HttpServletRequest;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import net.geant.nmaas.portal.api.domain.Pong;
-import net.geant.nmaas.portal.api.exception.AuthenticationException;
-import net.geant.nmaas.portal.api.exception.SignupException;
+import net.geant.nmaas.portal.api.exceptions.AuthenticationException;
+import net.geant.nmaas.portal.api.exceptions.SignupException;
 import net.geant.nmaas.portal.api.security.JWTTokenService;
 import net.geant.nmaas.portal.exceptions.UndergoingMaintenanceException;
 import net.geant.nmaas.portal.persistent.entity.Role;
diff --git a/src/main/java/net/geant/nmaas/portal/api/auth/OIDCAuthController.java b/src/main/java/net/geant/nmaas/portal/api/auth/OIDCAuthController.java
index 28424e79c..d06efefc8 100644
--- a/src/main/java/net/geant/nmaas/portal/api/auth/OIDCAuthController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/auth/OIDCAuthController.java
@@ -4,10 +4,10 @@ import com.google.common.collect.ImmutableSet;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
-import net.geant.nmaas.portal.api.exception.AuthenticationException;
-import net.geant.nmaas.portal.api.exception.ExternalUserCanNotBeLinked;
-import net.geant.nmaas.portal.api.exception.ExternalUserMatchException;
-import net.geant.nmaas.portal.api.exception.SignupException;
+import net.geant.nmaas.portal.api.exceptions.AuthenticationException;
+import net.geant.nmaas.portal.api.exceptions.ExternalUserCanNotBeLinked;
+import net.geant.nmaas.portal.api.exceptions.ExternalUserMatchException;
+import net.geant.nmaas.portal.api.exceptions.SignupException;
 import net.geant.nmaas.portal.api.security.JWTTokenService;
 import net.geant.nmaas.portal.exceptions.UndergoingMaintenanceException;
 import net.geant.nmaas.portal.persistent.entity.Role;
diff --git a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java b/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java
index 5be222d87..462384d16 100644
--- a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java
@@ -3,8 +3,13 @@ package net.geant.nmaas.portal.api.bulk;
 import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import net.geant.nmaas.portal.api.bulk.model.BulkAppDetails;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentView;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentViewS;
+import net.geant.nmaas.portal.api.bulk.model.BulkQueueDetails;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.BulkDeployment;
 import net.geant.nmaas.portal.persistent.entity.BulkDeploymentEntry;
 import net.geant.nmaas.portal.persistent.entity.BulkDeploymentState;
diff --git a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkAppDetails.java b/src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkAppDetails.java
similarity index 92%
rename from src/main/java/net/geant/nmaas/portal/api/bulk/BulkAppDetails.java
rename to src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkAppDetails.java
index 7873d255a..043962b16 100644
--- a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkAppDetails.java
+++ b/src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkAppDetails.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.bulk;
+package net.geant.nmaas.portal.api.bulk.model;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
diff --git a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkDeploymentEntryView.java b/src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkDeploymentEntryView.java
similarity index 94%
rename from src/main/java/net/geant/nmaas/portal/api/bulk/BulkDeploymentEntryView.java
rename to src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkDeploymentEntryView.java
index 872e641c7..134e21d81 100644
--- a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkDeploymentEntryView.java
+++ b/src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkDeploymentEntryView.java
@@ -1,10 +1,11 @@
-package net.geant.nmaas.portal.api.bulk;
+package net.geant.nmaas.portal.api.bulk.model;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
+import net.geant.nmaas.portal.api.bulk.BulkType;
 import net.geant.nmaas.portal.persistent.entity.BulkDeploymentState;
 
 import java.util.Map;
diff --git a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkDeploymentView.java b/src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkDeploymentView.java
similarity index 86%
rename from src/main/java/net/geant/nmaas/portal/api/bulk/BulkDeploymentView.java
rename to src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkDeploymentView.java
index 330b56895..a11462527 100644
--- a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkDeploymentView.java
+++ b/src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkDeploymentView.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.bulk;
+package net.geant.nmaas.portal.api.bulk.model;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
diff --git a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkDeploymentViewS.java b/src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkDeploymentViewS.java
similarity index 90%
rename from src/main/java/net/geant/nmaas/portal/api/bulk/BulkDeploymentViewS.java
rename to src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkDeploymentViewS.java
index 78f4f6b94..11e02e25c 100644
--- a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkDeploymentViewS.java
+++ b/src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkDeploymentViewS.java
@@ -1,9 +1,10 @@
-package net.geant.nmaas.portal.api.bulk;
+package net.geant.nmaas.portal.api.bulk.model;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
+import net.geant.nmaas.portal.api.bulk.BulkType;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
 import net.geant.nmaas.portal.persistent.entity.BulkDeploymentState;
 
diff --git a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkQueueDetails.java b/src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkQueueDetails.java
similarity index 89%
rename from src/main/java/net/geant/nmaas/portal/api/bulk/BulkQueueDetails.java
rename to src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkQueueDetails.java
index 818dfdc3f..16b3cab1a 100644
--- a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkQueueDetails.java
+++ b/src/main/java/net/geant/nmaas/portal/api/bulk/model/BulkQueueDetails.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.bulk;
+package net.geant.nmaas.portal.api.bulk.model;
 
 
 import lombok.AllArgsConstructor;
diff --git a/src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationController.java b/src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationController.java
index 9b8856c98..8595ef2fc 100644
--- a/src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationController.java
@@ -2,6 +2,7 @@ package net.geant.nmaas.portal.api.configuration;
 
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.exceptions.ConfigurationNotFoundException;
 import net.geant.nmaas.portal.exceptions.OnlyOneConfigurationSupportedException;
 import net.geant.nmaas.portal.service.ConfigurationManager;
diff --git a/src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationView.java b/src/main/java/net/geant/nmaas/portal/api/configuration/model/ConfigurationView.java
similarity index 95%
rename from src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationView.java
rename to src/main/java/net/geant/nmaas/portal/api/configuration/model/ConfigurationView.java
index 893e6cd95..f2f4b13f6 100644
--- a/src/main/java/net/geant/nmaas/portal/api/configuration/ConfigurationView.java
+++ b/src/main/java/net/geant/nmaas/portal/api/configuration/model/ConfigurationView.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.configuration;
+package net.geant.nmaas.portal.api.configuration.model;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -57,5 +57,4 @@ public class ConfigurationView {
 
     private String healthCheckJobCron;
 
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/net/geant/nmaas/portal/api/exception/AuthenticationException.java b/src/main/java/net/geant/nmaas/portal/api/exceptions/AuthenticationException.java
similarity index 92%
rename from src/main/java/net/geant/nmaas/portal/api/exception/AuthenticationException.java
rename to src/main/java/net/geant/nmaas/portal/api/exceptions/AuthenticationException.java
index 767761123..36bdf7975 100644
--- a/src/main/java/net/geant/nmaas/portal/api/exception/AuthenticationException.java
+++ b/src/main/java/net/geant/nmaas/portal/api/exceptions/AuthenticationException.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.exception;
+package net.geant.nmaas.portal.api.exceptions;
 
 public class AuthenticationException extends MarketException {
 
diff --git a/src/main/java/net/geant/nmaas/portal/api/exception/ExternalUserCanNotBeLinked.java b/src/main/java/net/geant/nmaas/portal/api/exceptions/ExternalUserCanNotBeLinked.java
similarity index 76%
rename from src/main/java/net/geant/nmaas/portal/api/exception/ExternalUserCanNotBeLinked.java
rename to src/main/java/net/geant/nmaas/portal/api/exceptions/ExternalUserCanNotBeLinked.java
index 134b925a4..21b3c2b80 100644
--- a/src/main/java/net/geant/nmaas/portal/api/exception/ExternalUserCanNotBeLinked.java
+++ b/src/main/java/net/geant/nmaas/portal/api/exceptions/ExternalUserCanNotBeLinked.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.exception;
+package net.geant.nmaas.portal.api.exceptions;
 
 public class ExternalUserCanNotBeLinked extends RuntimeException {
     public ExternalUserCanNotBeLinked(String message) {
diff --git a/src/main/java/net/geant/nmaas/portal/api/exception/ExternalUserMatchException.java b/src/main/java/net/geant/nmaas/portal/api/exceptions/ExternalUserMatchException.java
similarity index 77%
rename from src/main/java/net/geant/nmaas/portal/api/exception/ExternalUserMatchException.java
rename to src/main/java/net/geant/nmaas/portal/api/exceptions/ExternalUserMatchException.java
index e17674047..b498b95d7 100644
--- a/src/main/java/net/geant/nmaas/portal/api/exception/ExternalUserMatchException.java
+++ b/src/main/java/net/geant/nmaas/portal/api/exceptions/ExternalUserMatchException.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.exception;
+package net.geant.nmaas.portal.api.exceptions;
 
 public class ExternalUserMatchException extends RuntimeException {
 
diff --git a/src/main/java/net/geant/nmaas/portal/api/exception/MarketException.java b/src/main/java/net/geant/nmaas/portal/api/exceptions/MarketException.java
similarity index 91%
rename from src/main/java/net/geant/nmaas/portal/api/exception/MarketException.java
rename to src/main/java/net/geant/nmaas/portal/api/exceptions/MarketException.java
index 1dba432b5..936053077 100644
--- a/src/main/java/net/geant/nmaas/portal/api/exception/MarketException.java
+++ b/src/main/java/net/geant/nmaas/portal/api/exceptions/MarketException.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.exception;
+package net.geant.nmaas.portal.api.exceptions;
 
 public class MarketException extends RuntimeException {
 
diff --git a/src/main/java/net/geant/nmaas/portal/api/exception/MissingElementException.java b/src/main/java/net/geant/nmaas/portal/api/exceptions/MissingElementException.java
similarity index 92%
rename from src/main/java/net/geant/nmaas/portal/api/exception/MissingElementException.java
rename to src/main/java/net/geant/nmaas/portal/api/exceptions/MissingElementException.java
index 391a05137..d79ea86fd 100644
--- a/src/main/java/net/geant/nmaas/portal/api/exception/MissingElementException.java
+++ b/src/main/java/net/geant/nmaas/portal/api/exceptions/MissingElementException.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.exception;
+package net.geant.nmaas.portal.api.exceptions;
 
 public class MissingElementException extends MarketException {
 
diff --git a/src/main/java/net/geant/nmaas/portal/api/exception/ProcessingException.java b/src/main/java/net/geant/nmaas/portal/api/exceptions/ProcessingException.java
similarity index 91%
rename from src/main/java/net/geant/nmaas/portal/api/exception/ProcessingException.java
rename to src/main/java/net/geant/nmaas/portal/api/exceptions/ProcessingException.java
index d63d29521..4a95de29f 100644
--- a/src/main/java/net/geant/nmaas/portal/api/exception/ProcessingException.java
+++ b/src/main/java/net/geant/nmaas/portal/api/exceptions/ProcessingException.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.exception;
+package net.geant.nmaas.portal.api.exceptions;
 
 public class ProcessingException extends MarketException {
 
diff --git a/src/main/java/net/geant/nmaas/portal/api/exception/SignupException.java b/src/main/java/net/geant/nmaas/portal/api/exceptions/SignupException.java
similarity index 91%
rename from src/main/java/net/geant/nmaas/portal/api/exception/SignupException.java
rename to src/main/java/net/geant/nmaas/portal/api/exceptions/SignupException.java
index 3cb3ae8b6..f479d9046 100644
--- a/src/main/java/net/geant/nmaas/portal/api/exception/SignupException.java
+++ b/src/main/java/net/geant/nmaas/portal/api/exceptions/SignupException.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.exception;
+package net.geant.nmaas.portal.api.exceptions;
 
 public class SignupException extends MarketException {
 
diff --git a/src/main/java/net/geant/nmaas/portal/api/exception/StorageException.java b/src/main/java/net/geant/nmaas/portal/api/exceptions/StorageException.java
similarity index 91%
rename from src/main/java/net/geant/nmaas/portal/api/exception/StorageException.java
rename to src/main/java/net/geant/nmaas/portal/api/exceptions/StorageException.java
index ab19c1f76..0476bfda3 100644
--- a/src/main/java/net/geant/nmaas/portal/api/exception/StorageException.java
+++ b/src/main/java/net/geant/nmaas/portal/api/exceptions/StorageException.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.exception;
+package net.geant.nmaas.portal.api.exceptions;
 
 public class StorageException extends MarketException {
 
diff --git a/src/main/java/net/geant/nmaas/portal/api/exception/ValidationError.java b/src/main/java/net/geant/nmaas/portal/api/exceptions/ValidationError.java
similarity index 92%
rename from src/main/java/net/geant/nmaas/portal/api/exception/ValidationError.java
rename to src/main/java/net/geant/nmaas/portal/api/exceptions/ValidationError.java
index 2a7d02b21..ab23528c1 100644
--- a/src/main/java/net/geant/nmaas/portal/api/exception/ValidationError.java
+++ b/src/main/java/net/geant/nmaas/portal/api/exceptions/ValidationError.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.exception;
+package net.geant.nmaas.portal.api.exceptions;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 
diff --git a/src/main/java/net/geant/nmaas/portal/api/exception/ValidationErrorBuilder.java b/src/main/java/net/geant/nmaas/portal/api/exceptions/ValidationErrorBuilder.java
similarity index 91%
rename from src/main/java/net/geant/nmaas/portal/api/exception/ValidationErrorBuilder.java
rename to src/main/java/net/geant/nmaas/portal/api/exceptions/ValidationErrorBuilder.java
index 7b04d3dc4..ad553cc40 100644
--- a/src/main/java/net/geant/nmaas/portal/api/exception/ValidationErrorBuilder.java
+++ b/src/main/java/net/geant/nmaas/portal/api/exceptions/ValidationErrorBuilder.java
@@ -1,4 +1,4 @@
-package net.geant.nmaas.portal.api.exception;
+package net.geant.nmaas.portal.api.exceptions;
 
 import org.springframework.validation.Errors;
 import org.springframework.validation.ObjectError;
diff --git a/src/main/java/net/geant/nmaas/portal/api/info/ContentController.java b/src/main/java/net/geant/nmaas/portal/api/info/ContentController.java
index aa4101ae8..92ea95bfb 100644
--- a/src/main/java/net/geant/nmaas/portal/api/info/ContentController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/info/ContentController.java
@@ -2,7 +2,7 @@ package net.geant.nmaas.portal.api.info;
 
 import lombok.AllArgsConstructor;
 import net.geant.nmaas.portal.api.domain.ContentView;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.Content;
 import net.geant.nmaas.portal.persistent.repositories.ContentRepository;
 import org.modelmapper.ModelMapper;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/ApiExceptionHandler.java b/src/main/java/net/geant/nmaas/portal/api/market/ApiExceptionHandler.java
index c9600e4aa..3f4d3f7df 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/ApiExceptionHandler.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/ApiExceptionHandler.java
@@ -5,12 +5,12 @@ import jakarta.servlet.http.HttpServletRequest;
 import lombok.extern.slf4j.Slf4j;
 import net.geant.nmaas.nmservice.configuration.exceptions.InvalidWebhookException;
 import net.geant.nmaas.portal.api.domain.ApiError;
-import net.geant.nmaas.portal.api.exception.AuthenticationException;
-import net.geant.nmaas.portal.api.exception.MarketException;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
-import net.geant.nmaas.portal.api.exception.SignupException;
-import net.geant.nmaas.portal.api.exception.StorageException;
+import net.geant.nmaas.portal.api.exceptions.AuthenticationException;
+import net.geant.nmaas.portal.api.exceptions.MarketException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.SignupException;
+import net.geant.nmaas.portal.api.exceptions.StorageException;
 import net.geant.nmaas.portal.api.security.exceptions.AuthenticationMethodNotSupportedException;
 import net.geant.nmaas.portal.api.security.exceptions.BasicAuthenticationException;
 import net.geant.nmaas.portal.api.security.exceptions.MissingTokenException;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/AppBaseController.java b/src/main/java/net/geant/nmaas/portal/api/market/AppBaseController.java
index 6cebf6377..5a3a690c0 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/AppBaseController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/AppBaseController.java
@@ -1,6 +1,6 @@
 package net.geant.nmaas.portal.api.market;
 
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.Application;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
 import net.geant.nmaas.portal.persistent.entity.ApplicationVersion;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/AppCommentsController.java b/src/main/java/net/geant/nmaas/portal/api/market/AppCommentsController.java
index 522266fd0..6dc27adea 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/AppCommentsController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/AppCommentsController.java
@@ -3,8 +3,8 @@ package net.geant.nmaas.portal.api.market;
 import net.geant.nmaas.portal.api.domain.CommentRequest;
 import net.geant.nmaas.portal.api.domain.CommentView;
 import net.geant.nmaas.portal.api.domain.Id;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
 import net.geant.nmaas.portal.persistent.entity.Comment;
 import net.geant.nmaas.portal.persistent.entity.User;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/AppConfigurationController.java b/src/main/java/net/geant/nmaas/portal/api/market/AppConfigurationController.java
index 6d57e463b..0864786a6 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/AppConfigurationController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/AppConfigurationController.java
@@ -7,8 +7,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import net.geant.nmaas.orchestration.AppLifecycleManager;
 import net.geant.nmaas.orchestration.api.model.AppConfigurationView;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.AppInstance;
 import net.geant.nmaas.portal.service.ApplicationInstanceService;
 import org.springframework.security.access.prepost.PreAuthorize;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/AppInstanceController.java b/src/main/java/net/geant/nmaas/portal/api/market/AppInstanceController.java
index 0a2f7e395..939bbedef 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/AppInstanceController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/AppInstanceController.java
@@ -25,8 +25,8 @@ import net.geant.nmaas.portal.api.domain.ApplicationBaseView;
 import net.geant.nmaas.portal.api.domain.ConfigWizardTemplateView;
 import net.geant.nmaas.portal.api.domain.Id;
 import net.geant.nmaas.portal.api.domain.UserBase;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.exceptions.ApplicationSubscriptionNotActiveException;
 import net.geant.nmaas.portal.persistent.entity.AppInstance;
 import net.geant.nmaas.portal.persistent.entity.Application;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/AppScreenshotsController.java b/src/main/java/net/geant/nmaas/portal/api/market/AppScreenshotsController.java
index 91350476b..9ce335b81 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/AppScreenshotsController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/AppScreenshotsController.java
@@ -3,7 +3,7 @@ package net.geant.nmaas.portal.api.market;
 import lombok.extern.slf4j.Slf4j;
 import net.geant.nmaas.portal.api.domain.FileInfoView;
 import net.geant.nmaas.portal.api.domain.UserFile;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
 import net.geant.nmaas.portal.persistent.entity.FileInfo;
 import net.geant.nmaas.portal.service.ApplicationBaseService;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java b/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java
index 36fd2187b..5c769ca24 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java
@@ -18,9 +18,9 @@ import net.geant.nmaas.portal.api.domain.ApplicationStateChangeRequest;
 import net.geant.nmaas.portal.api.domain.ApplicationView;
 import net.geant.nmaas.portal.api.domain.Id;
 import net.geant.nmaas.portal.api.domain.UserView;
-import net.geant.nmaas.portal.api.exception.MarketException;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MarketException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.exceptions.ObjectAlreadyExistsException;
 import net.geant.nmaas.portal.persistent.entity.Application;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/BaseController.java b/src/main/java/net/geant/nmaas/portal/api/market/BaseController.java
index 7d7e11077..c15fa53e9 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/BaseController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/BaseController.java
@@ -1,7 +1,7 @@
 package net.geant.nmaas.portal.api.market;
 
 import lombok.RequiredArgsConstructor;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.service.UserService;
 import org.modelmapper.ModelMapper;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/DomainController.java b/src/main/java/net/geant/nmaas/portal/api/market/DomainController.java
index 4e26d6428..6f30f0453 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/DomainController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/DomainController.java
@@ -15,8 +15,8 @@ import net.geant.nmaas.portal.api.domain.DomainRequest;
 import net.geant.nmaas.portal.api.domain.DomainView;
 import net.geant.nmaas.portal.api.domain.Id;
 import net.geant.nmaas.portal.api.domain.KeyValueView;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.exceptions.DataConflictException;
 import net.geant.nmaas.portal.exceptions.ObjectNotFoundException;
 import net.geant.nmaas.portal.persistent.entity.ApplicationStatePerDomain;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/GroupController.java b/src/main/java/net/geant/nmaas/portal/api/market/GroupController.java
index fbee9be5d..44bc96960 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/GroupController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/GroupController.java
@@ -5,7 +5,7 @@ import net.geant.nmaas.orchestration.exceptions.InvalidDomainException;
 import net.geant.nmaas.portal.api.domain.DomainGroupView;
 import net.geant.nmaas.portal.api.domain.Id;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.exceptions.DataConflictException;
 import net.geant.nmaas.portal.persistent.entity.Role;
 import net.geant.nmaas.portal.persistent.entity.User;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/RatingController.java b/src/main/java/net/geant/nmaas/portal/api/market/RatingController.java
index 306f8aef4..6e04c1b64 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/RatingController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/RatingController.java
@@ -3,7 +3,7 @@ package net.geant.nmaas.portal.api.market;
 import jakarta.validation.constraints.NotNull;
 import net.geant.nmaas.portal.api.domain.ApiResponse;
 import net.geant.nmaas.portal.api.domain.AppRateView;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.AppRate;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
 import net.geant.nmaas.portal.persistent.entity.User;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/RegistrationController.java b/src/main/java/net/geant/nmaas/portal/api/market/RegistrationController.java
index feeb3dde9..e7b4f5330 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/RegistrationController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/RegistrationController.java
@@ -8,8 +8,8 @@ import net.geant.nmaas.notifications.NotificationEvent;
 import net.geant.nmaas.notifications.templates.MailType;
 import net.geant.nmaas.portal.api.auth.Registration;
 import net.geant.nmaas.portal.api.domain.DomainBase;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.SignupException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.SignupException;
 import net.geant.nmaas.portal.exceptions.ObjectAlreadyExistsException;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.Role;
diff --git a/src/main/java/net/geant/nmaas/portal/api/market/WebhookEventController.java b/src/main/java/net/geant/nmaas/portal/api/market/WebhookEventController.java
index e99ba0b1a..d816cf247 100644
--- a/src/main/java/net/geant/nmaas/portal/api/market/WebhookEventController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/market/WebhookEventController.java
@@ -5,7 +5,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import net.geant.nmaas.portal.api.domain.Id;
 import net.geant.nmaas.portal.api.domain.WebhookEventDto;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.WebhookEvent;
 import net.geant.nmaas.portal.service.WebhookEventService;
 import org.springframework.http.ResponseEntity;
diff --git a/src/main/java/net/geant/nmaas/portal/api/user/ProfileController.java b/src/main/java/net/geant/nmaas/portal/api/user/ProfileController.java
index 64d8c5781..842af0c33 100644
--- a/src/main/java/net/geant/nmaas/portal/api/user/ProfileController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/user/ProfileController.java
@@ -4,7 +4,7 @@ import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
 import net.geant.nmaas.portal.api.domain.UserRoleView;
 import net.geant.nmaas.portal.api.domain.UserView;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.service.UserService;
 import org.modelmapper.ModelMapper;
diff --git a/src/main/java/net/geant/nmaas/portal/api/user/SSHKeysControllerAdvice.java b/src/main/java/net/geant/nmaas/portal/api/user/SSHKeysControllerAdvice.java
index 022a3f6e8..54973e59c 100644
--- a/src/main/java/net/geant/nmaas/portal/api/user/SSHKeysControllerAdvice.java
+++ b/src/main/java/net/geant/nmaas/portal/api/user/SSHKeysControllerAdvice.java
@@ -1,7 +1,7 @@
 package net.geant.nmaas.portal.api.user;
 
-import net.geant.nmaas.portal.api.exception.ValidationError;
-import net.geant.nmaas.portal.api.exception.ValidationErrorBuilder;
+import net.geant.nmaas.portal.api.exceptions.ValidationError;
+import net.geant.nmaas.portal.api.exceptions.ValidationErrorBuilder;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatusCode;
 import org.springframework.http.ResponseEntity;
diff --git a/src/main/java/net/geant/nmaas/portal/api/user/UsersController.java b/src/main/java/net/geant/nmaas/portal/api/user/UsersController.java
index 350beec6c..f2a6103f6 100644
--- a/src/main/java/net/geant/nmaas/portal/api/user/UsersController.java
+++ b/src/main/java/net/geant/nmaas/portal/api/user/UsersController.java
@@ -14,8 +14,8 @@ import net.geant.nmaas.portal.api.domain.UserRequest;
 import net.geant.nmaas.portal.api.domain.UserRoleView;
 import net.geant.nmaas.portal.api.domain.UserView;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.api.security.JWTTokenService;
 import net.geant.nmaas.portal.exceptions.ObjectNotFoundException;
 import net.geant.nmaas.portal.persistent.entity.Domain;
diff --git a/src/main/java/net/geant/nmaas/portal/exceptions/UndergoingMaintenanceException.java b/src/main/java/net/geant/nmaas/portal/exceptions/UndergoingMaintenanceException.java
index b8ae9d26d..9735e9ebc 100644
--- a/src/main/java/net/geant/nmaas/portal/exceptions/UndergoingMaintenanceException.java
+++ b/src/main/java/net/geant/nmaas/portal/exceptions/UndergoingMaintenanceException.java
@@ -1,6 +1,6 @@
 package net.geant.nmaas.portal.exceptions;
 
-import net.geant.nmaas.portal.api.exception.MarketException;
+import net.geant.nmaas.portal.api.exceptions.MarketException;
 
 public class UndergoingMaintenanceException extends MarketException {
     public UndergoingMaintenanceException() {
diff --git a/src/main/java/net/geant/nmaas/portal/service/BulkApplicationService.java b/src/main/java/net/geant/nmaas/portal/service/BulkApplicationService.java
index c5e01a24b..588ee47f0 100644
--- a/src/main/java/net/geant/nmaas/portal/service/BulkApplicationService.java
+++ b/src/main/java/net/geant/nmaas/portal/service/BulkApplicationService.java
@@ -3,10 +3,10 @@ package net.geant.nmaas.portal.service;
 import net.geant.nmaas.nmservice.deployment.bulks.BulkDeploymentQueueEntry;
 import net.geant.nmaas.orchestration.events.app.AppAutoDeploymentReviewEvent;
 import net.geant.nmaas.orchestration.events.app.AppAutoDeploymentStatusUpdateEvent;
-import net.geant.nmaas.portal.api.bulk.BulkAppDetails;
-import net.geant.nmaas.portal.api.bulk.BulkDeploymentView;
-import net.geant.nmaas.portal.api.bulk.BulkDeploymentViewS;
-import net.geant.nmaas.portal.api.bulk.BulkQueueDetails;
+import net.geant.nmaas.portal.api.bulk.model.BulkAppDetails;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentView;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentViewS;
+import net.geant.nmaas.portal.api.bulk.model.BulkQueueDetails;
 import net.geant.nmaas.portal.api.bulk.CsvApplication;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
 import net.geant.nmaas.portal.persistent.entity.BulkDeployment;
diff --git a/src/main/java/net/geant/nmaas/portal/service/BulkDomainService.java b/src/main/java/net/geant/nmaas/portal/service/BulkDomainService.java
index 93193b2ae..e8907ae74 100644
--- a/src/main/java/net/geant/nmaas/portal/service/BulkDomainService.java
+++ b/src/main/java/net/geant/nmaas/portal/service/BulkDomainService.java
@@ -1,7 +1,7 @@
 package net.geant.nmaas.portal.service;
 
 import net.geant.nmaas.portal.api.bulk.CsvDomain;
-import net.geant.nmaas.portal.api.bulk.BulkDeploymentViewS;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentViewS;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
 
 import java.util.List;
diff --git a/src/main/java/net/geant/nmaas/portal/service/ConfigurationManager.java b/src/main/java/net/geant/nmaas/portal/service/ConfigurationManager.java
index dc6c779c1..8355f3786 100644
--- a/src/main/java/net/geant/nmaas/portal/service/ConfigurationManager.java
+++ b/src/main/java/net/geant/nmaas/portal/service/ConfigurationManager.java
@@ -1,6 +1,6 @@
 package net.geant.nmaas.portal.service;
 
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 
 public interface ConfigurationManager {
 
diff --git a/src/main/java/net/geant/nmaas/portal/service/WebhookEventService.java b/src/main/java/net/geant/nmaas/portal/service/WebhookEventService.java
index e13727362..1de9d5b90 100644
--- a/src/main/java/net/geant/nmaas/portal/service/WebhookEventService.java
+++ b/src/main/java/net/geant/nmaas/portal/service/WebhookEventService.java
@@ -1,7 +1,7 @@
 package net.geant.nmaas.portal.service;
 
 import net.geant.nmaas.portal.api.domain.WebhookEventDto;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.api.security.EncryptionService;
 import net.geant.nmaas.portal.persistent.entity.WebhookEvent;
 import net.geant.nmaas.portal.persistent.entity.WebhookEventType;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java
index 5e77ddf1b..966845551 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java
@@ -5,8 +5,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import net.geant.nmaas.portal.api.domain.ApplicationBaseS;
 import net.geant.nmaas.portal.api.domain.ApplicationBaseViewS;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.events.ApplicationActivatedEvent;
 import net.geant.nmaas.portal.persistent.entity.AppDescription;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationServiceImpl.java
index 63e7f6a66..db287957b 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationServiceImpl.java
@@ -3,11 +3,10 @@ package net.geant.nmaas.portal.service.impl;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import lombok.RequiredArgsConstructor;
-import lombok.extern.log4j.Log4j2;
 import lombok.extern.slf4j.Slf4j;
 import net.geant.nmaas.nmservice.configuration.entities.ConfigFileTemplate;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.events.ApplicationListUpdatedEvent;
 import net.geant.nmaas.portal.events.ApplicationListUpdatedEvent.ApplicationAction;
 import net.geant.nmaas.portal.persistent.entity.Application;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationSubscriptionServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationSubscriptionServiceImpl.java
index f7bd7b012..df81d1d38 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationSubscriptionServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationSubscriptionServiceImpl.java
@@ -1,7 +1,7 @@
 package net.geant.nmaas.portal.service.impl;
 
 import lombok.RequiredArgsConstructor;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.exceptions.ObjectNotFoundException;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
 import net.geant.nmaas.portal.persistent.entity.ApplicationSubscription;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/BulkApplicationServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/BulkApplicationServiceImpl.java
index fd28df8e2..32f03e8d3 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/BulkApplicationServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/BulkApplicationServiceImpl.java
@@ -18,15 +18,15 @@ import net.geant.nmaas.orchestration.entities.AppDeployment;
 import net.geant.nmaas.orchestration.entities.AppDeploymentState;
 import net.geant.nmaas.orchestration.events.app.AppAutoDeploymentReviewEvent;
 import net.geant.nmaas.orchestration.events.app.AppAutoDeploymentStatusUpdateEvent;
-import net.geant.nmaas.portal.api.bulk.BulkAppDetails;
-import net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView;
-import net.geant.nmaas.portal.api.bulk.BulkDeploymentView;
-import net.geant.nmaas.portal.api.bulk.BulkDeploymentViewS;
-import net.geant.nmaas.portal.api.bulk.BulkQueueDetails;
+import net.geant.nmaas.portal.api.bulk.model.BulkAppDetails;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentView;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentViewS;
+import net.geant.nmaas.portal.api.bulk.model.BulkQueueDetails;
 import net.geant.nmaas.portal.api.bulk.BulkType;
 import net.geant.nmaas.portal.api.bulk.CsvApplication;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.exceptions.ObjectNotFoundException;
 import net.geant.nmaas.portal.persistent.entity.AppInstance;
 import net.geant.nmaas.portal.persistent.entity.Application;
@@ -65,13 +65,13 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_APP_ID;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_APP_INSTANCE_ID;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_APP_INSTANCE_NAME;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_APP_NAME;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_DOMAIN_CODENAME;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_DOMAIN_NAME;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_ERROR_MESSAGE;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_APP_ID;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_APP_INSTANCE_ID;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_APP_INSTANCE_NAME;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_APP_NAME;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_DOMAIN_CODENAME;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_DOMAIN_NAME;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_ERROR_MESSAGE;
 
 @Service
 @RequiredArgsConstructor
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/BulkCsvProcessorImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/BulkCsvProcessorImpl.java
index d0717b5d7..b097dbd1c 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/BulkCsvProcessorImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/BulkCsvProcessorImpl.java
@@ -7,7 +7,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import net.geant.nmaas.portal.api.bulk.CsvApplication;
 import net.geant.nmaas.portal.api.bulk.CsvDomain;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.service.BulkCsvProcessor;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImpl.java
index a2b66cdba..98a472bf0 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImpl.java
@@ -6,7 +6,7 @@ import net.geant.nmaas.dcn.deployment.DcnDeploymentType;
 import net.geant.nmaas.dcn.deployment.entities.DcnDeploymentState;
 import net.geant.nmaas.dcn.deployment.entities.DcnInfo;
 import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterIngressManager;
-import net.geant.nmaas.portal.api.bulk.BulkDeploymentViewS;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentViewS;
 import net.geant.nmaas.portal.api.bulk.CsvDomain;
 import net.geant.nmaas.portal.api.domain.DomainDcnDetailsView;
 import net.geant.nmaas.portal.api.domain.DomainGroupView;
@@ -14,7 +14,7 @@ import net.geant.nmaas.portal.api.domain.DomainRequest;
 import net.geant.nmaas.portal.api.domain.DomainTechDetailsView;
 import net.geant.nmaas.portal.api.domain.KeyValueView;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.BulkDeployment;
 import net.geant.nmaas.portal.persistent.entity.BulkDeploymentEntry;
 import net.geant.nmaas.portal.persistent.entity.Domain;
@@ -41,12 +41,12 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_DOMAIN_CODENAME;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_DOMAIN_ID;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_DOMAIN_NAME;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_USER_EMAIL;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_USER_ID;
-import static net.geant.nmaas.portal.api.bulk.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_USER_NAME;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_DOMAIN_CODENAME;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_DOMAIN_ID;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_DOMAIN_NAME;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_USER_EMAIL;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_USER_ID;
+import static net.geant.nmaas.portal.api.bulk.model.BulkDeploymentEntryView.BULK_ENTRY_DETAIL_KEY_USER_NAME;
 import static net.geant.nmaas.portal.api.bulk.BulkType.DOMAIN;
 import static net.geant.nmaas.portal.api.bulk.BulkType.USER;
 import static net.geant.nmaas.portal.persistent.entity.BulkDeploymentState.COMPLETED;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerImpl.java
index 2c7c54276..c5a2b7d99 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerImpl.java
@@ -2,7 +2,7 @@ package net.geant.nmaas.portal.service.impl;
 
 import lombok.RequiredArgsConstructor;
 import net.geant.nmaas.nmservice.deployment.bulks.BulkDeploymentJob;
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.exceptions.ConfigurationNotFoundException;
 import net.geant.nmaas.portal.exceptions.OnlyOneConfigurationSupportedException;
 import net.geant.nmaas.portal.persistent.entity.Configuration;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/ContentServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/ContentServiceImpl.java
index 3f6aca341..bb428308f 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/ContentServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/ContentServiceImpl.java
@@ -1,6 +1,6 @@
 package net.geant.nmaas.portal.service.impl;
 
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.exceptions.ObjectAlreadyExistsException;
 import net.geant.nmaas.portal.persistent.entity.Content;
 import net.geant.nmaas.portal.persistent.repositories.ContentRepository;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/DomainGroupServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/DomainGroupServiceImpl.java
index 2823c728c..b5e3e2737 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/DomainGroupServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/DomainGroupServiceImpl.java
@@ -2,12 +2,11 @@ package net.geant.nmaas.portal.service.impl;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import net.geant.nmaas.orchestration.jobs.DomainCreationJob;
 import net.geant.nmaas.orchestration.jobs.DomainGroupJob;
 import net.geant.nmaas.portal.api.domain.ApplicationStatePerDomainView;
 import net.geant.nmaas.portal.api.domain.DomainGroupView;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
 import net.geant.nmaas.portal.persistent.entity.ApplicationStatePerDomain;
 import net.geant.nmaas.portal.persistent.entity.Domain;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/DomainServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/DomainServiceImpl.java
index 5af2eeecb..86ebe4f18 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/DomainServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/DomainServiceImpl.java
@@ -14,8 +14,8 @@ import net.geant.nmaas.portal.api.domain.DomainRequest;
 import net.geant.nmaas.portal.api.domain.KeyValueView;
 import net.geant.nmaas.portal.api.domain.UserView;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.events.DomainCreatedEvent;
 import net.geant.nmaas.portal.exceptions.ObjectNotFoundException;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/K8sShellServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/K8sShellServiceImpl.java
index db2fe3a60..fc436484a 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/K8sShellServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/K8sShellServiceImpl.java
@@ -5,7 +5,7 @@ import net.geant.nmaas.kubernetes.shell.PodSessionsStorage;
 import net.geant.nmaas.kubernetes.KubernetesConnectorHelper;
 import net.geant.nmaas.portal.api.domain.K8sPodInfo;
 import net.geant.nmaas.portal.api.domain.K8sShellCommandRequest;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.service.K8sShellService;
 import org.springframework.stereotype.Service;
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/LocalFileStorageService.java b/src/main/java/net/geant/nmaas/portal/service/impl/LocalFileStorageService.java
index 5bf516467..1b4a448c8 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/LocalFileStorageService.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/LocalFileStorageService.java
@@ -1,8 +1,8 @@
 package net.geant.nmaas.portal.service.impl;
 
 import lombok.extern.slf4j.Slf4j;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.StorageException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.StorageException;
 import net.geant.nmaas.portal.persistent.entity.FileInfo;
 import net.geant.nmaas.portal.persistent.repositories.FileInfoRepository;
 import net.geant.nmaas.portal.service.FileStorageService;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
index 4e3ad3a2d..3f98f4e87 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImpl.java
@@ -2,9 +2,9 @@ package net.geant.nmaas.portal.service.impl;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import net.geant.nmaas.portal.api.exception.ExternalUserMatchException;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.SignupException;
+import net.geant.nmaas.portal.api.exceptions.ExternalUserMatchException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.SignupException;
 import net.geant.nmaas.portal.exceptions.ObjectAlreadyExistsException;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.Role;
diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/UserServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/UserServiceImpl.java
index 96d1e26e2..1c399f226 100644
--- a/src/main/java/net/geant/nmaas/portal/service/impl/UserServiceImpl.java
+++ b/src/main/java/net/geant/nmaas/portal/service/impl/UserServiceImpl.java
@@ -11,9 +11,9 @@ import net.geant.nmaas.notifications.templates.MailType;
 import net.geant.nmaas.portal.api.auth.Registration;
 import net.geant.nmaas.portal.api.bulk.CsvDomain;
 import net.geant.nmaas.portal.api.domain.UserView;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
-import net.geant.nmaas.portal.api.exception.SignupException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.SignupException;
 import net.geant.nmaas.portal.api.security.JWTTokenService;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.Role;
@@ -32,14 +32,10 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.security.oauth2.core.oidc.user.OidcUser;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.security.SecureRandom;
-import java.util.Base64;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
diff --git a/src/test/java/net/geant/nmaas/nmservice/bulk/BulkDeploymentJobServiceTest.java b/src/test/java/net/geant/nmaas/nmservice/bulk/BulkDeploymentJobServiceTest.java
index d3534c007..320d0c717 100644
--- a/src/test/java/net/geant/nmaas/nmservice/bulk/BulkDeploymentJobServiceTest.java
+++ b/src/test/java/net/geant/nmaas/nmservice/bulk/BulkDeploymentJobServiceTest.java
@@ -9,7 +9,7 @@ import net.geant.nmaas.orchestration.AppLifecycleManager;
 import net.geant.nmaas.orchestration.AppLifecycleState;
 import net.geant.nmaas.orchestration.Identifier;
 import net.geant.nmaas.orchestration.entities.AppDeploymentState;
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.persistent.repositories.BulkDeploymentRepository;
 import net.geant.nmaas.portal.service.BulkApplicationService;
 import net.geant.nmaas.portal.service.ConfigurationManager;
diff --git a/src/test/java/net/geant/nmaas/notifications/NotificationManagerTest.java b/src/test/java/net/geant/nmaas/notifications/NotificationManagerTest.java
index fbcc4be50..3d56deaea 100644
--- a/src/test/java/net/geant/nmaas/notifications/NotificationManagerTest.java
+++ b/src/test/java/net/geant/nmaas/notifications/NotificationManagerTest.java
@@ -7,9 +7,9 @@ import net.geant.nmaas.notifications.templates.api.LanguageMailContentView;
 import net.geant.nmaas.notifications.templates.api.MailTemplateView;
 import net.geant.nmaas.notifications.types.persistence.entity.FormType;
 import net.geant.nmaas.notifications.types.service.FormTypeService;
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.api.domain.UserView;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.Role;
 import net.geant.nmaas.portal.persistent.entity.User;
diff --git a/src/test/java/net/geant/nmaas/notifications/types/service/FormTypeServiceTest.java b/src/test/java/net/geant/nmaas/notifications/types/service/FormTypeServiceTest.java
index 550c228e7..a26ad8a7c 100644
--- a/src/test/java/net/geant/nmaas/notifications/types/service/FormTypeServiceTest.java
+++ b/src/test/java/net/geant/nmaas/notifications/types/service/FormTypeServiceTest.java
@@ -3,7 +3,6 @@ package net.geant.nmaas.notifications.types.service;
 import net.geant.nmaas.notifications.types.model.FormTypeRequest;
 import net.geant.nmaas.notifications.types.persistence.entity.FormType;
 import net.geant.nmaas.notifications.types.persistence.repository.FormTypeRepository;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
 import net.geant.nmaas.portal.exceptions.DataConflictException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/src/test/java/net/geant/nmaas/portal/api/auth/BasicAuthControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/auth/BasicAuthControllerTest.java
index bc1865721..0ed54f97e 100644
--- a/src/test/java/net/geant/nmaas/portal/api/auth/BasicAuthControllerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/api/auth/BasicAuthControllerTest.java
@@ -1,6 +1,6 @@
 package net.geant.nmaas.portal.api.auth;
 
-import net.geant.nmaas.portal.api.exception.AuthenticationException;
+import net.geant.nmaas.portal.api.exceptions.AuthenticationException;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.Role;
 import net.geant.nmaas.portal.persistent.entity.User;
diff --git a/src/test/java/net/geant/nmaas/portal/api/auth/OIDCAuthControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/auth/OIDCAuthControllerTest.java
index 091f1e138..271094369 100644
--- a/src/test/java/net/geant/nmaas/portal/api/auth/OIDCAuthControllerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/api/auth/OIDCAuthControllerTest.java
@@ -2,7 +2,7 @@ package net.geant.nmaas.portal.api.auth;
 
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.ws.rs.core.HttpHeaders;
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.api.security.JWTTokenService;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.Role;
diff --git a/src/test/java/net/geant/nmaas/portal/api/bulk/BulkControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/bulk/BulkControllerTest.java
index e34930b02..376fc1b68 100644
--- a/src/test/java/net/geant/nmaas/portal/api/bulk/BulkControllerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/api/bulk/BulkControllerTest.java
@@ -1,6 +1,7 @@
 package net.geant.nmaas.portal.api.bulk;
 
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.bulk.model.BulkDeploymentViewS;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.BulkDeployment;
 import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.persistent.repositories.BulkDeploymentRepository;
diff --git a/src/test/java/net/geant/nmaas/portal/api/info/ContentControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/info/ContentControllerTest.java
index ba5bc93d6..d9ed38be7 100644
--- a/src/test/java/net/geant/nmaas/portal/api/info/ContentControllerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/api/info/ContentControllerTest.java
@@ -1,7 +1,7 @@
 package net.geant.nmaas.portal.api.info;
 
 import net.geant.nmaas.portal.api.domain.ContentView;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.Content;
 import net.geant.nmaas.portal.persistent.repositories.ContentRepository;
 import org.junit.jupiter.api.Test;
diff --git a/src/test/java/net/geant/nmaas/portal/api/market/AppBaseControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/market/AppBaseControllerTest.java
index a5051424e..2e83d830d 100644
--- a/src/test/java/net/geant/nmaas/portal/api/market/AppBaseControllerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/api/market/AppBaseControllerTest.java
@@ -1,6 +1,6 @@
 package net.geant.nmaas.portal.api.market;
 
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.Application;
 import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.service.ApplicationBaseService;
diff --git a/src/test/java/net/geant/nmaas/portal/api/market/AppCommentsControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/market/AppCommentsControllerTest.java
index 3fb9e1211..a7aa16d23 100644
--- a/src/test/java/net/geant/nmaas/portal/api/market/AppCommentsControllerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/api/market/AppCommentsControllerTest.java
@@ -2,8 +2,8 @@ package net.geant.nmaas.portal.api.market;
 
 import net.geant.nmaas.portal.api.domain.CommentRequest;
 import net.geant.nmaas.portal.api.domain.CommentView;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
 import net.geant.nmaas.portal.persistent.entity.Comment;
 import net.geant.nmaas.portal.persistent.entity.User;
diff --git a/src/test/java/net/geant/nmaas/portal/api/market/AppInstanceControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/market/AppInstanceControllerTest.java
index 6cd0015ac..d49c0f329 100644
--- a/src/test/java/net/geant/nmaas/portal/api/market/AppInstanceControllerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/api/market/AppInstanceControllerTest.java
@@ -16,9 +16,8 @@ import net.geant.nmaas.portal.api.domain.AppInstanceView;
 import net.geant.nmaas.portal.api.domain.AppInstanceViewExtended;
 import net.geant.nmaas.portal.api.domain.ApplicationDTO;
 import net.geant.nmaas.portal.api.domain.DomainBase;
-import net.geant.nmaas.portal.api.domain.Id;
 import net.geant.nmaas.portal.api.domain.UserBase;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.AppInstance;
 import net.geant.nmaas.portal.persistent.entity.Application;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
diff --git a/src/test/java/net/geant/nmaas/portal/api/market/AppScreenshotsControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/market/AppScreenshotsControllerTest.java
index 97a8e8c4c..e98bd8994 100644
--- a/src/test/java/net/geant/nmaas/portal/api/market/AppScreenshotsControllerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/api/market/AppScreenshotsControllerTest.java
@@ -2,7 +2,7 @@ package net.geant.nmaas.portal.api.market;
 
 import net.geant.nmaas.portal.api.domain.FileInfoView;
 import net.geant.nmaas.portal.api.domain.UserFile;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
 import net.geant.nmaas.portal.persistent.entity.FileInfo;
 import net.geant.nmaas.portal.service.ApplicationBaseService;
diff --git a/src/test/java/net/geant/nmaas/portal/api/market/RegistrationControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/market/RegistrationControllerTest.java
index 36ccd7582..cf4ca68fb 100644
--- a/src/test/java/net/geant/nmaas/portal/api/market/RegistrationControllerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/api/market/RegistrationControllerTest.java
@@ -2,8 +2,8 @@ package net.geant.nmaas.portal.api.market;
 
 import net.geant.nmaas.portal.api.auth.Registration;
 import net.geant.nmaas.portal.api.domain.DomainBase;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.SignupException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.SignupException;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.service.DomainService;
diff --git a/src/test/java/net/geant/nmaas/portal/api/market/UsersControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/market/UsersControllerTest.java
index 9d2422f6f..4b70031a8 100644
--- a/src/test/java/net/geant/nmaas/portal/api/market/UsersControllerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/api/market/UsersControllerTest.java
@@ -6,8 +6,8 @@ import net.geant.nmaas.portal.api.domain.UserRequest;
 import net.geant.nmaas.portal.api.domain.UserRoleView;
 import net.geant.nmaas.portal.api.domain.UserView;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.api.security.JWTTokenService;
 import net.geant.nmaas.portal.api.user.UsersController;
 import net.geant.nmaas.portal.exceptions.ObjectNotFoundException;
diff --git a/src/test/java/net/geant/nmaas/portal/persistent/entity/ConfigurationTest.java b/src/test/java/net/geant/nmaas/portal/persistent/entity/ConfigurationTest.java
index 8df5075e7..20c1a9c5c 100644
--- a/src/test/java/net/geant/nmaas/portal/persistent/entity/ConfigurationTest.java
+++ b/src/test/java/net/geant/nmaas/portal/persistent/entity/ConfigurationTest.java
@@ -1,6 +1,6 @@
 package net.geant.nmaas.portal.persistent.entity;
 
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import org.assertj.core.util.Lists;
 import org.junit.jupiter.api.Test;
 import org.modelmapper.ModelMapper;
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceTest.java
index e62ab1503..e98ec9f46 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceTest.java
@@ -1,7 +1,7 @@
 package net.geant.nmaas.portal.service.impl;
 
 import com.google.common.collect.Sets;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
 import net.geant.nmaas.portal.events.ApplicationActivatedEvent;
 import net.geant.nmaas.portal.persistent.entity.AppDescription;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationSubscriptionServiceTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationSubscriptionServiceTest.java
index 7c4334a54..a16c680de 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationSubscriptionServiceTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/ApplicationSubscriptionServiceTest.java
@@ -1,8 +1,8 @@
 package net.geant.nmaas.portal.service.impl;
 
 import com.google.common.collect.ImmutableSet;
-import net.geant.nmaas.portal.api.exception.MissingElementException;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.MissingElementException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.exceptions.ObjectNotFoundException;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
 import net.geant.nmaas.portal.persistent.entity.ApplicationState;
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/BulkApplicationServiceImplTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/BulkApplicationServiceImplTest.java
index abbd3c311..cf03b5045 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/BulkApplicationServiceImplTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/BulkApplicationServiceImplTest.java
@@ -14,8 +14,7 @@ import net.geant.nmaas.orchestration.AppLifecycleState;
 import net.geant.nmaas.orchestration.Identifier;
 import net.geant.nmaas.orchestration.events.app.AppAutoDeploymentReviewEvent;
 import net.geant.nmaas.orchestration.events.app.AppAutoDeploymentStatusUpdateEvent;
-import net.geant.nmaas.portal.api.bulk.BulkQueueDetails;
-import net.geant.nmaas.portal.api.bulk.BulkType;
+import net.geant.nmaas.portal.api.bulk.model.BulkQueueDetails;
 import net.geant.nmaas.portal.api.bulk.CsvApplication;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
 import net.geant.nmaas.portal.persistent.entity.AppInstance;
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImplTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImplTest.java
index fc458ce11..827f0f40a 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImplTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/BulkDomainServiceImplTest.java
@@ -5,7 +5,7 @@ import net.geant.nmaas.dcn.deployment.entities.DomainDcnDetails;
 import net.geant.nmaas.externalservices.kubernetes.KubernetesClusterIngressManager;
 import net.geant.nmaas.portal.api.bulk.BulkType;
 import net.geant.nmaas.portal.api.bulk.CsvDomain;
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
 import net.geant.nmaas.portal.persistent.entity.BulkDeployment;
 import net.geant.nmaas.portal.persistent.entity.BulkDeploymentEntry;
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerTest.java
index c0e41cd98..a160941b7 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/ConfigurationManagerTest.java
@@ -1,7 +1,7 @@
 package net.geant.nmaas.portal.service.impl;
 
 import net.geant.nmaas.nmservice.deployment.bulks.BulkDeploymentJob;
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.api.i18n.api.InternationalizationView;
 import net.geant.nmaas.portal.exceptions.ConfigurationNotFoundException;
 import net.geant.nmaas.portal.exceptions.OnlyOneConfigurationSupportedException;
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/ContentServiceImplTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/ContentServiceImplTest.java
index 72ff1bdaa..ef34ce3f6 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/ContentServiceImplTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/ContentServiceImplTest.java
@@ -1,6 +1,6 @@
 package net.geant.nmaas.portal.service.impl;
 
-import net.geant.nmaas.portal.api.exception.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.exceptions.ObjectAlreadyExistsException;
 import net.geant.nmaas.portal.persistent.entity.Content;
 import net.geant.nmaas.portal.persistent.repositories.ContentRepository;
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/DomainServiceTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/DomainServiceTest.java
index 5fb8cb4c8..6474a6f25 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/DomainServiceTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/DomainServiceTest.java
@@ -15,8 +15,7 @@ import net.geant.nmaas.portal.api.domain.DomainRequest;
 import net.geant.nmaas.portal.api.domain.DomainTechDetailsView;
 import net.geant.nmaas.portal.api.domain.UserView;
 import net.geant.nmaas.portal.api.domain.UserViewMinimal;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
-import net.geant.nmaas.portal.api.security.EncryptionService;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
 import net.geant.nmaas.portal.events.DomainCreatedEvent;
 import net.geant.nmaas.portal.persistent.entity.ApplicationBase;
 import net.geant.nmaas.portal.persistent.entity.ApplicationStatePerDomain;
@@ -36,7 +35,6 @@ import net.geant.nmaas.portal.service.ApplicationStatePerDomainService;
 import net.geant.nmaas.portal.service.DomainGroupService;
 import net.geant.nmaas.portal.service.DomainService;
 import net.geant.nmaas.portal.service.UserService;
-import net.geant.nmaas.portal.service.WebhookEventService;
 import net.geant.nmaas.portal.service.impl.domains.DefaultCodenameValidator;
 import net.geant.nmaas.scheduling.ScheduleManager;
 import org.junit.jupiter.api.BeforeEach;
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/InternationalizationServiceTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/InternationalizationServiceTest.java
index 2eeed20b7..1600b477f 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/InternationalizationServiceTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/InternationalizationServiceTest.java
@@ -1,6 +1,6 @@
 package net.geant.nmaas.portal.service.impl;
 
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
 import net.geant.nmaas.portal.api.i18n.api.InternationalizationBriefView;
 import net.geant.nmaas.portal.api.i18n.api.InternationalizationView;
 import net.geant.nmaas.portal.persistent.repositories.InternationalizationSimpleRepository;
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImplTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImplTest.java
index 44860c31d..60341bc08 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImplTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/OidcUserServiceImplTest.java
@@ -1,7 +1,5 @@
 package net.geant.nmaas.portal.service.impl;
 
-import net.geant.nmaas.portal.api.exception.ExternalUserCanNotBeLinked;
-import net.geant.nmaas.portal.api.exception.ExternalUserMatchException;
 import net.geant.nmaas.portal.persistent.entity.User;
 import net.geant.nmaas.portal.persistent.repositories.UserRepository;
 import net.geant.nmaas.portal.service.ConfigurationManager;
diff --git a/src/test/java/net/geant/nmaas/portal/service/impl/UserServiceImplTest.java b/src/test/java/net/geant/nmaas/portal/service/impl/UserServiceImplTest.java
index 821959655..19c57a42e 100644
--- a/src/test/java/net/geant/nmaas/portal/service/impl/UserServiceImplTest.java
+++ b/src/test/java/net/geant/nmaas/portal/service/impl/UserServiceImplTest.java
@@ -2,9 +2,9 @@ package net.geant.nmaas.portal.service.impl;
 
 import net.geant.nmaas.portal.api.auth.Registration;
 import net.geant.nmaas.portal.api.bulk.CsvDomain;
-import net.geant.nmaas.portal.api.configuration.ConfigurationView;
-import net.geant.nmaas.portal.api.exception.ProcessingException;
-import net.geant.nmaas.portal.api.exception.SignupException;
+import net.geant.nmaas.portal.api.configuration.model.ConfigurationView;
+import net.geant.nmaas.portal.api.exceptions.ProcessingException;
+import net.geant.nmaas.portal.api.exceptions.SignupException;
 import net.geant.nmaas.portal.api.security.JWTTokenService;
 import net.geant.nmaas.portal.persistent.entity.Domain;
 import net.geant.nmaas.portal.persistent.entity.Role;
-- 
GitLab