From 3083a73627a42dfcb606f99c89ec9aa79c4230fe Mon Sep 17 00:00:00 2001 From: "k.triantafyllou" Date: Fri, 14 Jul 2023 18:49:13 +0300 Subject: [PATCH] Add new fields in personal info and services. Add migration script --- scripts/updates/2023-06-21.sql | 12 +++--- scripts/updates/2023-07-13.sql | 6 +-- .../configuration/SwaggerConfig.java | 2 +- .../dnetlib/developers/dto/ServiceForm.java | 29 +++++++++++++++ .../developers/entities/PersonalInfo.java | 9 +++++ .../entities/RegisteredService.java | 37 ++++++++++++++++++- .../developers/services/APIService.java | 5 ++- .../developers/utils/StringListConverter.java | 28 ++++++++++++++ 8 files changed, 116 insertions(+), 12 deletions(-) create mode 100644 src/main/java/eu/dnetlib/developers/utils/StringListConverter.java diff --git a/scripts/updates/2023-06-21.sql b/scripts/updates/2023-06-21.sql index d99e700..565ddc5 100644 --- a/scripts/updates/2023-06-21.sql +++ b/scripts/updates/2023-06-21.sql @@ -1,13 +1,13 @@ -ALTER TABLE ONLY registered_service ADD COLUMN url character varying(255); +ALTER TABLE ONLY registered_service ADD COLUMN url character varying(255) NOT NULL DEFAULT ''; CREATE TABLE IF NOT EXISTS personal_info ( id character varying(255) NOT NULL, - affiliation character varying(255), - email character varying(255), - name character varying(255), - "position" character varying(255), - surname character varying(255) + affiliation character varying(255) NOT NULL, + email character varying(255) NOT NULL, + name character varying(255) NOT NULL, + "position" character varying(255) NOT NULL, + surname character varying(255) NOT NULL ); ALTER TABLE ONLY personal_info DROP CONSTRAINT IF EXISTS personal_info_pkey; diff --git a/scripts/updates/2023-07-13.sql b/scripts/updates/2023-07-13.sql index 8941095..39005bb 100644 --- a/scripts/updates/2023-07-13.sql +++ b/scripts/updates/2023-07-13.sql @@ -1,4 +1,4 @@ -ALTER TABLE ONLY personal_info ADD COLUMN affilation_type character varying(255); +ALTER TABLE ONLY personal_info ADD COLUMN affiliation_type character varying(255) NOT NULL; ALTER TABLE ONLY registered_service ADD COLUMN description character varying(255); -ALTER TABLE ONLY registered_service ADD COLUMN frequency character varying(255); -ALTER TABLE ONLY registered_service ADD COLUMN target text[]; +ALTER TABLE ONLY registered_service ADD COLUMN frequency character varying(255) NOT NULL DEFAULT ''; +ALTER TABLE ONLY registered_service ADD COLUMN target character varying(255) NOT NULL DEFAULT ''; diff --git a/src/main/java/eu/dnetlib/developers/configuration/SwaggerConfig.java b/src/main/java/eu/dnetlib/developers/configuration/SwaggerConfig.java index 176febf..494327a 100644 --- a/src/main/java/eu/dnetlib/developers/configuration/SwaggerConfig.java +++ b/src/main/java/eu/dnetlib/developers/configuration/SwaggerConfig.java @@ -37,7 +37,7 @@ public class SwaggerConfig extends WebMvcConfigurerAdapter { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() - .apis(RequestHandlerSelectors.basePackage("eu.dnetlib.clientmanagement.controllers")) + .apis(RequestHandlerSelectors.basePackage("eu.dnetlib.developers.controllers")) .paths(PathSelectors.any()) .build(); } diff --git a/src/main/java/eu/dnetlib/developers/dto/ServiceForm.java b/src/main/java/eu/dnetlib/developers/dto/ServiceForm.java index b8e3682..f247e60 100644 --- a/src/main/java/eu/dnetlib/developers/dto/ServiceForm.java +++ b/src/main/java/eu/dnetlib/developers/dto/ServiceForm.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import org.hibernate.validator.constraints.URL; +import java.util.List; + public class ServiceForm { @JsonProperty(required = true) private String name; @@ -17,6 +19,9 @@ public class ServiceForm { private String value; @JsonIgnore private Jwks jwks; + private String description; + private String frequency; + private List target; public ServiceForm() { } @@ -76,4 +81,28 @@ public class ServiceForm { public void setJwks(Jwks jwks) { this.jwks = jwks; } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getFrequency() { + return frequency; + } + + public void setFrequency(String frequency) { + this.frequency = frequency; + } + + public List getTarget() { + return target; + } + + public void setTarget(List target) { + this.target = target; + } } diff --git a/src/main/java/eu/dnetlib/developers/entities/PersonalInfo.java b/src/main/java/eu/dnetlib/developers/entities/PersonalInfo.java index e6bf4fd..c4601ea 100644 --- a/src/main/java/eu/dnetlib/developers/entities/PersonalInfo.java +++ b/src/main/java/eu/dnetlib/developers/entities/PersonalInfo.java @@ -12,6 +12,7 @@ public class PersonalInfo { String surname; String email; String affiliation; + String affiliationType; String position; public PersonalInfo() { @@ -57,6 +58,14 @@ public class PersonalInfo { this.affiliation = affiliation; } + public String getAffiliationType() { + return affiliationType; + } + + public void setAffiliationType(String affiliationType) { + this.affiliationType = affiliationType; + } + public String getPosition() { return position; } diff --git a/src/main/java/eu/dnetlib/developers/entities/RegisteredService.java b/src/main/java/eu/dnetlib/developers/entities/RegisteredService.java index fee051a..a809d3b 100644 --- a/src/main/java/eu/dnetlib/developers/entities/RegisteredService.java +++ b/src/main/java/eu/dnetlib/developers/entities/RegisteredService.java @@ -1,7 +1,11 @@ package eu.dnetlib.developers.entities; +import eu.dnetlib.developers.utils.StringListConverter; + import javax.persistence.*; +import java.util.Arrays; import java.util.Date; +import java.util.List; @Entity public class RegisteredService { @@ -17,15 +21,22 @@ public class RegisteredService { String registrationAccessToken; String keyType; String url; + String description; + String frequency; + @Convert(converter = StringListConverter.class) + private List target; public RegisteredService() { this.creationDate = new Date(); } - public RegisteredService(String owner, String name, String url, String keyType) { + public RegisteredService(String owner, String name, String url, String keyType, String description, String frequency, List target) { this.owner = owner; this.name = name; this.keyType = keyType; + this.description = description; + this.frequency = frequency; + this.target = target; this.creationDate = new Date(); } @@ -92,4 +103,28 @@ public class RegisteredService { public void setUrl(String url) { this.url = url; } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getFrequency() { + return frequency; + } + + public void setFrequency(String frequency) { + this.frequency = frequency; + } + + public List getTarget() { + return target; + } + + public void setTarget(List target) { + this.target = target; + } } diff --git a/src/main/java/eu/dnetlib/developers/services/APIService.java b/src/main/java/eu/dnetlib/developers/services/APIService.java index db41311..b8b224f 100644 --- a/src/main/java/eu/dnetlib/developers/services/APIService.java +++ b/src/main/java/eu/dnetlib/developers/services/APIService.java @@ -80,7 +80,7 @@ public class APIService { api.setService(service); api.setDetails(readService(service.getClientId(), service.getRegistrationAccessToken())); } else { - api.setService(new RegisteredService(authentication.getSub(), form.getName(), form.getUrl(), form.getKeyType())); + api.setService(new RegisteredService(authentication.getSub(), form.getName(), form.getUrl(), form.getKeyType(), form.getDescription(), form.getFrequency(), form.getTarget())); } String keyType = form.getKeyType(); if(keyType != null && keyType.equals("uri")) { @@ -111,6 +111,9 @@ public class APIService { } api.getService().setKeyType(form.getKeyType()); api.getService().setUrl(form.getUrl()); + api.getService().setDescription(form.getDescription()); + api.getService().setFrequency(form.getFrequency()); + api.getService().setTarget(form.getTarget()); api.getService().setName(request.getClientName()); api.getService().setClientId(response.getClientId()); api.getService().setRegistrationAccessToken(response.getRegistrationAccessToken()); diff --git a/src/main/java/eu/dnetlib/developers/utils/StringListConverter.java b/src/main/java/eu/dnetlib/developers/utils/StringListConverter.java new file mode 100644 index 0000000..5d63bed --- /dev/null +++ b/src/main/java/eu/dnetlib/developers/utils/StringListConverter.java @@ -0,0 +1,28 @@ +package eu.dnetlib.developers.utils; + +import javax.persistence.AttributeConverter; +import javax.persistence.Converter; +import java.util.Arrays; +import java.util.List; + +@Converter +public class StringListConverter implements AttributeConverter, String> { + private static final String ARRAY_DELIMITER = ","; + + @Override + public String convertToDatabaseColumn(List attribute) { + if (attribute == null || attribute.isEmpty()) { + return null; + } + return String.join(ARRAY_DELIMITER, attribute); + } + + @Override + public List convertToEntityAttribute(String dbData) { + if (dbData == null || dbData.isEmpty()) { + return null; + } + return Arrays.asList(dbData.split(ARRAY_DELIMITER)); + } +} +