From f1abe5eb7f08bd3d31a2d51478a51f69c5286e60 Mon Sep 17 00:00:00 2001
From: jbuechele <johannes@bujo.at>
Date: Wed, 3 May 2023 16:23:13 +0200
Subject: [PATCH] allow to set valid grids for migration, small fixes

---
 .../faircommons/api_service/service/WorkService.java       | 7 ++++++-
 .../eu/fairkom/faircommons/common/mappers/WorkMapper.java  | 1 -
 .../fairkom/faircommons/common/models/entities/Work.java   | 1 +
 .../faircommons/common/models/views/PublicWorkView.java    | 1 +
 .../faircommons/common/models/views/WorkCreateView.java    | 5 ++++-
 5 files changed, 12 insertions(+), 3 deletions(-)

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 9d2892b..333b788 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
@@ -116,7 +116,12 @@ public class WorkService {
 
         var workEntity = workMapper.toEntity(workMapper.toWorkView(view));
         workEntity.setTags(tags);
-        workEntity.setGrid(IdentifierGenerator.generateGlobalReleaseIdentifier());
+
+        if (view.getGrid() != null) {
+            workEntity.setGrid(view.getGrid());
+        } else {
+            workEntity.setGrid(IdentifierGenerator.generateGlobalReleaseIdentifier());
+        }
 
         return workEntity;
     }
diff --git a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/WorkMapper.java b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/WorkMapper.java
index e68527f..088e5b7 100644
--- a/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/WorkMapper.java
+++ b/faircommons-services/common/src/main/java/eu/fairkom/faircommons/common/mappers/WorkMapper.java
@@ -43,7 +43,6 @@ public abstract class WorkMapper extends BaseMapper<Work, WorkView, UUID> {
     @Mapping(target = "ipfsMeta", ignore = true)
     @Mapping(target = "status", ignore = true)
     @Mapping(target = "filename", ignore = true)
-    @Mapping(target = "grid", ignore = true)
     @Mapping(target = "tags", ignore = true)
     public abstract WorkView toWorkView(WorkCreateView workCreateView);
 
diff --git a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Work.java b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Work.java
index baa0a0e..e5de865 100644
--- a/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Work.java
+++ b/faircommons-services/common/src/main/lombok/eu/fairkom/faircommons/common/models/entities/Work.java
@@ -51,6 +51,7 @@ public class Work extends Identifiable<UUID> {
             inverseJoinColumns = @JoinColumn(name = "tag_id"))
     private List<Tag> tags = new ArrayList<>();
 
+    @Column(length = 2)
     private String language;
 
     private ZonedDateTime creationDate;
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
index c5ec09c..832da5f 100644
--- 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
@@ -20,6 +20,7 @@ public class PublicWorkView {
     ZonedDateTime registrationDate;
     String publisher;
     String identifier;
+    String language;
     PublicContributorView creator;
     LicenseView license;
     String grid;
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
index 62ca2b8..ca5bb6f 100644
--- 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
@@ -6,6 +6,7 @@ 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;
@@ -22,7 +23,7 @@ public class WorkCreateView {
     @Size(max = 100) @NotBlank String title; //immutable
     @Size(max = 2000) @NotBlank String description; //immutable
     List<String> tags;
-    @Size(max = 255) String language;
+    @Size(max = 2) String language;
     ZonedDateTime creationDate;
     @Size(max = 36) @NotBlank String registrar; //immutable, keycloakUserId
     @Valid ContributorView creator;
@@ -34,4 +35,6 @@ public class WorkCreateView {
     @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;
 }
-- 
GitLab