From 4aa96dac1506c93bb0fa694b5969c234f09dea93 Mon Sep 17 00:00:00 2001
From: Johannes Buechele <johannes@bujo.at>
Date: Wed, 4 Oct 2023 11:10:40 +0200
Subject: [PATCH] migrated to jdk 21

---
 .../dockerfiles/api-service.Dockerfile        |   4 +-
 .../dockerfiles/hashing-service.Dockerfile    |   4 +-
 .../dockerfiles/ipfs-service.Dockerfile       |   4 +-
 .../post-registration-service.Dockerfile      |   4 +-
 faircommons-services/api-service/pom.xml      |  13 +-
 .../api_service/api/PublicWorkApi.java        |  11 -
 .../api_service/api/WorkFileApi.java          |   4 +-
 .../listener/WorkRegisteredEventListener.java |   2 +-
 .../listener/WorkStatusListener.java          |   5 +-
 .../repository/WorkRepository.java            |  16 +-
 .../api_service/service/WorkFileService.java  |  16 +-
 .../service/WorkMessageDispatcher.java        |   5 +-
 .../api_service/service/WorkService.java      |  22 +-
 .../service/WorkStatusService.java            |   2 +-
 .../strategy/AbstractMessageDispatcher.java   |  19 +-
 .../strategy/MetaIpfsDoneDispatcher.java      |  14 +-
 .../strategy/RegistrationDoneDispatcher.java  |   5 +-
 faircommons-services/common/pom.xml           |   5 +
 .../fairkom/faircommons/common/Constants.java |   4 +-
 .../common/IdentifierGenerator.java           |  16 +-
 .../common/mappers/EntityMapper.java          |   4 +-
 .../common/mappers/EntityObjectFactory.java   |   4 +-
 .../common/mappers/WorkStatusMapper.java      |   1 +
 .../common/minio/MinioConfiguration.java      |   8 +-
 .../common/minio/MinioService.java            |   2 -
 .../models/MinioConfigurationProperties.java  |  14 ++
 .../common/models/DownloadFileResponse.java   |   8 +
 .../models/MessageBuildingException.java      |   0
 .../common/models/StorageOption.java          |   0
 .../faircommons/common/models/WorkFilter.java |  10 +
 .../faircommons/common/models/WorkType.java   |   0
 .../common/models/WorkVisibility.java         |   0
 .../common/models/entities/Author.java        |  70 ++++++
 .../common/models/entities/Collection.java    |  31 ++-
 .../common/models/entities/Contributor.java   |  67 ++++++
 .../common/models/entities/Identifiable.java  |   0
 .../common/models/entities/Tag.java           |  23 +-
 .../common/models/entities/Work.java          | 223 +++++++++++++++++-
 .../common/models/entities/WorkStatus.java    |  55 ++++-
 .../models/entities/embedded/HashCode.java    |  29 +++
 .../models/entities/embedded/IpfsEntry.java   |  22 +-
 .../models/entities/embedded/License.java     |  45 ++++
 .../models/entities/embedded/Revocation.java  |  27 +++
 .../models/entities/embedded/WorkFile.java    |  22 +-
 .../common/models/views/AuthorView.java       |  16 ++
 .../common/models/views/ContributorView.java  |  13 +
 .../common/models/views/FileUploadView.java   |   7 +
 .../common/models/views/HashCodeView.java     |   8 +
 .../common/models/views/IdentifiableView.java |   2 +-
 .../common/models/views/IpfsEntryView.java    |  12 +
 .../common/models/views/LicenseView.java      |  14 ++
 .../common/models/views/MetaDataView.java     |  23 ++
 .../common/models/views/PublicAuthorView.java |   6 +
 .../models/views/PublicContributorView.java   |   6 +
 .../common/models/views/PublicWorkView.java   |  23 ++
 .../common/models/views/RevocationView.java   |   9 +
 .../common/models/views/TagView.java          |   6 +
 .../common/models/views/WorkCreateView.java   |  40 ++++
 .../common/models/views/WorkFileView.java     |  15 ++
 .../common/models/views/WorkStatusView.java   |  32 +++
 .../common/models/views/WorkView.java         |  40 ++++
 .../common/rabbitmq/MessageHandler.java       |  92 ++------
 .../common/rabbitmq/messages/Message.java     |  10 +
 .../common/rabbitmq/messages/MessageType.java |   0
 .../rabbitmq/messages/MetaDataMessage.java    |  13 +
 .../messages/PostRegistrationMessage.java     |   7 +-
 .../common/rabbitmq/messages/StatusEvent.java |  15 ++
 .../rabbitmq/messages/WorkFileMessage.java    |  17 ++
 .../security/ActuatorAutoConfigurer.java      |   7 +-
 .../ResourceServerAutoConfigurer.java         |  20 +-
 .../security/UnsecuredAutoConfigurer.java     |   5 +-
 .../security/models}/ActuatorProperties.java  |  10 +-
 .../security/models}/ConfigurerOrders.java    |   8 +-
 .../security/models/ResourceProperties.java   |  30 +++
 .../security/models/UnsecuredProperties.java  |  15 ++
 .../models/WebSecurityProperties.java         |   9 +
 .../models/MinioConfigurationProperties.java  |  16 --
 .../common/models/DownloadFileResponse.java   |  12 -
 .../faircommons/common/models/WorkFilter.java |  17 --
 .../common/models/entities/Author.java        |  27 ---
 .../common/models/entities/Contributor.java   |  32 ---
 .../models/entities/embedded/HashCode.java    |  19 --
 .../models/entities/embedded/License.java     |  19 --
 .../models/entities/embedded/Revocation.java  |  17 --
 .../common/models/views/AuthorView.java       |  22 --
 .../common/models/views/ContributorView.java  |  18 --
 .../common/models/views/FileUploadView.java   |  14 --
 .../common/models/views/HashCodeView.java     |  15 --
 .../common/models/views/IpfsEntryView.java    |  15 --
 .../common/models/views/LicenseView.java      |  20 --
 .../common/models/views/MetaDataView.java     |  31 ---
 .../common/models/views/PublicAuthorView.java |  13 -
 .../models/views/PublicContributorView.java   |  13 -
 .../common/models/views/PublicWorkView.java   |  29 ---
 .../common/models/views/RevocationView.java   |  16 --
 .../common/models/views/TagView.java          |  13 -
 .../common/models/views/WorkCreateView.java   |  41 ----
 .../common/models/views/WorkFileView.java     |  23 --
 .../common/models/views/WorkStatusView.java   |  22 --
 .../common/models/views/WorkView.java         |  48 ----
 .../common/rabbitmq/messages/Message.java     |  14 --
 .../rabbitmq/messages/MetaDataMessage.java    |  17 --
 .../common/rabbitmq/messages/StatusEvent.java |  18 --
 .../rabbitmq/messages/WorkFileMessage.java    |  20 --
 .../common/security/ResourceProperties.java   |  25 --
 .../common/security/UnsecuredProperties.java  |  19 --
 .../security/WebSecurityProperties.java       |  11 -
 faircommons-services/hashing-service/pom.xml  |  12 +-
 .../listener/HashingServiceListener.java      |  12 +-
 .../service/HashingServiceMessageHandler.java |  23 +-
 faircommons-services/ipfs-service/pom.xml     |  12 +-
 .../listener/IpfsServiceListener.java         |   6 +-
 .../ipfs_service/models/IpfsAddView.java      |  10 +
 .../service/IpfsClusterService.java           |   6 +-
 .../service/IpfsServiceMessageHandler.java    |  19 +-
 .../ipfs_service/models/IpfsAddView.java      |  17 --
 faircommons-services/pom.xml                  |  73 +-----
 .../post-registration-service/pom.xml         |  12 +-
 .../listener/PostRegistrationListener.java    |   6 +-
 .../service/PostRegistrationService.java      |   4 +-
 120 files changed, 1193 insertions(+), 1025 deletions(-)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/models/MinioConfigurationProperties.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/DownloadFileResponse.java
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/MessageBuildingException.java (100%)
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/StorageOption.java (100%)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/WorkFilter.java
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/WorkType.java (100%)
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/WorkVisibility.java (100%)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Author.java
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/entities/Collection.java (55%)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Contributor.java
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/entities/Identifiable.java (100%)
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/entities/Tag.java (51%)
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/entities/Work.java (52%)
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/entities/WorkStatus.java (59%)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/HashCode.java
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/entities/embedded/IpfsEntry.java (53%)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/License.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/Revocation.java
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/entities/embedded/WorkFile.java (55%)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/AuthorView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/ContributorView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/FileUploadView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/HashCodeView.java
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/models/views/IdentifiableView.java (91%)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/IpfsEntryView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/LicenseView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/MetaDataView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicAuthorView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicContributorView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicWorkView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/RevocationView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/TagView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkCreateView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkFileView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkStatusView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkView.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/Message.java
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/rabbitmq/messages/MessageType.java (100%)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/MetaDataMessage.java
 rename faircommons-services/common/src/main/{lombok => java}/eu/fairkom/faircommons/common/rabbitmq/messages/PostRegistrationMessage.java (51%)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/StatusEvent.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/WorkFileMessage.java
 rename faircommons-services/common/src/main/{lombok/eu/fairkom/faircommons/common/security => java/eu/fairkom/faircommons/common/security/models}/ActuatorProperties.java (78%)
 rename faircommons-services/common/src/main/{lombok/eu/fairkom/faircommons/common/security => java/eu/fairkom/faircommons/common/security/models}/ConfigurerOrders.java (53%)
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/ResourceProperties.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/UnsecuredProperties.java
 create mode 100644 faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/WebSecurityProperties.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/minio/models/MinioConfigurationProperties.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/DownloadFileResponse.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/WorkFilter.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Author.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Contributor.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/HashCode.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/License.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/Revocation.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/AuthorView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/ContributorView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/FileUploadView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/HashCodeView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/IpfsEntryView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/LicenseView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/MetaDataView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicAuthorView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicContributorView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicWorkView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/RevocationView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/TagView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkCreateView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkFileView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkStatusView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkView.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/Message.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/MetaDataMessage.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/StatusEvent.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/WorkFileMessage.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/ResourceProperties.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/UnsecuredProperties.java
 delete mode 100644 faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/WebSecurityProperties.java
 create mode 100644 faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/models/IpfsAddView.java
 delete mode 100644 faircommons-services/ipfs-service/src/main/lombok/eu/fairkom/faircommons/ipfs_service/models/IpfsAddView.java

diff --git a/deployments/dockerfiles/api-service.Dockerfile b/deployments/dockerfiles/api-service.Dockerfile
index 2a86061..9cd6816 100644
--- a/deployments/dockerfiles/api-service.Dockerfile
+++ b/deployments/dockerfiles/api-service.Dockerfile
@@ -1,9 +1,9 @@
-FROM maven:3-openjdk-17 as builder
+FROM maven:3-sapmachine-21 as builder
 WORKDIR /app
 COPY ./faircommons-services .
 RUN mvn clean package
 
-FROM openjdk:17
+FROM sapmachine:21-jre-headless-ubuntu
 WORKDIR /app
 COPY --from=builder /app/api-service/target/api-service*.jar ./api-service.jar
 ENTRYPOINT ["java","-jar","./api-service.jar"]
\ No newline at end of file
diff --git a/deployments/dockerfiles/hashing-service.Dockerfile b/deployments/dockerfiles/hashing-service.Dockerfile
index b1fbf45..8275d0b 100644
--- a/deployments/dockerfiles/hashing-service.Dockerfile
+++ b/deployments/dockerfiles/hashing-service.Dockerfile
@@ -1,9 +1,9 @@
-FROM maven:3-openjdk-17 as builder
+FROM maven:3-sapmachine-21 as builder
 WORKDIR /app
 COPY ./faircommons-services .
 RUN mvn clean package
 
-FROM openjdk:17
+FROM sapmachine:21-jre-headless-ubuntu
 WORKDIR /app
 COPY --from=builder /app/hashing-service/target/hashing-service*.jar ./hashing-service.jar
 ENTRYPOINT ["java","-jar","./hashing-service.jar"]
\ No newline at end of file
diff --git a/deployments/dockerfiles/ipfs-service.Dockerfile b/deployments/dockerfiles/ipfs-service.Dockerfile
index 70743f7..e56101a 100644
--- a/deployments/dockerfiles/ipfs-service.Dockerfile
+++ b/deployments/dockerfiles/ipfs-service.Dockerfile
@@ -1,9 +1,9 @@
-FROM maven:3-openjdk-17 as builder
+FROM maven:3-sapmachine-21 as builder
 WORKDIR /app
 COPY ./faircommons-services .
 RUN mvn clean package
 
-FROM openjdk:17
+FROM sapmachine:21-jre-headless-ubuntu
 WORKDIR /app
 COPY --from=builder /app/ipfs-service/target/ipfs-service*.jar ./ipfs-service.jar
 ENTRYPOINT ["java","-jar","./ipfs-service.jar"]
\ No newline at end of file
diff --git a/deployments/dockerfiles/post-registration-service.Dockerfile b/deployments/dockerfiles/post-registration-service.Dockerfile
index ca3d972..a4007e5 100644
--- a/deployments/dockerfiles/post-registration-service.Dockerfile
+++ b/deployments/dockerfiles/post-registration-service.Dockerfile
@@ -1,9 +1,9 @@
-FROM maven:3-openjdk-17 as builder
+FROM maven:3-sapmachine-21 as builder
 WORKDIR /app
 COPY ./faircommons-services .
 RUN mvn clean package
 
-FROM openjdk:17
+FROM sapmachine:21-jre-headless-ubuntu
 WORKDIR /app
 COPY --from=builder /app/post-registration-service/target/post-registration-service*.jar ./post-registration-service.jar
 ENTRYPOINT ["java","-jar","./post-registration-service.jar"]
\ No newline at end of file
diff --git a/faircommons-services/api-service/pom.xml b/faircommons-services/api-service/pom.xml
index 7988395..e7ee3d5 100644
--- a/faircommons-services/api-service/pom.xml
+++ b/faircommons-services/api-service/pom.xml
@@ -19,19 +19,16 @@
         </dependency>
     </dependencies>
 
+    <properties>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+    </properties>
+
     <build>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>
-                            <groupId>org.projectlombok</groupId>
-                            <artifactId>lombok</artifactId>
-                        </exclude>
-                    </excludes>
-                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/api/PublicWorkApi.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/api/PublicWorkApi.java
index 84ce201..7940016 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/api/PublicWorkApi.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/api/PublicWorkApi.java
@@ -1,16 +1,12 @@
 package eu.fairkom.faircommons.api_service.api;
 
 import eu.fairkom.faircommons.api_service.service.WorkService;
-import eu.fairkom.faircommons.common.models.DownloadFileResponse;
 import eu.fairkom.faircommons.common.models.WorkFilter;
 import eu.fairkom.faircommons.common.models.views.PublicWorkView;
 import jakarta.persistence.EntityNotFoundException;
 import org.springdoc.core.annotations.ParameterObject;
-import org.springframework.core.io.InputStreamResource;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
@@ -35,13 +31,6 @@ public class PublicWorkApi {
         return ResponseEntity.of(workService.getPublicWorkByGrid(grid));
     }
 
-    private ResponseEntity<InputStreamResource> createDownloadResponseEntity(DownloadFileResponse fileResponse) {
-        return ResponseEntity.ok()
-                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileResponse.getFilename())
-                .contentType(MediaType.APPLICATION_OCTET_STREAM)
-                .body(fileResponse.getInputStreamResource());
-    }
-
     @ExceptionHandler(EntityNotFoundException.class)
     public ResponseEntity<?> handleEntityNotFound() {
         return ResponseEntity.notFound().build();
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/api/WorkFileApi.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/api/WorkFileApi.java
index 821a02c..b2eced5 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/api/WorkFileApi.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/api/WorkFileApi.java
@@ -46,9 +46,9 @@ public class WorkFileApi {
 
     private ResponseEntity<InputStreamResource> createDownloadResponseEntity(DownloadFileResponse fileResponse) {
         return ResponseEntity.ok()
-                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileResponse.getFilename())
+                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileResponse.filename())
                 .contentType(MediaType.APPLICATION_OCTET_STREAM)
-                .body(fileResponse.getInputStreamResource());
+                .body(fileResponse.inputStreamResource());
     }
 
     @ExceptionHandler(EntityNotFoundException.class)
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/listener/WorkRegisteredEventListener.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/listener/WorkRegisteredEventListener.java
index 45c850d..ba91194 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/listener/WorkRegisteredEventListener.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/listener/WorkRegisteredEventListener.java
@@ -23,6 +23,6 @@ public class WorkRegisteredEventListener {
     @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
     public void handleWorkRegisteredEvent(WorkFileMessage message) {
         rabbitTemplate.convertAndSend(HASHING_QUEUE, message);
-        logger.info("Message sent to hashing queue for work ID: {}", message.getWorkId());
+        logger.info("Message sent to hashing queue for work ID: {}", message.workId());
     }
 }
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/listener/WorkStatusListener.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/listener/WorkStatusListener.java
index fe4b2f0..6c09625 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/listener/WorkStatusListener.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/listener/WorkStatusListener.java
@@ -1,6 +1,5 @@
 package eu.fairkom.faircommons.api_service.listener;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import eu.fairkom.faircommons.api_service.service.WorkMessageDispatcher;
 import eu.fairkom.faircommons.common.rabbitmq.RabbitMqListener;
 import eu.fairkom.faircommons.common.rabbitmq.messages.StatusEvent;
@@ -24,10 +23,10 @@ public class WorkStatusListener implements RabbitMqListener<StatusEvent> {
     @Override
     public void receive(StatusEvent event) {
         try {
-            logger.info("Received status message with type: {} and work ID: {}", event.getStatus().getType(), event.getWorkId());
+            logger.info("Received status message with type: {} and work ID: {}", event.status().type(), event.workId());
             workMessageDispatcher.handleStatusEvent(event);
         } catch (Throwable e) {
-            logger.error("Error processing status event with work ID: {}. Message: {}", event.getWorkId(), e.getMessage(), e);
+            logger.error("Error processing status event with work ID: {}. Message: {}", event.workId(), e.getMessage(), e);
             throw e;
         }
     }
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/repository/WorkRepository.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/repository/WorkRepository.java
index ff1a812..3db6fb0 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/repository/WorkRepository.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/repository/WorkRepository.java
@@ -41,23 +41,23 @@ public interface WorkRepository extends JpaRepository<Work, UUID>, JpaSpecificat
             predicates.add(criteriaBuilder.equal(root.get(Work_.visibility), WorkVisibility.PUBLIC));
 
             // Add predicate for type attribute
-            if (workFilter.getType() != null) {
-                predicates.add(criteriaBuilder.equal(root.get(Work_.TYPE), workFilter.getType()));
+            if (workFilter.type() != null) {
+                predicates.add(criteriaBuilder.equal(root.get(Work_.TYPE), workFilter.type()));
             }
 
             // Add predicate for title attribute
-            if (workFilter.getTitle() != null) {
-                predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(Work_.TITLE)), "%" + workFilter.getTitle().toLowerCase() + "%"));
+            if (workFilter.title() != null) {
+                predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(Work_.TITLE)), "%" + workFilter.title().toLowerCase() + "%"));
             }
 
             // Add predicate for license identifier attribute
-            if (workFilter.getLicenseIdentifier() != null) {
-                predicates.add(criteriaBuilder.equal(root.get(Work_.LICENSE).get("identifier"), workFilter.getLicenseIdentifier()));
+            if (workFilter.licenseIdentifier() != null) {
+                predicates.add(criteriaBuilder.equal(root.get(Work_.LICENSE).get("identifier"), workFilter.licenseIdentifier()));
             }
             // Add predicate for tags
-            if (workFilter.getTags() != null && !workFilter.getTags().isEmpty()) {
+            if (workFilter.tags() != null && !workFilter.tags().isEmpty()) {
                 var tagsJoin = root.join(Work_.TAGS, JoinType.INNER);
-                predicates.add(tagsJoin.get(Tag_.NAME).in(workFilter.getTags()));
+                predicates.add(tagsJoin.get(Tag_.NAME).in(workFilter.tags()));
             }
 
             return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkFileService.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkFileService.java
index b258a58..ae89968 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkFileService.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkFileService.java
@@ -36,11 +36,7 @@ public class WorkFileService {
         var prefix = ZonedDateTime.now().format(ISO_OFFSET_DATE_TIME);
         var uploadUrl = minioService.generatePresignedUploadUrl(userId, prefix + "/" + filename);
 
-        return FileUploadView.builder()
-                .prefix(prefix)
-                .filename(filename)
-                .url(uploadUrl)
-                .build();
+        return new FileUploadView(prefix, filename, uploadUrl);
     }
 
     public DownloadFileResponse downloadRegistrationCertificate(UUID workId) {
@@ -49,10 +45,7 @@ public class WorkFileService {
         var inputStream = minioService.downloadRegistrationCertificate(work.getRegistrar(),
                 work.getWorkFile().getPrefix());
 
-        return DownloadFileResponse.builder()
-                .filename(REGISTRATION_CERTIFICATE_NAME)
-                .inputStreamResource(new InputStreamResource(inputStream))
-                .build();
+        return new DownloadFileResponse(new InputStreamResource(inputStream), REGISTRATION_CERTIFICATE_NAME);
     }
 
     public DownloadFileResponse downloadWorkById(UUID workId) {
@@ -72,10 +65,7 @@ public class WorkFileService {
     private DownloadFileResponse downLoadFile(Work work) {
         var inputStream = minioService.downloadFile(work.getRegistrar(), work.getWorkFile().getFilenameWithPrefix());
 
-        return DownloadFileResponse.builder()
-                .filename(work.getWorkFile().getFilename())
-                .inputStreamResource(new InputStreamResource(inputStream))
-                .build();
+        return new DownloadFileResponse(new InputStreamResource(inputStream), work.getWorkFile().getFilename());
     }
 
     private EntityNotFoundException workNotFoundException(UUID workId) {
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkMessageDispatcher.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkMessageDispatcher.java
index c391bee..b148a46 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkMessageDispatcher.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkMessageDispatcher.java
@@ -1,6 +1,5 @@
 package eu.fairkom.faircommons.api_service.service;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import eu.fairkom.faircommons.api_service.strategy.MessageDispatchStrategy;
 import eu.fairkom.faircommons.common.models.entities.WorkStatus;
 import eu.fairkom.faircommons.common.rabbitmq.messages.StatusEvent;
@@ -29,8 +28,8 @@ public class WorkMessageDispatcher {
 
     @Transactional
     public void handleStatusEvent(StatusEvent event) {
-        logger.info("Handling status event for work ID: {}", event.getWorkId());
-        var workStatus = workStatusService.saveStatus(event.getStatus());
+        logger.info("Handling status event for work ID: {}", event.workId());
+        var workStatus = workStatusService.saveStatus(event.status());
         var work = workService.updateWork(workStatus, workStatus.getType());
 
         var strategy = dispatchStrategies.get(workStatus.getType());
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkService.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkService.java
index e629a05..8eac92c 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkService.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkService.java
@@ -47,15 +47,15 @@ public class WorkService {
 
     @Transactional
     public UUID registerWork(WorkCreateView workCreateView) {
-        logger.info("Registering work for user: {}", workCreateView.getRegistrar());
+        logger.info("Registering work for user: {}", workCreateView.registrar());
         var work = workRepository.save(createWorkEntity(workCreateView));
         logger.debug("Work saved with ID: {}", work.getId());
 
-        var message = WorkFileMessage.builder()
-                .workId(work.getId())
-                .workFile(workCreateView.getWorkFile())
-                .userId(workCreateView.getRegistrar())
-                .build();
+        var message = new WorkFileMessage(
+                work.getId(),
+                workCreateView.workFile(),
+                workCreateView.registrar()
+        );
 
         eventPublisher.publishEvent(message);
         return work.getId();
@@ -101,7 +101,7 @@ public class WorkService {
     }
 
     private Work createWorkEntity(WorkCreateView view) {
-        var tags = view.getTags()
+        var tags = view.tags()
                 .stream()
                 .distinct()
                 .map(name -> tagRepository.findTagByName(name)
@@ -112,15 +112,15 @@ public class WorkService {
         workEntity.setTags(tags);
 
         //TODO remove after migration
-        if (view.getGrid() != null) {
-            workEntity.setGrid(view.getGrid());
+        if (view.grid() != null) {
+            workEntity.setGrid(view.grid());
         } else {
             workEntity.setGrid(IdentifierGenerator.generateGlobalReleaseIdentifier());
         }
 
         //TODO remove after migration
-        if (view.getRegistrationDate() != null) {
-            workEntity.setRegistrationDate(view.getRegistrationDate());
+        if (view.registrationDate() != null) {
+            workEntity.setRegistrationDate(view.registrationDate());
         }
 
         return workEntity;
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkStatusService.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkStatusService.java
index 476ef11..ba7173f 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkStatusService.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/service/WorkStatusService.java
@@ -22,7 +22,7 @@ public class WorkStatusService {
 
     @Transactional
     public WorkStatus saveStatus(WorkStatusView workStatusView) {
-        logger.info("Saving work status for work ID: {}", workStatusView.getWorkId());
+        logger.info("Saving work status for work ID: {}", workStatusView.workId());
         var workStatus = workStatusMapper.toEntity(workStatusView);
         return workStatusRepository.save(workStatus);
     }
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/AbstractMessageDispatcher.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/AbstractMessageDispatcher.java
index 162163d..090b86f 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/AbstractMessageDispatcher.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/AbstractMessageDispatcher.java
@@ -25,20 +25,21 @@ public abstract class AbstractMessageDispatcher implements MessageDispatchStrate
     protected WorkFileMessage buildWorkFileMessage(Work work) {
         var workFileView = workMapper.toWorkFileView(work.getWorkFile());
 
-        return WorkFileMessage.builder()
-                .workFile(workFileView)
-                .workId(work.getId())
-                .userId(work.getRegistrar())
-                .build();
+        return new WorkFileMessage(
+                work.getId(),
+                workFileView,
+                work.getRegistrar()
+        );
     }
 
     protected MetaDataMessage buildMetaDataMessage(Work work) throws MessageBuildingException {
         try {
             var metaData = workMapper.toMetaDataView(work);
-            return MetaDataMessage.builder()
-                    .workId(work.getId())
-                    .metaData(objectMapper.writeValueAsString(metaData))
-                    .build();
+
+            return new MetaDataMessage(
+                    work.getId(),
+                    objectMapper.writeValueAsString(metaData)
+            );
         } catch (JsonProcessingException e) {
             throw new MessageBuildingException("Error while building MetaDataMessage for Work with ID: " + work.getId(), e);
         }
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/MetaIpfsDoneDispatcher.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/MetaIpfsDoneDispatcher.java
index 63b8342..77889ff 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/MetaIpfsDoneDispatcher.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/MetaIpfsDoneDispatcher.java
@@ -22,14 +22,12 @@ public class MetaIpfsDoneDispatcher extends AbstractMessageDispatcher {
 
     @Override
     public void dispatch(Work work) {
-        var status = WorkStatusView.builder()
-                .workId(work.getId())
-                .type(REGISTRATION_DONE)
-                .build();
-        var event = StatusEvent.builder()
-                .workId(work.getId())
-                .status(status)
-                .build();
+        var event = new StatusEvent(
+                work.getId(),
+                new WorkStatusView(
+                        work.getId(),
+                        REGISTRATION_DONE
+                ));
 
         rabbitTemplate.convertAndSend(STATUS_QUEUE, event);
     }
diff --git a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/RegistrationDoneDispatcher.java b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/RegistrationDoneDispatcher.java
index 94f34f2..d3a53af 100644
--- a/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/RegistrationDoneDispatcher.java
+++ b/faircommons-services/api-service/src/main/java/eu/fairkom/faircommons/api_service/strategy/RegistrationDoneDispatcher.java
@@ -21,9 +21,8 @@ public class RegistrationDoneDispatcher extends AbstractMessageDispatcher {
 
     @Override
     public void dispatch(Work work) {
-        var message = PostRegistrationMessage.builder()
-                .work(workMapper.toView(work))
-                .build();
+        var message = new PostRegistrationMessage(workMapper.toView(work));
+
         rabbitTemplate.convertAndSend(POST_REGISTRATION_EXCHANGE, POST_REGISTRATION_QUEUE, message);
     }
 
diff --git a/faircommons-services/common/pom.xml b/faircommons-services/common/pom.xml
index 4c5060b..19fc5c1 100644
--- a/faircommons-services/common/pom.xml
+++ b/faircommons-services/common/pom.xml
@@ -11,6 +11,11 @@
     <artifactId>common</artifactId>
     <packaging>jar</packaging>
 
+    <properties>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>io.minio</groupId>
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/Constants.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/Constants.java
index ce7135a..3662dac 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/Constants.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/Constants.java
@@ -1,6 +1,8 @@
 package eu.fairkom.faircommons.common;
 
-public class Constants {
+public final class Constants {
     public static final String REGISTRATION_CERTIFICATE_NAME = "fairregister-certificate.pdf";
     public static final String REGISTRATION_CERTIFICATE_FOLDER = "certificate";
+    private Constants() {
+    }
 }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/IdentifierGenerator.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/IdentifierGenerator.java
index 151917d..5bddbd2 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/IdentifierGenerator.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/IdentifierGenerator.java
@@ -16,15 +16,13 @@ public class IdentifierGenerator {
         var releaseNumber = generateReleaseNumber();
         var checkCharacter = calculateCheckCharacter(releaseNumber);
 
-        return new StringBuilder()
-                .append(IDENTIFIER_SCHEME)
-                .append("-")
-                .append(ISSUER_CODE)
-                .append("-")
-                .append(releaseNumber)
-                .append("-")
-                .append(checkCharacter)
-                .toString();
+        return IDENTIFIER_SCHEME +
+                "-" +
+                ISSUER_CODE +
+                "-" +
+                releaseNumber +
+                "-" +
+                checkCharacter;
     }
 
     private static String generateReleaseNumber() {
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/EntityMapper.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/EntityMapper.java
index 449cb6a..d03f415 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/EntityMapper.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/EntityMapper.java
@@ -28,8 +28,8 @@ final class EntityMapper {
 
     @ObjectFactory
     public <ID extends Serializable, T> T getOrCreate(@TargetType Class<T> entityClass, IdentifiableView<ID> view) {
-        return view.getId() != null
-                ? entityManager.getReference(entityClass, view.getId())
+        return view.id() != null
+                ? entityManager.getReference(entityClass, view.id())
                 : BeanUtils.instantiateClass(entityClass);
     }
 }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/EntityObjectFactory.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/EntityObjectFactory.java
index a01b17d..ef64c58 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/EntityObjectFactory.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/EntityObjectFactory.java
@@ -19,8 +19,8 @@ public class EntityObjectFactory {
 
     @ObjectFactory
     public <ID extends Serializable, T> T getOrCreate(@TargetType Class<T> entityClass, IdentifiableView<ID> view) {
-        return view.getId() != null
-                ? entityManager.getReference(entityClass, view.getId())
+        return view.id() != null
+                ? entityManager.getReference(entityClass, view.id())
                 : BeanUtils.instantiateClass(entityClass);
     }
 }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/WorkStatusMapper.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/WorkStatusMapper.java
index 955d98b..c75b9f5 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/WorkStatusMapper.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/WorkStatusMapper.java
@@ -12,6 +12,7 @@ import org.mapstruct.Mapping;
 @Mapper(config = MappingConfig.class)
 public interface WorkStatusMapper {
     @Mapping(target = "work", source = "workId")
+    @Mapping(target = "hashCode", source = "hash")
     @Mapping(target = "created", ignore = true)
     @Mapping(target = "id", ignore = true)
     WorkStatus toEntity(WorkStatusView workStatusView);
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/MinioConfiguration.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/MinioConfiguration.java
index 0afb0d2..1841848 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/MinioConfiguration.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/MinioConfiguration.java
@@ -7,7 +7,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-@Configuration
+@Configuration(proxyBeanMethods = false)
 @ConditionalOnClass(MinioClient.class)
 @EnableConfigurationProperties(MinioConfigurationProperties.class)
 public class MinioConfiguration {
@@ -20,9 +20,9 @@ public class MinioConfiguration {
     @Bean
     public MinioClient minioClient() {
         return MinioClient.builder()
-                .endpoint(properties.getUrl())
-                .region(properties.getRegion())
-                .credentials(properties.getAccessKey(), properties.getSecretKey())
+                .endpoint(properties.url())
+                .region(properties.region())
+                .credentials(properties.accessKey(), properties.secretKey())
                 .build();
     }
 }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/MinioService.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/MinioService.java
index f41a976..2b88753 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/MinioService.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/MinioService.java
@@ -2,8 +2,6 @@ package eu.fairkom.faircommons.common.minio;
 
 import io.minio.*;
 import io.minio.http.Method;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/models/MinioConfigurationProperties.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/models/MinioConfigurationProperties.java
new file mode 100644
index 0000000..6372219
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/minio/models/MinioConfigurationProperties.java
@@ -0,0 +1,14 @@
+package eu.fairkom.faircommons.common.minio.models;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties("minio")
+public record MinioConfigurationProperties(
+        String url,
+        String accessKey,
+        String secretKey,
+        boolean secure,
+        String bucketPrefix,
+        String region
+) {
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/DownloadFileResponse.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/DownloadFileResponse.java
new file mode 100644
index 0000000..c1b1dd3
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/DownloadFileResponse.java
@@ -0,0 +1,8 @@
+package eu.fairkom.faircommons.common.models;
+
+import org.springframework.core.io.InputStreamResource;
+
+public record DownloadFileResponse(
+        InputStreamResource inputStreamResource,
+        String filename) {
+}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/MessageBuildingException.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/MessageBuildingException.java
similarity index 100%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/MessageBuildingException.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/MessageBuildingException.java
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/StorageOption.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/StorageOption.java
similarity index 100%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/StorageOption.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/StorageOption.java
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/WorkFilter.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/WorkFilter.java
new file mode 100644
index 0000000..6cbf189
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/WorkFilter.java
@@ -0,0 +1,10 @@
+package eu.fairkom.faircommons.common.models;
+
+import java.util.List;
+
+public record WorkFilter(
+        WorkType type,
+        String title,
+        List<String> tags,
+        String licenseIdentifier) {
+}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/WorkType.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/WorkType.java
similarity index 100%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/WorkType.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/WorkType.java
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/WorkVisibility.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/WorkVisibility.java
similarity index 100%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/WorkVisibility.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/WorkVisibility.java
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Author.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Author.java
new file mode 100644
index 0000000..dae8f8c
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Author.java
@@ -0,0 +1,70 @@
+package eu.fairkom.faircommons.common.models.entities;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.Id;
+import org.hibernate.annotations.UuidGenerator;
+
+import java.util.UUID;
+
+@Entity
+public class Author extends Identifiable<UUID> {
+    @Id
+    @GeneratedValue
+    @UuidGenerator
+    private UUID id;
+    private String firstName;
+    private String lastName;
+    private String email;
+    private String pseudonym;
+    private String url;
+
+    @Override
+    public UUID getId() {
+        return id;
+    }
+
+    public void setId(UUID id) {
+        this.id = id;
+    }
+
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getPseudonym() {
+        return pseudonym;
+    }
+
+    public void setPseudonym(String pseudonym) {
+        this.pseudonym = pseudonym;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Collection.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Collection.java
similarity index 55%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Collection.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Collection.java
index ee25a68..ee48f50 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Collection.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Collection.java
@@ -1,19 +1,13 @@
 package eu.fairkom.faircommons.common.models.entities;
 
 import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
 import org.hibernate.annotations.UuidGenerator;
 
 import java.util.HashSet;
 import java.util.Set;
 import java.util.UUID;
 
-@Getter
-@Setter
 @Entity
-@NoArgsConstructor
 public class Collection extends Identifiable<UUID> {
     @Id
     @GeneratedValue
@@ -24,4 +18,29 @@ public class Collection extends Identifiable<UUID> {
 
     @OneToMany(mappedBy = "collection", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
     private Set<Work> works = new HashSet<>();
+
+    @Override
+    public UUID getId() {
+        return id;
+    }
+
+    public void setId(UUID id) {
+        this.id = id;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public Set<Work> getWorks() {
+        return works;
+    }
+
+    public void setWorks(Set<Work> works) {
+        this.works = works;
+    }
 }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Contributor.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Contributor.java
new file mode 100644
index 0000000..a363ca8
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Contributor.java
@@ -0,0 +1,67 @@
+package eu.fairkom.faircommons.common.models.entities;
+
+import jakarta.persistence.*;
+import org.hibernate.annotations.UuidGenerator;
+
+import java.util.UUID;
+
+@Entity
+public class Contributor extends Identifiable<UUID> {
+    @Id
+    @GeneratedValue
+    @UuidGenerator
+    private UUID id;
+
+    @OneToOne(mappedBy = "creator", fetch = FetchType.LAZY)
+    private Work workAsCreator;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "work_as_contributor_id")
+    private Work workAsContributor;
+
+    @ManyToOne(cascade = CascadeType.ALL)
+    @JoinColumn(name = "author_id", nullable = false)
+    private Author author;
+    private Integer percentage;
+
+    @Override
+    public UUID getId() {
+        return id;
+    }
+
+    public void setId(UUID id) {
+        this.id = id;
+    }
+
+    public Work getWorkAsCreator() {
+        return workAsCreator;
+    }
+
+    public void setWorkAsCreator(Work workAsCreator) {
+        this.workAsCreator = workAsCreator;
+    }
+
+    public Work getWorkAsContributor() {
+        return workAsContributor;
+    }
+
+    public void setWorkAsContributor(Work workAsContributor) {
+        this.workAsContributor = workAsContributor;
+    }
+
+    public Author getAuthor() {
+        return author;
+    }
+
+    public void setAuthor(Author author) {
+        this.author = author;
+    }
+
+    public Integer getPercentage() {
+        return percentage;
+    }
+
+    public void setPercentage(Integer percentage) {
+        this.percentage = percentage;
+    }
+}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Identifiable.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Identifiable.java
similarity index 100%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Identifiable.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Identifiable.java
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Tag.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Tag.java
similarity index 51%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Tag.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Tag.java
index cb79e63..9e25fb2 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Tag.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Tag.java
@@ -1,18 +1,29 @@
 package eu.fairkom.faircommons.common.models.entities;
 
 import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
 
-@Getter
-@Setter
 @Entity
-@NoArgsConstructor
 public class Tag extends Identifiable<Long> {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
     @Column(unique = true)
     private String name;
+
+    @Override
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
 }
\ No newline at end of file
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Work.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Work.java
similarity index 52%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Work.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Work.java
index 266967c..27875cc 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Work.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/Work.java
@@ -5,18 +5,12 @@ import eu.fairkom.faircommons.common.models.WorkType;
 import eu.fairkom.faircommons.common.models.WorkVisibility;
 import eu.fairkom.faircommons.common.models.entities.embedded.*;
 import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
 import org.hibernate.annotations.UuidGenerator;
 
 import java.time.ZonedDateTime;
 import java.util.*;
 
-@Getter
-@Setter
 @Entity
-@NoArgsConstructor
 @NamedEntityGraph(
         name = "work.public",
         attributeNodes = {
@@ -150,4 +144,221 @@ public class Work extends Identifiable<UUID> {
     public void addContributor(Contributor contributor) {
         addBidirectional(this, contributor, Work::getContributors, Contributor::setWorkAsContributor);
     }
+
+    @Override
+    public UUID getId() {
+        return id;
+    }
+
+    public void setId(UUID id) {
+        this.id = id;
+    }
+
+    public WorkType getType() {
+        return type;
+    }
+
+    public void setType(WorkType type) {
+        this.type = type;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getRegistrar() {
+        return registrar;
+    }
+
+    public void setRegistrar(String registrar) {
+        this.registrar = registrar;
+    }
+
+    public ZonedDateTime getRegistrationDate() {
+        return registrationDate;
+    }
+
+    public void setRegistrationDate(ZonedDateTime registrationDate) {
+        this.registrationDate = registrationDate;
+    }
+
+    public WorkFile getWorkFile() {
+        return workFile;
+    }
+
+    public void setWorkFile(WorkFile workFile) {
+        this.workFile = workFile;
+    }
+
+    public List<Tag> getTags() {
+        return tags;
+    }
+
+    public void setTags(List<Tag> tags) {
+        this.tags = tags;
+    }
+
+    public String getLanguage() {
+        return language;
+    }
+
+    public void setLanguage(String language) {
+        this.language = language;
+    }
+
+    public ZonedDateTime getCreationDate() {
+        return creationDate;
+    }
+
+    public void setCreationDate(ZonedDateTime creationDate) {
+        this.creationDate = creationDate;
+    }
+
+    public ZonedDateTime getPublishingDate() {
+        return publishingDate;
+    }
+
+    public void setPublishingDate(ZonedDateTime publishingDate) {
+        this.publishingDate = publishingDate;
+    }
+
+    public String getPublisher() {
+        return publisher;
+    }
+
+    public void setPublisher(String publisher) {
+        this.publisher = publisher;
+    }
+
+    public String getIdentifier() {
+        return identifier;
+    }
+
+    public void setIdentifier(String identifier) {
+        this.identifier = identifier;
+    }
+
+    public WorkVisibility getVisibility() {
+        return visibility;
+    }
+
+    public void setVisibility(WorkVisibility visibility) {
+        this.visibility = visibility;
+    }
+
+    public Contributor getCreator() {
+        return creator;
+    }
+
+    public void setCreator(Contributor creator) {
+        this.creator = creator;
+    }
+
+    public Set<Contributor> getContributors() {
+        return contributors;
+    }
+
+    public void setContributors(Set<Contributor> contributors) {
+        this.contributors = contributors;
+    }
+
+    public License getLicense() {
+        return license;
+    }
+
+    public void setLicense(License license) {
+        this.license = license;
+    }
+
+    public Revocation getRevocation() {
+        return revocation;
+    }
+
+    public void setRevocation(Revocation revocation) {
+        this.revocation = revocation;
+    }
+
+    public HashCode getHashFile() {
+        return hashFile;
+    }
+
+    public void setHashFile(HashCode hashFile) {
+        this.hashFile = hashFile;
+    }
+
+    public HashCode getHashMeta() {
+        return hashMeta;
+    }
+
+    public void setHashMeta(HashCode hashMeta) {
+        this.hashMeta = hashMeta;
+    }
+
+    public IpfsEntry getIpfsFile() {
+        return ipfsFile;
+    }
+
+    public void setIpfsFile(IpfsEntry ipfsFile) {
+        this.ipfsFile = ipfsFile;
+    }
+
+    public IpfsEntry getIpfsMeta() {
+        return ipfsMeta;
+    }
+
+    public void setIpfsMeta(IpfsEntry ipfsMeta) {
+        this.ipfsMeta = ipfsMeta;
+    }
+
+    public Collection getCollection() {
+        return collection;
+    }
+
+    public void setCollection(Collection collection) {
+        this.collection = collection;
+    }
+
+    public WorkStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(WorkStatus status) {
+        this.status = status;
+    }
+
+    public Set<WorkStatus> getStatuses() {
+        return statuses;
+    }
+
+    public void setStatuses(Set<WorkStatus> statuses) {
+        this.statuses = statuses;
+    }
+
+    public Set<StorageOption> getStorageOptions() {
+        return storageOptions;
+    }
+
+    public void setStorageOptions(Set<StorageOption> storageOptions) {
+        this.storageOptions = storageOptions;
+    }
+
+    public String getGrid() {
+        return grid;
+    }
+
+    public void setGrid(String grid) {
+        this.grid = grid;
+    }
 }
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/WorkStatus.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/WorkStatus.java
similarity index 59%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/WorkStatus.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/WorkStatus.java
index a29f623..25cbdce 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/WorkStatus.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/WorkStatus.java
@@ -3,17 +3,11 @@ package eu.fairkom.faircommons.common.models.entities;
 import eu.fairkom.faircommons.common.models.entities.embedded.HashCode;
 import eu.fairkom.faircommons.common.models.entities.embedded.IpfsEntry;
 import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
 import org.springframework.data.annotation.Immutable;
 
 import java.time.ZonedDateTime;
 
-@Getter
-@Setter
 @Entity
-@NoArgsConstructor
 @Immutable
 public class WorkStatus extends Identifiable<Long> {
     @Id
@@ -41,6 +35,55 @@ public class WorkStatus extends Identifiable<Long> {
 
     private WorkStatusType type;
 
+    @Override
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Work getWork() {
+        return work;
+    }
+
+    public void setWork(Work work) {
+        this.work = work;
+    }
+
+    public ZonedDateTime getCreated() {
+        return created;
+    }
+
+    public void setCreated(ZonedDateTime created) {
+        this.created = created;
+    }
+
+    public HashCode getHashCode() {
+        return hashCode;
+    }
+
+    public void setHashCode(HashCode hashCode) {
+        this.hashCode = hashCode;
+    }
+
+    public IpfsEntry getIpfsEntry() {
+        return ipfsEntry;
+    }
+
+    public void setIpfsEntry(IpfsEntry ipfsEntry) {
+        this.ipfsEntry = ipfsEntry;
+    }
+
+    public WorkStatusType getType() {
+        return type;
+    }
+
+    public void setType(WorkStatusType type) {
+        this.type = type;
+    }
+
     public enum WorkStatusType {
         FILE_HASHING_DONE, META_HASHING_DONE, FILE_IPFS_DONE, META_IPFS_DONE, REGISTRATION_DONE, ERROR
     }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/HashCode.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/HashCode.java
new file mode 100644
index 0000000..1854a8b
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/HashCode.java
@@ -0,0 +1,29 @@
+package eu.fairkom.faircommons.common.models.entities.embedded;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+
+@Embeddable
+public class HashCode {
+    @Column(updatable = false)
+    private String algorithm;
+
+    @Column(updatable = false)
+    private String hexValue;
+
+    public String getAlgorithm() {
+        return algorithm;
+    }
+
+    public void setAlgorithm(String algorithm) {
+        this.algorithm = algorithm;
+    }
+
+    public String getHexValue() {
+        return hexValue;
+    }
+
+    public void setHexValue(String hexValue) {
+        this.hexValue = hexValue;
+    }
+}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/IpfsEntry.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/IpfsEntry.java
similarity index 53%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/IpfsEntry.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/IpfsEntry.java
index 60ab5d7..6576713 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/IpfsEntry.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/IpfsEntry.java
@@ -2,13 +2,7 @@ package eu.fairkom.faircommons.common.models.entities.embedded;
 
 import jakarta.persistence.Column;
 import jakarta.persistence.Embeddable;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
 
-@Getter
-@Setter
-@NoArgsConstructor
 @Embeddable
 public class IpfsEntry {
     @Column(updatable = false)
@@ -16,4 +10,20 @@ public class IpfsEntry {
 
     @Column(updatable = false)
     private String path;
+
+    public String getCid() {
+        return cid;
+    }
+
+    public void setCid(String cid) {
+        this.cid = cid;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
 }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/License.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/License.java
new file mode 100644
index 0000000..1a08e50
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/License.java
@@ -0,0 +1,45 @@
+package eu.fairkom.faircommons.common.models.entities.embedded;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+
+@Embeddable
+public class License {
+    @Column(updatable = false)
+    private String identifier; //immutable SPDX
+    private String addons;
+    private String dual;
+    private String dalicc;
+
+    public String getIdentifier() {
+        return identifier;
+    }
+
+    public void setIdentifier(String identifier) {
+        this.identifier = identifier;
+    }
+
+    public String getAddons() {
+        return addons;
+    }
+
+    public void setAddons(String addons) {
+        this.addons = addons;
+    }
+
+    public String getDual() {
+        return dual;
+    }
+
+    public void setDual(String dual) {
+        this.dual = dual;
+    }
+
+    public String getDalicc() {
+        return dalicc;
+    }
+
+    public void setDalicc(String dalicc) {
+        this.dalicc = dalicc;
+    }
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/Revocation.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/Revocation.java
new file mode 100644
index 0000000..5928cb8
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/Revocation.java
@@ -0,0 +1,27 @@
+package eu.fairkom.faircommons.common.models.entities.embedded;
+
+import jakarta.persistence.Embeddable;
+
+import java.time.ZonedDateTime;
+
+@Embeddable
+public class Revocation {
+    private ZonedDateTime date;
+    private String note;
+
+    public ZonedDateTime getDate() {
+        return date;
+    }
+
+    public void setDate(ZonedDateTime date) {
+        this.date = date;
+    }
+
+    public String getNote() {
+        return note;
+    }
+
+    public void setNote(String note) {
+        this.note = note;
+    }
+}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/WorkFile.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/WorkFile.java
similarity index 55%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/WorkFile.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/WorkFile.java
index e123421..346724b 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/WorkFile.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/entities/embedded/WorkFile.java
@@ -2,13 +2,7 @@ package eu.fairkom.faircommons.common.models.entities.embedded;
 
 import jakarta.persistence.Column;
 import jakarta.persistence.Embeddable;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
 
-@Getter
-@Setter
-@NoArgsConstructor
 @Embeddable
 public class WorkFile {
     @Column(updatable = false)
@@ -19,4 +13,20 @@ public class WorkFile {
     public String getFilenameWithPrefix() {
         return prefix + "/" + filename;
     }
+
+    public String getPrefix() {
+        return prefix;
+    }
+
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+
+    public String getFilename() {
+        return filename;
+    }
+
+    public void setFilename(String filename) {
+        this.filename = filename;
+    }
 }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/AuthorView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/AuthorView.java
new file mode 100644
index 0000000..ac15b58
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/AuthorView.java
@@ -0,0 +1,16 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
+
+import java.util.UUID;
+
+public record AuthorView(
+        UUID id,
+        @Size(max = 255) @NotBlank String firstName,
+        @Size(max = 255) @NotBlank String lastName,
+        @Size(max = 255) @Email String email,
+        @Size(max = 255) @NotBlank String pseudonym,
+        @Size(max = 255) String url) implements IdentifiableView<UUID> {
+}
\ No newline at end of file
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/ContributorView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/ContributorView.java
new file mode 100644
index 0000000..198ff98
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/ContributorView.java
@@ -0,0 +1,13 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotNull;
+
+import java.util.UUID;
+
+public record ContributorView(
+        UUID id,
+        @Valid AuthorView author,
+        @NotNull Integer percentage) implements IdentifiableView<UUID> {
+
+}
\ No newline at end of file
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/FileUploadView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/FileUploadView.java
new file mode 100644
index 0000000..f866288
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/FileUploadView.java
@@ -0,0 +1,7 @@
+package eu.fairkom.faircommons.common.models.views;
+
+public record FileUploadView(
+        String prefix,
+        String filename,
+        String url) {
+}
\ No newline at end of file
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/HashCodeView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/HashCodeView.java
new file mode 100644
index 0000000..dfd21cb
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/HashCodeView.java
@@ -0,0 +1,8 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import java.io.Serializable;
+
+public record HashCodeView(
+        String algorithm,
+        String hexValue) implements Serializable {
+}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/IdentifiableView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/IdentifiableView.java
similarity index 91%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/IdentifiableView.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/IdentifiableView.java
index df50245..3daee0b 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/IdentifiableView.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/IdentifiableView.java
@@ -3,5 +3,5 @@ package eu.fairkom.faircommons.common.models.views;
 import java.io.Serializable;
 
 public interface IdentifiableView<ID extends Serializable> extends Serializable {
-    ID getId();
+    ID id();
 }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/IpfsEntryView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/IpfsEntryView.java
new file mode 100644
index 0000000..9f22a80
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/IpfsEntryView.java
@@ -0,0 +1,12 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import java.io.Serializable;
+
+public record IpfsEntryView(
+        String cid,
+        String path) implements Serializable {
+
+    public IpfsEntryView(String cid) {
+        this(cid, "");
+    }
+}
\ No newline at end of file
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/LicenseView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/LicenseView.java
new file mode 100644
index 0000000..eca5ab7
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/LicenseView.java
@@ -0,0 +1,14 @@
+package eu.fairkom.faircommons.common.models.views;
+
+
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.Size;
+
+import java.io.Serializable;
+
+public record LicenseView(
+        @Size(max = 255) @NotEmpty String identifier,
+        @Size(max = 255) String addons,
+        @Size(max = 255) String dual,
+        @Size(max = 255) String dalicc) implements Serializable {
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/MetaDataView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/MetaDataView.java
new file mode 100644
index 0000000..07286de
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/MetaDataView.java
@@ -0,0 +1,23 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import eu.fairkom.faircommons.common.models.entities.embedded.HashCode;
+import eu.fairkom.faircommons.common.models.entities.embedded.IpfsEntry;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+import java.util.UUID;
+
+public record MetaDataView(
+        UUID workId,
+        String title,
+        String description,
+        ZonedDateTime creationDate,
+        ZonedDateTime registrationDate,
+        String registrar,
+        WorkFileView workFile,
+        HashCode hashFile,
+        HashCode hashMeta,
+        IpfsEntry ipfsFile,
+        IpfsEntry ipfsMeta,
+        String licenseIdentifier) implements Serializable {
+}
\ No newline at end of file
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicAuthorView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicAuthorView.java
new file mode 100644
index 0000000..62183a0
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicAuthorView.java
@@ -0,0 +1,6 @@
+package eu.fairkom.faircommons.common.models.views;
+
+public record PublicAuthorView(
+        String pseudonym,
+        String url) {
+}
\ No newline at end of file
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicContributorView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicContributorView.java
new file mode 100644
index 0000000..7f27f49
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicContributorView.java
@@ -0,0 +1,6 @@
+package eu.fairkom.faircommons.common.models.views;
+
+public record PublicContributorView(
+        PublicAuthorView author,
+        Integer percentage) {
+}
\ No newline at end of file
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicWorkView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicWorkView.java
new file mode 100644
index 0000000..b179138
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/PublicWorkView.java
@@ -0,0 +1,23 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import eu.fairkom.faircommons.common.models.WorkType;
+
+import java.time.ZonedDateTime;
+import java.util.List;
+
+public record PublicWorkView(
+        WorkType type,
+        String title,
+        String description,
+        List<String> tags,
+        String registrar,
+        ZonedDateTime registrationDate,
+        ZonedDateTime creationDate,
+        String publisher,
+        String identifier,
+        String language,
+        PublicContributorView creator,
+        LicenseView license,
+        String grid,
+        String filename) {
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/RevocationView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/RevocationView.java
new file mode 100644
index 0000000..bd97e80
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/RevocationView.java
@@ -0,0 +1,9 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+
+public record RevocationView(
+        ZonedDateTime date,
+        String note) implements Serializable {
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/TagView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/TagView.java
new file mode 100644
index 0000000..ad21259
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/TagView.java
@@ -0,0 +1,6 @@
+package eu.fairkom.faircommons.common.models.views;
+
+public record TagView(
+        Long id,
+        String name) implements IdentifiableView<Long> {
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkCreateView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkCreateView.java
new file mode 100644
index 0000000..620b0d1
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkCreateView.java
@@ -0,0 +1,40 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import eu.fairkom.faircommons.common.models.StorageOption;
+import eu.fairkom.faircommons.common.models.WorkType;
+import eu.fairkom.faircommons.common.models.WorkVisibility;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
+
+import java.time.ZonedDateTime;
+import java.util.List;
+
+public record WorkCreateView(
+        @NotNull WorkType type,
+        @Size(max = 100) @NotBlank String title,
+        @Size(max = 2000) @NotBlank String description,
+        List<String> tags,
+        @Size(max = 2) String language,
+        ZonedDateTime creationDate,
+        @Size(max = 36) @NotBlank String registrar,
+        @Valid ContributorView creator,
+        @Valid List<ContributorView> contributors,
+        @Size(max = 255) String publisher,
+        @Size(max = 255) String identifier,
+        @Valid WorkFileView workFile,
+        @NotNull WorkVisibility visibility,
+        List<StorageOption> storageOptions,
+        @Valid LicenseView license,
+        @Pattern(regexp = "RC-(01|FAREG)-(LIZ\\d{10}|\\d{10})-([A-Z]|\\d)(?=$)") String grid,
+        ZonedDateTime registrationDate
+) {
+
+    public WorkCreateView {
+        if (storageOptions == null) {
+            storageOptions = List.of(StorageOption.FAIRREGISTER_FILE_SYSTEM);
+        }
+    }
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkFileView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkFileView.java
new file mode 100644
index 0000000..5d8b18c
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkFileView.java
@@ -0,0 +1,15 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.Size;
+
+import java.io.Serializable;
+
+public record WorkFileView(
+        @Size(max = 255) @NotEmpty String prefix,
+        @Size(max = 255) @NotEmpty String filename) implements Serializable {
+
+    public String filenameWithPrefix() {
+        return prefix() + "/" + filename();
+    }
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkStatusView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkStatusView.java
new file mode 100644
index 0000000..bae43b5
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkStatusView.java
@@ -0,0 +1,32 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import eu.fairkom.faircommons.common.models.entities.WorkStatus;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+import java.util.UUID;
+
+public record WorkStatusView(
+        UUID workId,
+        ZonedDateTime created,
+        HashCodeView hash,
+        IpfsEntryView ipfsEntry,
+        String errorMessage,
+        WorkStatus.WorkStatusType type) implements Serializable {
+
+    public WorkStatusView(UUID workId, WorkStatus.WorkStatusType type) {
+        this(workId, null, null, null, null, type);
+    }
+
+    public WorkStatusView(UUID workId, HashCodeView hash, WorkStatus.WorkStatusType type) {
+        this(workId, null, hash, null, null, type);
+    }
+
+    public WorkStatusView(UUID workId, IpfsEntryView ipfsEntry, WorkStatus.WorkStatusType type) {
+        this(workId, null, null, ipfsEntry, null, type);
+    }
+
+    public WorkStatusView(UUID workId, String errorMessage, WorkStatus.WorkStatusType type) {
+        this(workId, null, null, null, errorMessage, type);
+    }
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkView.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkView.java
new file mode 100644
index 0000000..189e5d3
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/models/views/WorkView.java
@@ -0,0 +1,40 @@
+package eu.fairkom.faircommons.common.models.views;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import eu.fairkom.faircommons.common.models.StorageOption;
+import eu.fairkom.faircommons.common.models.WorkType;
+import eu.fairkom.faircommons.common.models.WorkVisibility;
+
+import java.time.ZonedDateTime;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+public record WorkView(
+        UUID id,
+        WorkType type,
+        String title,
+        String description,
+        String filename,
+        ZonedDateTime registrationDate,
+        ZonedDateTime creationDate,
+        String status,
+        String language,
+        String identifier,
+        List<String> tags,
+        LicenseView license,
+        ContributorView creator,
+        List<ContributorView> contributors,
+        String publisher,
+        IpfsEntryView ipfsFile,
+        IpfsEntryView ipfsMeta,
+        HashCodeView hashFile,
+        HashCodeView hashMeta,
+        @JsonIgnore Set<StorageOption> storageOptions,
+        @JsonIgnore WorkFileView workFile,
+        String registrar,
+        WorkVisibility visibility,
+        RevocationView revocation,
+        ZonedDateTime publishingDate,
+        String grid) implements IdentifiableView<UUID> {
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/MessageHandler.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/MessageHandler.java
index c77a603..412ca0a 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/MessageHandler.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/MessageHandler.java
@@ -26,83 +26,43 @@ public abstract class MessageHandler {
     public abstract void handleMetaDataMessage(MetaDataMessage message);
 
     public void handleError(UUID workId, Throwable e) {
-        rabbitTemplate.convertAndSend(STATUS_EXCHANGE, STATUS_QUEUE, buildStatusEventError(workId, e.getMessage()));
+        var statusEvent = new StatusEvent(
+                workId,
+                new WorkStatusView(
+                        workId,
+                        e.getMessage(),
+                        WorkStatus.WorkStatusType.ERROR
+                )
+        );
+
+        rabbitTemplate.convertAndSend(STATUS_EXCHANGE, STATUS_QUEUE, statusEvent);
     }
 
     protected void sendStatusEvent(UUID workId,
                                    HashCodeView hashCode,
                                    WorkStatus.WorkStatusType statusType) {
-        var statusEvent = buildStatusEvent(workId, hashCode, statusType);
+        var statusEvent = new StatusEvent(
+                workId,
+                new WorkStatusView(
+                        workId,
+                        hashCode,
+                        statusType
+                )
+        );
         rabbitTemplate.convertAndSend(STATUS_EXCHANGE, STATUS_QUEUE, statusEvent);
     }
 
     protected void sendStatusEvent(UUID workId,
                                    IpfsEntryView ipfsEntry,
                                    WorkStatus.WorkStatusType statusType) {
-        var statusEvent = buildStatusEvent(workId, ipfsEntry, statusType);
+        var statusEvent = new StatusEvent(
+                workId,
+                new WorkStatusView(
+                        workId,
+                        ipfsEntry,
+                        statusType
+                )
+        );
         rabbitTemplate.convertAndSend(STATUS_EXCHANGE, STATUS_QUEUE, statusEvent);
     }
-
-    protected HashCodeView buildHashCodeView(String algorithm, String hexValue) {
-        return HashCodeView.builder()
-                .algorithm(algorithm)
-                .hexValue(hexValue)
-                .build();
-    }
-
-    protected IpfsEntryView buildIpfsEntryView(String path, String cid) {
-        return IpfsEntryView.builder()
-                .path(path)
-                .cid(cid)
-                .build();
-    }
-
-    private StatusEvent buildStatusEvent(UUID workId,
-                                         HashCodeView hashCode,
-                                         WorkStatus.WorkStatusType statusType) {
-        var status = buildWorkStatusView(hashCode, statusType, workId);
-        return StatusEvent.builder()
-                .workId(workId)
-                .status(status)
-                .build();
-    }
-
-    private StatusEvent buildStatusEvent(UUID workId,
-                                         IpfsEntryView ipfsEntry,
-                                         WorkStatus.WorkStatusType statusType) {
-        var status = buildWorkStatusView(ipfsEntry, statusType, workId);
-        return StatusEvent.builder()
-                .workId(workId)
-                .status(status)
-                .build();
-    }
-
-    private StatusEvent buildStatusEventError(UUID workId, String errorMessage) {
-        var errorStatus = WorkStatusView.builder()
-                .workId(workId)
-                .type(WorkStatus.WorkStatusType.ERROR)
-                .errorMessage(errorMessage)
-                .build();
-
-        return StatusEvent.builder()
-                .workId(workId)
-                .status(errorStatus)
-                .build();
-    }
-
-    private WorkStatusView buildWorkStatusView(HashCodeView hashCode, WorkStatus.WorkStatusType statusType, UUID workId) {
-        return WorkStatusView.builder()
-                .hashCode(hashCode)
-                .type(statusType)
-                .workId(workId)
-                .build();
-    }
-
-    private WorkStatusView buildWorkStatusView(IpfsEntryView ipfsEntry, WorkStatus.WorkStatusType statusType, UUID workId) {
-        return WorkStatusView.builder()
-                .ipfsEntry(ipfsEntry)
-                .type(statusType)
-                .workId(workId)
-                .build();
-    }
 }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/Message.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/Message.java
new file mode 100644
index 0000000..837411a
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/Message.java
@@ -0,0 +1,10 @@
+package eu.fairkom.faircommons.common.rabbitmq.messages;
+
+import java.io.Serializable;
+import java.util.UUID;
+
+public interface Message extends Serializable {
+    MessageType type();
+
+    UUID workId();
+}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/MessageType.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/MessageType.java
similarity index 100%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/MessageType.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/MessageType.java
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/MetaDataMessage.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/MetaDataMessage.java
new file mode 100644
index 0000000..eb550f8
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/MetaDataMessage.java
@@ -0,0 +1,13 @@
+package eu.fairkom.faircommons.common.rabbitmq.messages;
+
+import java.util.UUID;
+
+public record MetaDataMessage(
+        UUID workId,
+        String metaData,
+        MessageType type) implements Message {
+
+    public MetaDataMessage(UUID workId, String metaData) {
+        this(workId, metaData, MessageType.META);
+    }
+}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/PostRegistrationMessage.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/PostRegistrationMessage.java
similarity index 51%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/PostRegistrationMessage.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/PostRegistrationMessage.java
index 03fdd8e..bcf03c2 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/PostRegistrationMessage.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/PostRegistrationMessage.java
@@ -1,13 +1,8 @@
 package eu.fairkom.faircommons.common.rabbitmq.messages;
 
 import eu.fairkom.faircommons.common.models.views.WorkView;
-import lombok.Builder;
-import lombok.Value;
 
 import java.io.Serializable;
 
-@Builder
-@Value
-public class PostRegistrationMessage implements Serializable {
-    WorkView work;
+public record PostRegistrationMessage(WorkView work) implements Serializable {
 }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/StatusEvent.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/StatusEvent.java
new file mode 100644
index 0000000..92492a5
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/StatusEvent.java
@@ -0,0 +1,15 @@
+package eu.fairkom.faircommons.common.rabbitmq.messages;
+
+import eu.fairkom.faircommons.common.models.views.WorkStatusView;
+
+import java.util.UUID;
+
+public record StatusEvent(
+        UUID workId,
+        WorkStatusView status,
+        MessageType type) implements Message {
+
+    public StatusEvent(UUID workId, WorkStatusView status) {
+        this(workId, status, MessageType.SUCCESS);
+    }
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/WorkFileMessage.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/WorkFileMessage.java
new file mode 100644
index 0000000..3cc0c7d
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/rabbitmq/messages/WorkFileMessage.java
@@ -0,0 +1,17 @@
+package eu.fairkom.faircommons.common.rabbitmq.messages;
+
+import eu.fairkom.faircommons.common.models.views.WorkFileView;
+
+import java.util.UUID;
+
+
+public record WorkFileMessage(
+        UUID workId,
+        WorkFileView workFile,
+        String userId,
+        MessageType type) implements Message {
+
+    public WorkFileMessage(UUID workId, WorkFileView workFile, String userId) {
+        this(workId, workFile, userId, MessageType.FILE);
+    }
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/ActuatorAutoConfigurer.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/ActuatorAutoConfigurer.java
index b7d284c..ee7cc07 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/ActuatorAutoConfigurer.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/ActuatorAutoConfigurer.java
@@ -1,5 +1,8 @@
 package eu.fairkom.faircommons.common.security;
 
+import eu.fairkom.faircommons.common.security.models.ActuatorProperties;
+import eu.fairkom.faircommons.common.security.models.ConfigurerOrders;
+import eu.fairkom.faircommons.common.security.models.WebSecurityProperties;
 import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
@@ -51,8 +54,8 @@ public class ActuatorAutoConfigurer {
 
     public UserDetailsService userDetailsService() {
         var encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
-        var user = User.withUsername(actuatorProperties.getUsername())
-                .password(encoder.encode(actuatorProperties.getPassword()))
+        var user = User.withUsername(actuatorProperties.username())
+                .password(encoder.encode(actuatorProperties.password()))
                 .authorities(List.of())
                 .build();
 
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/ResourceServerAutoConfigurer.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/ResourceServerAutoConfigurer.java
index 312f05b..55dacbf 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/ResourceServerAutoConfigurer.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/ResourceServerAutoConfigurer.java
@@ -1,6 +1,9 @@
 package eu.fairkom.faircommons.common.security;
 
 
+import eu.fairkom.faircommons.common.security.models.ConfigurerOrders;
+import eu.fairkom.faircommons.common.security.models.ResourceProperties;
+import eu.fairkom.faircommons.common.security.models.WebSecurityProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -63,9 +66,9 @@ public class ResourceServerAutoConfigurer {
     }
 
     private void configureDefaultAuth(AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry authorize) {
-        if (resourceProperties.getDefaultScope() != null) {
-            logger.trace("Securing all remaining requests with {}", resourceProperties.getDefaultScope());
-            authorize.anyRequest().hasAuthority("SCOPE_" + resourceProperties.getDefaultScope());
+        if (resourceProperties.defaultScope() != null) {
+            logger.trace("Securing all remaining requests with {}", resourceProperties.defaultScope());
+            authorize.anyRequest().hasAuthority("SCOPE_" + resourceProperties.defaultScope());
         } else {
             logger.info("Securing all remaining requests with authenticated user.");
             authorize.anyRequest().authenticated();
@@ -73,10 +76,11 @@ public class ResourceServerAutoConfigurer {
     }
 
     private void configureCustomAuth(AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry authorize) {
-        resourceProperties.getPaths().forEach(path -> {
+        resourceProperties.paths().forEach(securedPath -> {
             logger.info("Securing {} requests to {} with {}",
-                    path.getMethods(), path.getPath(), path.getScopes());
-            authorize.requestMatchers(matcher(path)).hasAnyAuthority(asAuthorities(path.getScopes()))
+                    securedPath.methods(), securedPath.path(), securedPath.scopes());
+            authorize.requestMatchers(matcher(securedPath))
+                    .hasAnyAuthority(asAuthorities(securedPath.scopes()))
                     .anyRequest().authenticated();
         });
     }
@@ -88,8 +92,8 @@ public class ResourceServerAutoConfigurer {
     }
 
     private RequestMatcher matcher(ResourceProperties.SecuredPath securedPath) {
-        return securedPath.getMethods().stream()
-                .map(method -> new AntPathRequestMatcher(securedPath.getPath(), method.name()))
+        return securedPath.methods().stream()
+                .map(method -> new AntPathRequestMatcher(securedPath.path(), method.name()))
                 .collect(collectingAndThen(Collectors.<RequestMatcher>toList(), OrRequestMatcher::new));
     }
 }
\ No newline at end of file
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/UnsecuredAutoConfigurer.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/UnsecuredAutoConfigurer.java
index 02eb1f5..7d3ec5b 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/UnsecuredAutoConfigurer.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/UnsecuredAutoConfigurer.java
@@ -1,5 +1,8 @@
 package eu.fairkom.faircommons.common.security;
 
+import eu.fairkom.faircommons.common.security.models.ConfigurerOrders;
+import eu.fairkom.faircommons.common.security.models.UnsecuredProperties;
+import eu.fairkom.faircommons.common.security.models.WebSecurityProperties;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -45,7 +48,7 @@ public class UnsecuredAutoConfigurer {
     }
 
     private RequestMatcher buildUnsecuredRequestMatcher() {
-        return unsecuredProperties.getPaths().stream()
+        return unsecuredProperties.paths().stream()
                 .map(AntPathRequestMatcher::new)
                 .collect(collectingAndThen(Collectors.<RequestMatcher>toList(), OrRequestMatcher::new));
     }
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/ActuatorProperties.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/ActuatorProperties.java
similarity index 78%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/ActuatorProperties.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/ActuatorProperties.java
index 64e1486..a8815c2 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/ActuatorProperties.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/ActuatorProperties.java
@@ -1,17 +1,15 @@
-package eu.fairkom.faircommons.common.security;
+package eu.fairkom.faircommons.common.security.models;
 
-import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.util.Assert;
 import org.springframework.validation.Errors;
 import org.springframework.validation.Validator;
 
-@Data
 @ConfigurationProperties(ActuatorProperties.PREFIX)
-public class ActuatorProperties implements Validator {
+public record ActuatorProperties(
+        String username,
+        String password) implements Validator {
     public static final String PREFIX = WebSecurityProperties.PREFIX + ".actuator";
-    private String username;
-    private String password;
 
     @Override
     public boolean supports(Class<?> clazz) {
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/ConfigurerOrders.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/ConfigurerOrders.java
similarity index 53%
rename from faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/ConfigurerOrders.java
rename to faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/ConfigurerOrders.java
index 12bc019..5c7b881 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/ConfigurerOrders.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/ConfigurerOrders.java
@@ -1,10 +1,10 @@
-package eu.fairkom.faircommons.common.security;
+package eu.fairkom.faircommons.common.security.models;
 
-import lombok.experimental.UtilityClass;
+public final class ConfigurerOrders {
 
-@UtilityClass
-public class ConfigurerOrders {
     public static final int UNSECURED = 0;
     public static final int ACTUATOR = UNSECURED + 1;
     public static final int RESOURCE = ACTUATOR + 1;
+    private ConfigurerOrders() {
+    }
 }
\ No newline at end of file
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/ResourceProperties.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/ResourceProperties.java
new file mode 100644
index 0000000..575b403
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/ResourceProperties.java
@@ -0,0 +1,30 @@
+package eu.fairkom.faircommons.common.security.models;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.bind.DefaultValue;
+import org.springframework.http.HttpMethod;
+
+import java.util.List;
+import java.util.Set;
+
+@ConfigurationProperties(ResourceProperties.PREFIX)
+public record ResourceProperties(
+        @DefaultValue List<SecuredPath> paths,
+        String defaultScope) {
+    public static final String PREFIX = WebSecurityProperties.PREFIX + ".resource";
+
+    public record SecuredPath(
+            String path,
+            List<String> scopes,
+            @DefaultValue({
+                    "GET",
+                    "HEAD",
+                    "POST",
+                    "PUT",
+                    "PATCH",
+                    "DELETE",
+                    "OPTIONS",
+                    "TRACE"}) Set<HttpMethod> methods
+    ) {
+    }
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/UnsecuredProperties.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/UnsecuredProperties.java
new file mode 100644
index 0000000..c5ddceb
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/UnsecuredProperties.java
@@ -0,0 +1,15 @@
+package eu.fairkom.faircommons.common.security.models;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.bind.DefaultValue;
+
+import java.util.List;
+
+@ConfigurationProperties(UnsecuredProperties.PREFIX)
+public record UnsecuredProperties(
+        @DefaultValue({"/swagger-ui.html",
+                "/swagger-ui/**",
+                "/v3/api-docs/**",
+                "/actuator/health"}) List<String> paths) {
+    public static final String PREFIX = WebSecurityProperties.PREFIX + ".unsecured";
+}
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/WebSecurityProperties.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/WebSecurityProperties.java
new file mode 100644
index 0000000..5b40a2d
--- /dev/null
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/security/models/WebSecurityProperties.java
@@ -0,0 +1,9 @@
+package eu.fairkom.faircommons.common.security.models;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.bind.DefaultValue;
+
+@ConfigurationProperties(WebSecurityProperties.PREFIX)
+public record WebSecurityProperties(@DefaultValue("true") boolean enabled) {
+    public static final String PREFIX = "security.web";
+}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/minio/models/MinioConfigurationProperties.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/minio/models/MinioConfigurationProperties.java
deleted file mode 100644
index ce5ef44..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/minio/models/MinioConfigurationProperties.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package eu.fairkom.faircommons.common.minio.models;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-@Data
-@ConfigurationProperties("minio")
-public class MinioConfigurationProperties {
-    private String url;
-    private String accessKey;
-    private String secretKey;
-    private boolean secure;
-    private String bucketPrefix;
-    private String region;
-
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/DownloadFileResponse.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/DownloadFileResponse.java
deleted file mode 100644
index 427ab6f..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/DownloadFileResponse.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package eu.fairkom.faircommons.common.models;
-
-import lombok.Builder;
-import lombok.Value;
-import org.springframework.core.io.InputStreamResource;
-
-@Value
-@Builder
-public class DownloadFileResponse {
-    InputStreamResource inputStreamResource;
-    String filename;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/WorkFilter.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/WorkFilter.java
deleted file mode 100644
index ce58627..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/WorkFilter.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package eu.fairkom.faircommons.common.models;
-
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.util.List;
-
-@Value
-@Builder
-@Jacksonized
-public class WorkFilter {
-    WorkType type;
-    String title;
-    List<String> tags;
-    String licenseIdentifier;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Author.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Author.java
deleted file mode 100644
index 541b7a5..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Author.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package eu.fairkom.faircommons.common.models.entities;
-
-import jakarta.persistence.Entity;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.Id;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-import org.hibernate.annotations.UuidGenerator;
-
-import java.util.UUID;
-
-@Getter
-@Setter
-@Entity
-@NoArgsConstructor
-public class Author extends Identifiable<UUID> {
-    @Id
-    @GeneratedValue
-    @UuidGenerator
-    private UUID id;
-    private String firstName;
-    private String lastName;
-    private String email;
-    private String pseudonym;
-    private String url;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Contributor.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Contributor.java
deleted file mode 100644
index 86dc5d8..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Contributor.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package eu.fairkom.faircommons.common.models.entities;
-
-import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-import org.hibernate.annotations.UuidGenerator;
-
-import java.util.UUID;
-
-@Getter
-@Setter
-@Entity
-@NoArgsConstructor
-public class Contributor extends Identifiable<UUID> {
-    @Id
-    @GeneratedValue
-    @UuidGenerator
-    private UUID id;
-
-    @OneToOne(mappedBy = "creator", fetch = FetchType.LAZY)
-    private Work workAsCreator;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "work_as_contributor_id")
-    private Work workAsContributor;
-
-    @ManyToOne(cascade = CascadeType.ALL)
-    @JoinColumn(name = "author_id", nullable = false)
-    private Author author;
-    private Integer percentage;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/HashCode.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/HashCode.java
deleted file mode 100644
index 3f3f520..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/HashCode.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package eu.fairkom.faircommons.common.models.entities.embedded;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Embeddable;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@NoArgsConstructor
-@Embeddable
-public class HashCode {
-    @Column(updatable = false)
-    private String algorithm;
-
-    @Column(updatable = false)
-    private String hexValue;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/License.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/License.java
deleted file mode 100644
index 3d56437..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/License.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package eu.fairkom.faircommons.common.models.entities.embedded;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Embeddable;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@NoArgsConstructor
-@Embeddable
-public class License {
-    @Column(updatable = false)
-    private String identifier; //immutable SPDX
-    private String addons;
-    private String dual;
-    private String dalicc;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/Revocation.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/Revocation.java
deleted file mode 100644
index 1ca5362..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/embedded/Revocation.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package eu.fairkom.faircommons.common.models.entities.embedded;
-
-import jakarta.persistence.Embeddable;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import java.time.ZonedDateTime;
-
-@Getter
-@Setter
-@NoArgsConstructor
-@Embeddable
-public class Revocation {
-    private ZonedDateTime date;
-    private String note;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/AuthorView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/AuthorView.java
deleted file mode 100644
index b052f6c..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/AuthorView.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import jakarta.validation.constraints.Email;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.util.UUID;
-
-@Value
-@Builder
-@Jacksonized
-public class AuthorView implements IdentifiableView<UUID> {
-    UUID id;
-    @Size(max = 255) @NotBlank String firstName;
-    @Size(max = 255) @NotBlank String lastName;
-    @Size(max = 255) @Email String email;
-    @Size(max = 255) @NotBlank String pseudonym;
-    @Size(max = 255) String url;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/ContributorView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/ContributorView.java
deleted file mode 100644
index 291c3a4..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/ContributorView.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotNull;
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.util.UUID;
-
-@Value
-@Builder
-@Jacksonized
-public class ContributorView implements IdentifiableView<UUID> {
-    UUID id;
-    @Valid AuthorView author;
-    @NotNull Integer percentage;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/FileUploadView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/FileUploadView.java
deleted file mode 100644
index 634c34b..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/FileUploadView.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-@Value
-@Builder
-@Jacksonized
-public class FileUploadView {
-    String prefix;
-    String filename;
-    String url;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/HashCodeView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/HashCodeView.java
deleted file mode 100644
index 8491955..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/HashCodeView.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.io.Serializable;
-
-@Value
-@Builder
-@Jacksonized
-public class HashCodeView implements Serializable {
-    String algorithm;
-    String hexValue;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/IpfsEntryView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/IpfsEntryView.java
deleted file mode 100644
index 0d69d62..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/IpfsEntryView.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.io.Serializable;
-
-@Value
-@Builder
-@Jacksonized
-public class IpfsEntryView implements Serializable {
-    String cid;
-    String path;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/LicenseView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/LicenseView.java
deleted file mode 100644
index 2e126d1..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/LicenseView.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.Size;
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.io.Serializable;
-
-@Value
-@Builder
-@Jacksonized
-public class LicenseView implements Serializable {
-    @Size(max = 255) @NotEmpty String identifier; //immutable SPDX
-    @Size(max = 255) String addons;
-    @Size(max = 255) String dual;
-    @Size(max = 255) String dalicc;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/MetaDataView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/MetaDataView.java
deleted file mode 100644
index ae81d80..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/MetaDataView.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import eu.fairkom.faircommons.common.models.entities.embedded.HashCode;
-import eu.fairkom.faircommons.common.models.entities.embedded.IpfsEntry;
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.io.Serializable;
-import java.time.ZonedDateTime;
-import java.util.UUID;
-
-//all attributes immutable
-
-@Value
-@Builder
-@Jacksonized
-public class MetaDataView implements Serializable {
-    UUID workId;
-    String title;
-    String description;
-    ZonedDateTime creationDate;
-    ZonedDateTime registrationDate;
-    String registrar;
-    WorkFileView workFile;
-    HashCode hashFile;
-    HashCode hashMeta;
-    IpfsEntry ipfsFile;
-    IpfsEntry ipfsMeta;
-    String licenseIdentifier;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicAuthorView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicAuthorView.java
deleted file mode 100644
index 98fa5d0..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicAuthorView.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-@Value
-@Builder
-@Jacksonized
-public class PublicAuthorView {
-    String pseudonym;
-    String url;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicContributorView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicContributorView.java
deleted file mode 100644
index 8e22591..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicContributorView.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-@Value
-@Builder
-@Jacksonized
-public class PublicContributorView {
-    PublicAuthorView author;
-    Integer percentage;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicWorkView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicWorkView.java
deleted file mode 100644
index 8a4b219..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/PublicWorkView.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import eu.fairkom.faircommons.common.models.WorkType;
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.time.ZonedDateTime;
-import java.util.List;
-
-@Value
-@Builder
-@Jacksonized
-public class PublicWorkView {
-    WorkType type;
-    String title;
-    String description;
-    List<String> tags;
-    String registrar;
-    ZonedDateTime registrationDate;
-    ZonedDateTime creationDate;
-    String publisher;
-    String identifier;
-    String language;
-    PublicContributorView creator;
-    LicenseView license;
-    String grid;
-    String filename;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/RevocationView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/RevocationView.java
deleted file mode 100644
index 06027e6..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/RevocationView.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.io.Serializable;
-import java.time.ZonedDateTime;
-
-@Value
-@Builder
-@Jacksonized
-public class RevocationView implements Serializable {
-    ZonedDateTime date;
-    String note;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/TagView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/TagView.java
deleted file mode 100644
index dd05dd2..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/TagView.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-@Value
-@Builder
-@Jacksonized
-public class TagView implements IdentifiableView<Long> {
-    Long id;
-    String name;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkCreateView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkCreateView.java
deleted file mode 100644
index 40c7cfb..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkCreateView.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import eu.fairkom.faircommons.common.models.StorageOption;
-import eu.fairkom.faircommons.common.models.WorkType;
-import eu.fairkom.faircommons.common.models.WorkVisibility;
-import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Pattern;
-import jakarta.validation.constraints.Size;
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.time.ZonedDateTime;
-import java.util.List;
-
-@Value
-@Builder
-@Jacksonized
-public class WorkCreateView {
-    @NotNull WorkType type;
-    @Size(max = 100) @NotBlank String title; //immutable
-    @Size(max = 2000) @NotBlank String description; //immutable
-    List<String> tags;
-    @Size(max = 2) String language;
-    ZonedDateTime creationDate;
-    @Size(max = 36) @NotBlank String registrar; //immutable, keycloakUserId
-    @Valid ContributorView creator;
-    @Valid List<ContributorView> contributors;
-    @Size(max = 255) String publisher;
-    @Size(max = 255) String identifier;
-    @Valid WorkFileView workFile; //immutable
-    @NotNull WorkVisibility visibility;
-    @Builder.Default
-    List<StorageOption> storageOptions = List.of(StorageOption.FAIRREGISTER_FILE_SYSTEM);
-    @Valid LicenseView license;
-    @Pattern(regexp = "RC-(01|FAREG)-(LIZ\\d{10}|\\d{10})-([A-Z]|\\d)(?=$)")
-    String grid; //TODO remove after migration
-    ZonedDateTime registrationDate; //TODO remove after migration
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkFileView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkFileView.java
deleted file mode 100644
index abf04ff..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkFileView.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.Size;
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.io.Serializable;
-
-@Value
-@Builder
-@Jacksonized
-public class WorkFileView implements Serializable {
-    @Size(max = 255) @NotEmpty String prefix;
-    @Size(max = 255) @NotEmpty String filename;
-
-    @JsonIgnore
-    public String getFilenameWithPrefix() {
-        return prefix + "/" + filename;
-    }
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkStatusView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkStatusView.java
deleted file mode 100644
index b050e3f..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkStatusView.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import eu.fairkom.faircommons.common.models.entities.WorkStatus;
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.io.Serializable;
-import java.time.ZonedDateTime;
-import java.util.UUID;
-
-@Value
-@Builder
-@Jacksonized
-public class WorkStatusView implements Serializable {
-    UUID workId;
-    ZonedDateTime created;
-    HashCodeView hashCode;
-    IpfsEntryView ipfsEntry;
-    String errorMessage;
-    WorkStatus.WorkStatusType type;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkView.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkView.java
deleted file mode 100644
index 544d828..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/views/WorkView.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package eu.fairkom.faircommons.common.models.views;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import eu.fairkom.faircommons.common.models.StorageOption;
-import eu.fairkom.faircommons.common.models.WorkType;
-import eu.fairkom.faircommons.common.models.WorkVisibility;
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.time.ZonedDateTime;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-
-@Value
-@Builder
-@Jacksonized
-public class WorkView implements IdentifiableView<UUID> {
-    UUID id;
-    WorkType type;
-    String title;
-    String description;
-    String filename;
-    ZonedDateTime registrationDate;
-    ZonedDateTime creationDate;
-    String status;
-    String language;
-    String identifier;
-    List<String> tags;
-    LicenseView license;
-    ContributorView creator;
-    List<ContributorView> contributors;
-    String publisher;
-    IpfsEntryView ipfsFile;
-    IpfsEntryView ipfsMeta;
-    HashCodeView hashFile;
-    HashCodeView hashMeta;
-    @JsonIgnore
-    Set<StorageOption> storageOptions;
-    @JsonIgnore
-    WorkFileView workFile;
-    String registrar;
-    WorkVisibility visibility;
-    RevocationView revocation;
-    ZonedDateTime publishingDate;
-    String grid;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/Message.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/Message.java
deleted file mode 100644
index 0c2438c..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/Message.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package eu.fairkom.faircommons.common.rabbitmq.messages;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.io.Serializable;
-import java.util.UUID;
-
-@Getter
-@AllArgsConstructor
-public abstract class Message implements Serializable {
-    MessageType type;
-    UUID workId;
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/MetaDataMessage.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/MetaDataMessage.java
deleted file mode 100644
index f6726bf..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/MetaDataMessage.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package eu.fairkom.faircommons.common.rabbitmq.messages;
-
-import lombok.Builder;
-import lombok.Getter;
-
-import java.util.UUID;
-
-@Getter
-public class MetaDataMessage extends Message {
-    private final String metaData;
-
-    @Builder
-    public MetaDataMessage(UUID workId, String metaData) {
-        super(MessageType.META, workId);
-        this.metaData = metaData;
-    }
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/StatusEvent.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/StatusEvent.java
deleted file mode 100644
index da27920..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/StatusEvent.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package eu.fairkom.faircommons.common.rabbitmq.messages;
-
-import eu.fairkom.faircommons.common.models.views.WorkStatusView;
-import lombok.Builder;
-import lombok.Getter;
-
-import java.util.UUID;
-
-@Getter
-public class StatusEvent extends Message {
-    private final WorkStatusView status;
-
-    @Builder
-    public StatusEvent(UUID workId, WorkStatusView status) {
-        super(MessageType.SUCCESS, workId);
-        this.status = status;
-    }
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/WorkFileMessage.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/WorkFileMessage.java
deleted file mode 100644
index 101f741..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/rabbitmq/messages/WorkFileMessage.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package eu.fairkom.faircommons.common.rabbitmq.messages;
-
-import eu.fairkom.faircommons.common.models.views.WorkFileView;
-import lombok.Builder;
-import lombok.Getter;
-
-import java.util.UUID;
-
-@Getter
-public class WorkFileMessage extends Message {
-    private final WorkFileView workFile;
-    private final String userId;
-
-    @Builder
-    public WorkFileMessage(UUID workId, WorkFileView workFile, String userId) {
-        super(MessageType.FILE, workId);
-        this.workFile = workFile;
-        this.userId = userId;
-    }
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/ResourceProperties.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/ResourceProperties.java
deleted file mode 100644
index 9c85d25..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/ResourceProperties.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package eu.fairkom.faircommons.common.security;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.http.HttpMethod;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-@Data
-@ConfigurationProperties(ResourceProperties.PREFIX)
-public class ResourceProperties {
-    public static final String PREFIX = WebSecurityProperties.PREFIX + ".resource";
-    private List<SecuredPath> paths = List.of();
-    private String defaultScope;
-
-    @Data
-    public static class SecuredPath {
-        private String path;
-        private List<String> scopes;
-        private Set<HttpMethod> methods = new HashSet<>(Arrays.asList(HttpMethod.values()));
-    }
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/UnsecuredProperties.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/UnsecuredProperties.java
deleted file mode 100644
index 1398ee5..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/UnsecuredProperties.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package eu.fairkom.faircommons.common.security;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-import java.util.List;
-
-@Data
-@ConfigurationProperties(UnsecuredProperties.PREFIX)
-public class UnsecuredProperties {
-    public static final String PREFIX = WebSecurityProperties.PREFIX + ".unsecured";
-
-    private List<String> paths = List.of(
-            "/swagger-ui.html",
-            "/swagger-ui/**",
-            "/v3/api-docs/**",
-            "/actuator/health"
-    );
-}
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/WebSecurityProperties.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/WebSecurityProperties.java
deleted file mode 100644
index 695424e..0000000
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/security/WebSecurityProperties.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package eu.fairkom.faircommons.common.security;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-@Data
-@ConfigurationProperties(WebSecurityProperties.PREFIX)
-public class WebSecurityProperties {
-    public static final String PREFIX = "security.web";
-    private boolean enabled = true;
-}
diff --git a/faircommons-services/hashing-service/pom.xml b/faircommons-services/hashing-service/pom.xml
index 36e1370..9f4a877 100644
--- a/faircommons-services/hashing-service/pom.xml
+++ b/faircommons-services/hashing-service/pom.xml
@@ -20,8 +20,8 @@
     </dependencies>
 
     <properties>
-        <maven.compiler.source>17</maven.compiler.source>
-        <maven.compiler.target>17</maven.compiler.target>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
     </properties>
 
     <build>
@@ -29,14 +29,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>
-                            <groupId>org.projectlombok</groupId>
-                            <artifactId>lombok</artifactId>
-                        </exclude>
-                    </excludes>
-                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/faircommons-services/hashing-service/src/main/java/eu/fairkom/faircommons/hashing_service/listener/HashingServiceListener.java b/faircommons-services/hashing-service/src/main/java/eu/fairkom/faircommons/hashing_service/listener/HashingServiceListener.java
index c7a462e..1c076d5 100644
--- a/faircommons-services/hashing-service/src/main/java/eu/fairkom/faircommons/hashing_service/listener/HashingServiceListener.java
+++ b/faircommons-services/hashing-service/src/main/java/eu/fairkom/faircommons/hashing_service/listener/HashingServiceListener.java
@@ -26,18 +26,18 @@ public class HashingServiceListener implements RabbitMqListener<Message> {
     @Override
     public void receive(Message message) {
         try {
-            logger.info("Received message of type: {} for work ID: {}", message.getType(), message.getWorkId());
-            switch (message.getType()) {
+            logger.info("Received message of type: {} for work ID: {}", message.type(), message.workId());
+            switch (message.type()) {
                 case FILE -> messageHandler.handleWorkFileMessage((WorkFileMessage) message);
                 case META -> messageHandler.handleMetaDataMessage((MetaDataMessage) message);
                 default -> logger.error("Unknown message type.");
             }
         } catch (MinioException e) {
-            logger.error("Could not download work file for work ID: {}", message.getWorkId(), e);
-            messageHandler.handleError(message.getWorkId(), e);
+            logger.error("Could not download work file for work ID: {}", message.workId(), e);
+            messageHandler.handleError(message.workId(), e);
         } catch (Throwable e) {
-            logger.error("Unexpected error during hashing for work ID: {}", message.getWorkId(), e);
-            messageHandler.handleError(message.getWorkId(), e);
+            logger.error("Unexpected error during hashing for work ID: {}", message.workId(), e);
+            messageHandler.handleError(message.workId(), e);
         }
     }
 }
diff --git a/faircommons-services/hashing-service/src/main/java/eu/fairkom/faircommons/hashing_service/service/HashingServiceMessageHandler.java b/faircommons-services/hashing-service/src/main/java/eu/fairkom/faircommons/hashing_service/service/HashingServiceMessageHandler.java
index 850547f..e571b23 100644
--- a/faircommons-services/hashing-service/src/main/java/eu/fairkom/faircommons/hashing_service/service/HashingServiceMessageHandler.java
+++ b/faircommons-services/hashing-service/src/main/java/eu/fairkom/faircommons/hashing_service/service/HashingServiceMessageHandler.java
@@ -2,6 +2,7 @@ package eu.fairkom.faircommons.hashing_service.service;
 
 import eu.fairkom.faircommons.common.minio.MinioService;
 import eu.fairkom.faircommons.common.models.entities.WorkStatus;
+import eu.fairkom.faircommons.common.models.views.HashCodeView;
 import eu.fairkom.faircommons.common.rabbitmq.MessageHandler;
 import eu.fairkom.faircommons.common.rabbitmq.messages.MetaDataMessage;
 import eu.fairkom.faircommons.common.rabbitmq.messages.WorkFileMessage;
@@ -35,19 +36,19 @@ public class HashingServiceMessageHandler extends MessageHandler {
 
     @Override
     public void handleWorkFileMessage(WorkFileMessage message) {
-        var userId = message.getUserId();
-        var filename = message.getWorkFile().getFilenameWithPrefix();
+        var userId = message.userId();
+        var filename = message.workFile().filenameWithPrefix();
 
         try (var workFileStream = minioService.downloadFile(userId, filename)) {
 
             var hashValue = hashingService.getChecksum(workFileStream, algorithm);
-            var hashCode = buildHashCodeView(algorithm, hashValue);
+            var hashCode = new HashCodeView(algorithm, hashValue);
 
-            logger.info("Work File hashing done. Sending success event for work ID {}", message.getWorkId());
-            sendStatusEvent(message.getWorkId(), hashCode,
+            logger.info("Work File hashing done. Sending success event for work ID {}", message.workId());
+            sendStatusEvent(message.workId(), hashCode,
                     WorkStatus.WorkStatusType.FILE_HASHING_DONE);
         } catch (IOException e) {
-            logger.error("Error while processing work file message with work ID {}: {}", message.getWorkId(),
+            logger.error("Error while processing work file message with work ID {}: {}", message.workId(),
                     e.getMessage(), e);
             throw new UncheckedIOException(e);
         }
@@ -55,16 +56,16 @@ public class HashingServiceMessageHandler extends MessageHandler {
 
     @Override
     public void handleMetaDataMessage(MetaDataMessage message) {
-        try (var metaDataStream = new ByteArrayInputStream(message.getMetaData().getBytes(StandardCharsets.UTF_8))) {
+        try (var metaDataStream = new ByteArrayInputStream(message.metaData().getBytes(StandardCharsets.UTF_8))) {
 
             var hashValue = hashingService.getChecksum(metaDataStream, algorithm);
-            var hashCode = buildHashCodeView(algorithm, hashValue);
+            var hashCode = new HashCodeView(algorithm, hashValue);
 
-            logger.info("Meta Data hashing done. Sending success event for work ID {}", message.getWorkId());
-            sendStatusEvent(message.getWorkId(),
+            logger.info("Meta Data hashing done. Sending success event for work ID {}", message.workId());
+            sendStatusEvent(message.workId(),
                     hashCode, WorkStatus.WorkStatusType.META_HASHING_DONE);
         } catch (IOException e) {
-            logger.error("Error while processing meta data message with work ID {}: {}", message.getWorkId(),
+            logger.error("Error while processing meta data message with work ID {}: {}", message.workId(),
                     e.getMessage(), e);
             throw new UncheckedIOException(e);
         }
diff --git a/faircommons-services/ipfs-service/pom.xml b/faircommons-services/ipfs-service/pom.xml
index 7e2b8da..76161ba 100644
--- a/faircommons-services/ipfs-service/pom.xml
+++ b/faircommons-services/ipfs-service/pom.xml
@@ -12,8 +12,8 @@
     <artifactId>ipfs-service</artifactId>
 
     <properties>
-        <maven.compiler.source>17</maven.compiler.source>
-        <maven.compiler.target>17</maven.compiler.target>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
     </properties>
 
     <dependencies>
@@ -42,14 +42,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>
-                            <groupId>org.projectlombok</groupId>
-                            <artifactId>lombok</artifactId>
-                        </exclude>
-                    </excludes>
-                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/listener/IpfsServiceListener.java b/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/listener/IpfsServiceListener.java
index 82ffe5e..80685b0 100644
--- a/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/listener/IpfsServiceListener.java
+++ b/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/listener/IpfsServiceListener.java
@@ -24,12 +24,12 @@ public class IpfsServiceListener implements RabbitMqListener<Message> {
 
     @Override
     public void receive(Message message) {
-        logger.info("Received message of type: {} for work ID: {}", message.getType(), message.getWorkId());
+        logger.info("Received message of type: {} for work ID: {}", message.type(), message.workId());
 
-        switch (message.getType()) {
+        switch (message.type()) {
             case FILE -> messageHandler.handleWorkFileMessage((WorkFileMessage) message);
             case META -> messageHandler.handleMetaDataMessage((MetaDataMessage) message);
-            default -> logger.error("Unknown message type: {}", message.getType());
+            default -> logger.error("Unknown message type: {}", message.type());
         }
     }
 }
diff --git a/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/models/IpfsAddView.java b/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/models/IpfsAddView.java
new file mode 100644
index 0000000..8c26c09
--- /dev/null
+++ b/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/models/IpfsAddView.java
@@ -0,0 +1,10 @@
+package eu.fairkom.faircommons.ipfs_service.models;
+
+import java.util.List;
+
+public record IpfsAddView(
+        String name,
+        String cid,
+        int size,
+        List<String> allocations) {
+}
diff --git a/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/service/IpfsClusterService.java b/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/service/IpfsClusterService.java
index f3e10fc..7707279 100644
--- a/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/service/IpfsClusterService.java
+++ b/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/service/IpfsClusterService.java
@@ -16,6 +16,7 @@ import org.springframework.web.client.RestClientException;
 import org.springframework.web.client.RestTemplate;
 
 import java.io.InputStream;
+import java.util.Objects;
 
 @Service
 @ConditionalOnProperty(prefix = "ipfs", name = "service", havingValue = "cluster")
@@ -32,6 +33,7 @@ public class IpfsClusterService implements IpfsService {
 
     /**
      * Uploads a file to IPFS.
+     *
      * @param inputStream The InputStream of the file to upload.
      * @return the CID of the uploaded file.
      */
@@ -47,8 +49,8 @@ public class IpfsClusterService implements IpfsService {
             var requestEntity = new HttpEntity<>(body, headers);
             var response = restTemplate.postForEntity(UPLOAD_ENDPOINT, requestEntity, IpfsAddView.class);
 
-            return response.getBody().getCid();
-        } catch (RestClientException e) {
+            return Objects.requireNonNull(response.getBody()).cid();
+        } catch (RestClientException | NullPointerException e) {
             logger.error("Error uploading file to IPFS", e);
             throw new RuntimeException("Failed to upload file to IPFS.", e);
         }
diff --git a/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/service/IpfsServiceMessageHandler.java b/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/service/IpfsServiceMessageHandler.java
index c4dbaec..c98c33f 100644
--- a/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/service/IpfsServiceMessageHandler.java
+++ b/faircommons-services/ipfs-service/src/main/java/eu/fairkom/faircommons/ipfs_service/service/IpfsServiceMessageHandler.java
@@ -2,6 +2,7 @@ package eu.fairkom.faircommons.ipfs_service.service;
 
 import eu.fairkom.faircommons.common.minio.MinioService;
 import eu.fairkom.faircommons.common.models.entities.WorkStatus;
+import eu.fairkom.faircommons.common.models.views.IpfsEntryView;
 import eu.fairkom.faircommons.common.rabbitmq.MessageHandler;
 import eu.fairkom.faircommons.common.rabbitmq.messages.MetaDataMessage;
 import eu.fairkom.faircommons.common.rabbitmq.messages.WorkFileMessage;
@@ -31,15 +32,15 @@ public class IpfsServiceMessageHandler extends MessageHandler {
 
     @Override
     public void handleWorkFileMessage(WorkFileMessage message) {
-        var userId = message.getUserId();
-        var filename = message.getWorkFile().getFilenameWithPrefix();
+        var userId = message.userId();
+        var filename = message.workFile().filenameWithPrefix();
 
         try (var workFileStream = minioService.downloadFile(userId, filename)) {
             var cid = ipfsService.uploadFile(workFileStream);
-            var ipfsEntry = buildIpfsEntryView("", cid);
+            var ipfsEntry = new IpfsEntryView(cid);
 
-            logger.info("Work File successfully saved to IPFS. Sending success event for work ID {}", message.getWorkId());
-            sendStatusEvent(message.getWorkId(), ipfsEntry, WorkStatus.WorkStatusType.FILE_IPFS_DONE);
+            logger.info("Work File successfully saved to IPFS. Sending success event for work ID {}", message.workId());
+            sendStatusEvent(message.workId(), ipfsEntry, WorkStatus.WorkStatusType.FILE_IPFS_DONE);
         } catch (IOException e) {
             throw new UncheckedIOException(e);
         }
@@ -47,13 +48,13 @@ public class IpfsServiceMessageHandler extends MessageHandler {
 
     @Override
     public void handleMetaDataMessage(MetaDataMessage message) {
-        try (var metaDataStream = new ByteArrayInputStream(message.getMetaData().getBytes(StandardCharsets.UTF_8))) {
+        try (var metaDataStream = new ByteArrayInputStream(message.metaData().getBytes(StandardCharsets.UTF_8))) {
 
             var cid = ipfsService.uploadFile(metaDataStream);
-            var ipfsEntry = buildIpfsEntryView("", cid);
+            var ipfsEntry = new IpfsEntryView(cid);
 
-            logger.info("Meta Data successfully saved to IPFS. Sending success event for work ID {}", message.getWorkId());
-            sendStatusEvent(message.getWorkId(), ipfsEntry, WorkStatus.WorkStatusType.META_IPFS_DONE);
+            logger.info("Meta Data successfully saved to IPFS. Sending success event for work ID {}", message.workId());
+            sendStatusEvent(message.workId(), ipfsEntry, WorkStatus.WorkStatusType.META_IPFS_DONE);
         } catch (IOException e) {
             throw new UncheckedIOException(e);
         }
diff --git a/faircommons-services/ipfs-service/src/main/lombok/eu/fairkom/faircommons/ipfs_service/models/IpfsAddView.java b/faircommons-services/ipfs-service/src/main/lombok/eu/fairkom/faircommons/ipfs_service/models/IpfsAddView.java
deleted file mode 100644
index 08c4f15..0000000
--- a/faircommons-services/ipfs-service/src/main/lombok/eu/fairkom/faircommons/ipfs_service/models/IpfsAddView.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package eu.fairkom.faircommons.ipfs_service.models;
-
-import lombok.Builder;
-import lombok.Value;
-import lombok.extern.jackson.Jacksonized;
-
-import java.util.List;
-
-@Value
-@Builder
-@Jacksonized
-public class IpfsAddView {
-    String name;
-    String cid;
-    int size;
-    List<String> allocations;
-}
diff --git a/faircommons-services/pom.xml b/faircommons-services/pom.xml
index 59e758f..8bf7ff6 100644
--- a/faircommons-services/pom.xml
+++ b/faircommons-services/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>3.1.2</version>
+        <version>3.1.4</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
 
@@ -23,13 +23,11 @@
     </modules>
 
     <properties>
-        <java.version>17</java.version>
-        <mapstruct.version>1.5.3.Final</mapstruct.version>
-        <lombok-maven.version>1.18.20.0</lombok-maven.version>
-        <lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
-        <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
-        <minio.version>8.5.2</minio.version>
-        <hibernate.version>6.2.0.Final</hibernate.version>
+        <java.version>21</java.version>
+        <mapstruct.version>1.5.5.Final</mapstruct.version>
+        <springdoc-openapi.version>2.2.0</springdoc-openapi.version>
+        <minio.version>8.5.6</minio.version>
+        <hibernate.version>6.3.1.Final</hibernate.version>
     </properties>
 
     <dependencies>
@@ -58,12 +56,6 @@
             <artifactId>spring-security-oauth2-jose</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-configuration-processor</artifactId>
@@ -108,13 +100,6 @@
             <version>${mapstruct.version}</version>
         </dependency>
 
-        <!-- Compat library for lombok <-> mapstruct -->
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok-mapstruct-binding</artifactId>
-            <version>${lombok-mapstruct-binding.version}</version>
-        </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
@@ -133,50 +118,4 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
-
-    <build>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.projectlombok</groupId>
-                    <artifactId>lombok-maven-plugin</artifactId>
-                    <version>${lombok-maven.version}</version>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-        <plugins>
-            <plugin>
-                <groupId>org.projectlombok</groupId>
-                <artifactId>lombok-maven-plugin</artifactId>
-                <version>${lombok-maven.version}</version>
-            </plugin>
-        </plugins>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>delombok</id>
-            <activation>
-                <file>
-                    <exists>src/main/lombok</exists>
-                </file>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <artifactId>lombok-maven-plugin</artifactId>
-                        <groupId>org.projectlombok</groupId>
-                        <executions>
-                            <execution>
-                                <id>delombok</id>
-                                <goals>
-                                    <goal>delombok</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
 </project>
diff --git a/faircommons-services/post-registration-service/pom.xml b/faircommons-services/post-registration-service/pom.xml
index fa35175..4fe5ad1 100644
--- a/faircommons-services/post-registration-service/pom.xml
+++ b/faircommons-services/post-registration-service/pom.xml
@@ -35,8 +35,8 @@
     </dependencies>
 
     <properties>
-        <maven.compiler.source>17</maven.compiler.source>
-        <maven.compiler.target>17</maven.compiler.target>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 
@@ -45,14 +45,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>
-                            <groupId>org.projectlombok</groupId>
-                            <artifactId>lombok</artifactId>
-                        </exclude>
-                    </excludes>
-                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/faircommons-services/post-registration-service/src/main/java/eu/fairkom/faircommons/post_registration/listener/PostRegistrationListener.java b/faircommons-services/post-registration-service/src/main/java/eu/fairkom/faircommons/post_registration/listener/PostRegistrationListener.java
index a4eaffb..c4c0180 100644
--- a/faircommons-services/post-registration-service/src/main/java/eu/fairkom/faircommons/post_registration/listener/PostRegistrationListener.java
+++ b/faircommons-services/post-registration-service/src/main/java/eu/fairkom/faircommons/post_registration/listener/PostRegistrationListener.java
@@ -23,10 +23,10 @@ public class PostRegistrationListener implements RabbitMqListener<PostRegistrati
 
     @Override
     public void receive(PostRegistrationMessage message) {
-        logger.info("Received message for work ID: {}", message.getWork().getId());
-        var work = message.getWork();
+        logger.info("Received message for work ID: {}", message.work().id());
+        var work = message.work();
 
-        if (postRegistrationService.isOwnStorageOptionPresent(work.getStorageOptions())) {
+        if (postRegistrationService.isOwnStorageOptionPresent(work.storageOptions())) {
             postRegistrationService.removeWorkFile(work);
         }
 
diff --git a/faircommons-services/post-registration-service/src/main/java/eu/fairkom/faircommons/post_registration/service/PostRegistrationService.java b/faircommons-services/post-registration-service/src/main/java/eu/fairkom/faircommons/post_registration/service/PostRegistrationService.java
index 70cfccb..992d142 100644
--- a/faircommons-services/post-registration-service/src/main/java/eu/fairkom/faircommons/post_registration/service/PostRegistrationService.java
+++ b/faircommons-services/post-registration-service/src/main/java/eu/fairkom/faircommons/post_registration/service/PostRegistrationService.java
@@ -19,7 +19,7 @@ public class PostRegistrationService {
     }
 
     public void removeWorkFile(WorkView work) {
-        minioService.removeFile(work.getRegistrar(), work.getWorkFile().getFilenameWithPrefix());
+        minioService.removeFile(work.registrar(), work.workFile().filenameWithPrefix());
     }
 
     public boolean isOwnStorageOptionPresent(Set<StorageOption> storageOptions) {
@@ -29,6 +29,6 @@ public class PostRegistrationService {
 
     public void generateRegistrationCertificate(WorkView work) {
         var certificate = registrationCertificateService.generateCertificate(work);
-        minioService.uploadRegistrationCertificate(work.getRegistrar(), work.getWorkFile().getPrefix(), certificate);
+        minioService.uploadRegistrationCertificate(work.registrar(), work.workFile().prefix(), certificate);
     }
 }
-- 
GitLab