diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.java index ee1e076..aafbfa0 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.java @@ -5,11 +5,10 @@ */ package org.scientificcms.contenttypes.sciproject; -import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; import org.hibernate.envers.Audited; import org.libreccm.core.CcmObjects; +import org.libreccm.imexport.Exportable; import org.librecms.assets.ContactableEntity; import java.io.Serializable; @@ -33,11 +32,7 @@ import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*; @Entity(name = "ProjectContact") @Audited @Table(name = "PROJECT_CONTACTS", schema = DB_SCHEMA) -@JsonIdentityInfo( - generator = ObjectIdGenerators.PropertyGenerator.class, - property = "uuid" -) -public class Contact implements Serializable { +public class Contact implements Exportable, Serializable { private static final long serialVersionUID = 1L; @@ -46,6 +41,10 @@ public class Contact implements Serializable { @GeneratedValue(strategy = GenerationType.AUTO) private long contactId; + @Id + @Column(name = "uuid", unique = true, nullable = false) + private String uuid; + @Column(name = "CONTACT_TYPE", length = 255, nullable = true) private String contactType; @@ -66,10 +65,18 @@ public class Contact implements Serializable { return contactId; } - public void setContactId(final long contactId) { + protected void setContactId(final long contactId) { this.contactId = contactId; } + public String getUuid() { + return uuid; + } + + protected void setUuid(final String uuid) { + this.uuid = uuid; + } + public String getContactType() { return contactType; } @@ -106,6 +113,7 @@ public class Contact implements Serializable { public int hashCode() { int hash = 7; hash = 41 * hash + (int) (contactId ^ (contactId >>> 32)); + hash = 41 * hash + Objects.hashCode(uuid); hash = 41 * hash + Objects.hashCode(contactType); hash = 41 * hash + (int) (order ^ (order >>> 32)); hash = 41 * hash + CcmObjects.hashCodeUsingUuid(project); @@ -115,7 +123,6 @@ public class Contact implements Serializable { @Override public boolean equals(final Object obj) { - if (this == obj) { return true; } @@ -132,6 +139,9 @@ public class Contact implements Serializable { if (contactId != other.getContactId()) { return false; } + if (!Objects.equals(uuid, other.getUuid())) { + return false; + } if (!Objects.equals(contactType, other.getContactType())) { return false; } @@ -145,56 +155,60 @@ public class Contact implements Serializable { } public boolean canEqual(final Object obj) { - return obj instanceof Contact; } @Override public final String toString() { - return toString(""); } public String toString(final String data) { - final String projectStr; if (project == null) { projectStr = ""; } else { - projectStr = String.format("objectId = %d," - + "uuid = \"%s\", " - + "name = \"%s\"", - project.getObjectId(), - project.getUuid(), - project.getDisplayName()); + projectStr = String.format( + "objectId = %d," + + "uuid = \"%s\", " + + "name = \"%s\"", + project.getObjectId(), + project.getUuid(), + project.getDisplayName() + ); } final String contactableStr; if (contactable == null) { contactableStr = ""; } else { - contactableStr = String.format("objectId = %d," - + "uuid = \"%s\", " - + "name = \"%s\"", - contactable.getObjectId(), - contactable.getUuid(), - contactable.getDisplayName()); + contactableStr = String.format( + "objectId = %d," + + "uuid = \"%s\", " + + "name = \"%s\"", + contactable.getObjectId(), + contactable.getUuid(), + contactable.getDisplayName() + ); } - return String.format("%s{ " - + "contactId = %d, " - + "contactType = \"%s\", " - + "order = %d, " - + "project = { %s } " - + "contactableUuid = %s%s" - + " }", - super.toString(), - contactId, - contactType, - order, - projectStr, - contactableStr, - data + return String.format( + "%s{ " + + "contactId = %d, " + + "uuid = %s, " + + "contactType = \"%s\", " + + "order = %d, " + + "project = { %s } " + + "contactableUuid = %s%s" + + " }", + super.toString(), + contactId, + uuid, + contactType, + order, + projectStr, + contactableStr, + data ); } diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactImExporter.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactImExporter.java new file mode 100644 index 0000000..9105fe8 --- /dev/null +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactImExporter.java @@ -0,0 +1,66 @@ +package org.scientificcms.contenttypes.sciproject; + +import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Processes; +import org.librecms.assets.Organization; +import org.librecms.assets.Person; + +import java.util.Objects; +import java.util.Set; + +import javax.annotation.PostConstruct; +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * Importer/Exporter for {@link Contact} entities. + * + * @author Jens Pelzetter + */ +@RequestScoped +@Processes(Contact.class) +public class ContactImExporter + extends AbstractEntityImExporter { + + @Inject + private ContactRepository contactRepo; + + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + SciProject.class, + Organization.class, + Person.class + ) + ); + } + + @Override + public Class getEntityClass() { + return Contact.class; + } + + @Override + @Transactional(Transactional.TxType.REQUIRED) + protected void saveImportedEntity(final Contact entity) { + contactRepo.save(entity); + } + + @Override + protected Contact reloadEntity(final Contact entity) { + return contactRepo + .findById(entity.getContactId()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "Contact entity %s was not found in the database.", + Objects.toString(entity) + ) + ) + ); + } + +} diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactRepository.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactRepository.java index 1ede221..0cfd7ee 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactRepository.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactRepository.java @@ -2,6 +2,8 @@ package org.scientificcms.contenttypes.sciproject; import org.libreccm.auditing.AbstractAuditedEntityRepository; +import java.util.UUID; + import javax.enterprise.context.RequestScoped; /** @@ -38,5 +40,10 @@ public class ContactRepository public boolean isNew(final Contact contact) { return contact.getContactId() == 0; } + + @Override + public void initNewEntity(final Contact contact) { + contact.setUuid(UUID.randomUUID().toString()); + } } diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java index e22b97f..70c3c47 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java @@ -1,8 +1,3 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package org.scientificcms.contenttypes.sciproject; import com.fasterxml.jackson.annotation.JsonIdentityInfo; @@ -10,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonIdentityReference; import com.fasterxml.jackson.annotation.ObjectIdGenerators; import org.hibernate.envers.Audited; import org.libreccm.core.CcmObjects; +import org.libreccm.imexport.Exportable; import org.librecms.assets.Person; import java.io.Serializable; @@ -39,7 +35,7 @@ import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*; generator = ObjectIdGenerators.PropertyGenerator.class, property = "uuid" ) -public class Membership implements Serializable { +public class Membership implements Exportable, Serializable { private static final long serialVersionUID = 1L; @@ -48,6 +44,9 @@ public class Membership implements Serializable { @GeneratedValue(strategy = GenerationType.AUTO) private long membershipId; + @Column(name = "uuid", unique = true, nullable = false) + private String uuid; + @Column(name = "MEMBER_ROLE", length = 255, nullable = true) private String role; @@ -73,6 +72,15 @@ public class Membership implements Serializable { this.membershipId = membershipId; } + @Override + public String getUuid() { + return uuid; + } + + protected void setUuid(final String uuid) { + this.uuid = uuid; + } + public String getRole() { return role; } @@ -110,6 +118,7 @@ public class Membership implements Serializable { int hash = 7; hash = 37 * hash + (int) (membershipId ^ (membershipId >>> 32)); + hash = 37 * hash + Objects.hashCode(uuid); hash = 37 * hash + Objects.hashCode(role); hash = 37 * hash + Objects.hashCode(status); hash = 37 * hash + CcmObjects.hashCodeUsingUuid(project); @@ -119,7 +128,6 @@ public class Membership implements Serializable { @Override public boolean equals(final Object obj) { - if (this == obj) { return true; } @@ -137,6 +145,9 @@ public class Membership implements Serializable { if (membershipId != other.getMembershipId()) { return false; } + if (!Objects.equals(uuid, other.getUuid())) { + return false; + } if (!Objects.equals(role, other.getRole())) { return false; } @@ -151,64 +162,68 @@ public class Membership implements Serializable { } public boolean canEqual(final Object obj) { - return obj instanceof Membership; } @Override public final String toString() { - return toString(""); } public String toString(final String data) { - final String projectStr; if (project == null) { projectStr = ""; } else { - projectStr = String.format("objectId = %d," - + "uuid = \"%s\", " - + "name = \"%s\"", - project.getObjectId(), - project.getUuid(), - project.getDisplayName()); + projectStr = String.format( + "objectId = %d," + + "uuid = \"%s\", " + + "name = \"%s\"", + project.getObjectId(), + project.getUuid(), + project.getDisplayName() + ); } final String memberStr; if (member == null) { memberStr = ""; } else { - memberStr = String.format("objectId = %d, " - + "uuid = \"%s\", " - + "name = \"%s\", " - + "surname = \"%s\", " - + "givenName = \"%s\", " - + "prefix = \"%s\", " - + "suffix = \"%s\"", - member.getObjectId(), - member.getUuid(), - member.getDisplayName(), - member.getPersonName().getSurname(), - member.getPersonName().getGivenName(), - member.getPersonName().getPrefix(), - member.getPersonName().getSuffix()); + memberStr = String.format( + "objectId = %d, " + + "uuid = \"%s\", " + + "name = \"%s\", " + + "surname = \"%s\", " + + "givenName = \"%s\", " + + "prefix = \"%s\", " + + "suffix = \"%s\"", + member.getObjectId(), + member.getUuid(), + member.getDisplayName(), + member.getPersonName().getSurname(), + member.getPersonName().getGivenName(), + member.getPersonName().getPrefix(), + member.getPersonName().getSuffix() + ); } - return String.format("%s{ " - + "membershipId = %d, " - + "role = \"%s\", " - + "status = \"%s\"," - + "project = { %s }, " - + "member = { %s }%s" - + " }", - super.toString(), - membershipId, - role, - Objects.toString(status), - projectStr, - memberStr, - data + return String.format( + "%s{ " + + "membershipId = %d, " + + "uuid = %s, " + + "role = \"%s\", " + + "status = \"%s\"," + + "project = { %s }, " + + "member = { %s }%s" + + " }", + super.toString(), + membershipId, + uuid, + role, + Objects.toString(status), + projectStr, + memberStr, + data ); } diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipImExporter.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipImExporter.java new file mode 100644 index 0000000..612f1bd --- /dev/null +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipImExporter.java @@ -0,0 +1,60 @@ +package org.scientificcms.contenttypes.sciproject; + +import org.libreccm.imexport.AbstractEntityImExporter; +import org.librecms.assets.Person; + +import java.util.Objects; +import java.util.Set; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * Importer/Exporter for {@link Membership} entities. + * + * @author Jens Pelzetter + */ +public class MembershipImExporter + extends AbstractEntityImExporter { + + @Inject + private MembershipRepository membershipRepo; + + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + SciProject.class, + Person.class + ) + ); + } + + @Override + public Class getEntityClass() { + return Membership.class; + } + + @Override + @Transactional(Transactional.TxType.REQUIRED) + protected void saveImportedEntity(final Membership entity) { + membershipRepo.save(entity); + } + + @Override + protected Membership reloadEntity(final Membership entity) { + return membershipRepo + .findById(entity.getMembershipId()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "Membership entity %s was not found in the database.", + Objects.toString(entity) + ) + ) + ); + } + +} diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectConstants.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectConstants.java index 785a098..ef449a2 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectConstants.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectConstants.java @@ -1,8 +1,4 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ + package org.scientificcms.contenttypes.sciproject; /** diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java index e54ca32..1abdc39 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java @@ -1,15 +1,9 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package org.scientificcms.contenttypes.sciproject; -import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; import org.hibernate.envers.Audited; import org.libreccm.core.CcmObjects; +import org.libreccm.imexport.Exportable; import org.librecms.assets.Organization; import java.io.Serializable; @@ -33,11 +27,7 @@ import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*; @Entity @Audited @Table(name = "SPONSORING", schema = DB_SCHEMA) -@JsonIdentityInfo( - generator = ObjectIdGenerators.PropertyGenerator.class, - property = "uuid" -) -public class Sponsoring implements Serializable { +public class Sponsoring implements Exportable, Serializable { private static final long serialVersionUID = 1L; @@ -46,6 +36,9 @@ public class Sponsoring implements Serializable { @GeneratedValue(strategy = GenerationType.AUTO) private long sponsoringId; + @Column(name = "uuid", unique = true, nullable = false) + private String uuid; + @Column(name = "FUNDING_CODE", length = 512, nullable = true) private String fundingCode; @@ -70,6 +63,15 @@ public class Sponsoring implements Serializable { this.sponsoringId = sponsoringId; } + @Override + public String getUuid() { + return uuid; + } + + protected void setUuid(final String uuid) { + this.uuid = uuid; + } + public String getFundingCode() { return fundingCode; } @@ -104,10 +106,10 @@ public class Sponsoring implements Serializable { @Override public int hashCode() { - int hash = 3; hash = 53 * hash + (int) (sponsoringId ^ (sponsoringId >>> 32)); + hash = 53 * hash + Objects.hashCode(uuid); hash = 53 * hash + Objects.hashCode(fundingCode); hash = 53 * hash + (int) (order ^ (order >>> 32)); hash = 53 * hash + CcmObjects.hashCodeUsingUuid(project); @@ -117,7 +119,6 @@ public class Sponsoring implements Serializable { @Override public boolean equals(final Object obj) { - if (this == obj) { return true; } @@ -134,6 +135,9 @@ public class Sponsoring implements Serializable { if (sponsoringId != other.getSponsoringId()) { return false; } + if (!Objects.equals(uuid, other.getUuid())) { + return false; + } if (!Objects.equals(fundingCode, other.getFundingCode())) { return false; } @@ -145,16 +149,13 @@ public class Sponsoring implements Serializable { } return order == other.getOrder(); } - public boolean canEqual(final Object obj) { - return obj instanceof Sponsoring; } - + @Override public final String toString() { - return toString(""); } @@ -164,40 +165,48 @@ public class Sponsoring implements Serializable { if (project == null) { projectStr = ""; } else { - projectStr = String.format("objectId = %d," - + "uuid = \"%s\", " - + "name = \"%s\"", - project.getObjectId(), - project.getUuid(), - project.getDisplayName()); + projectStr = String.format( + "objectId = %d," + + "uuid = \"%s\", " + + "name = \"%s\"", + project.getObjectId(), + project.getUuid(), + project.getDisplayName() + ); } final String sponsorStr; if (sponsor == null) { sponsorStr = ""; } else { - sponsorStr = String.format("objectId = %d, " - + "uuid = \"%s\", " - + "name = \"%s\"", - sponsor.getObjectId(), - sponsor.getUuid(), - sponsor.getDisplayName()); + sponsorStr = String.format( + "objectId = %d, " + + "uuid = \"%s\", " + + "name = \"%s\"", + sponsor.getObjectId(), + sponsor.getUuid(), + sponsor.getDisplayName() + ); } - return String.format("%s{ " - + "sponsoringId = %d, " - + "fundingCode = \"%s\", " - + "order = %d, " - + "project = { %s }, " - + "sponsor = { %s }%s" - + " }", - super.toString(), - sponsoringId, - fundingCode, - order, - projectStr, - sponsorStr, - data); + return String.format( + "%s{ " + + "sponsoringId = %d, " + + "uuid = %s, " + + "fundingCode = \"%s\", " + + "order = %d, " + + "project = { %s }, " + + "sponsor = { %s }%s" + + " }", + super.toString(), + sponsoringId, + uuid, + fundingCode, + order, + projectStr, + sponsorStr, + data + ); } } diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringImExporter.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringImExporter.java new file mode 100644 index 0000000..9caa76a --- /dev/null +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringImExporter.java @@ -0,0 +1,61 @@ +package org.scientificcms.contenttypes.sciproject; + +import org.libreccm.imexport.AbstractEntityImExporter; +import org.librecms.assets.Organization; +import org.librecms.assets.Person; + +import java.util.Objects; +import java.util.Set; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * Importer/Exporter for {@link Membership} entities. + * + * @author Jens Pelzetter + */ +public class SponsoringImExporter + extends AbstractEntityImExporter { + + @Inject + private SponsoringRepository sponsoringRepo; + + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + SciProject.class, + Organization.class + ) + ); + } + + @Override + public Class getEntityClass() { + return Sponsoring.class; + } + + @Override + @Transactional(Transactional.TxType.REQUIRED) + protected void saveImportedEntity(final Sponsoring entity) { + sponsoringRepo.save(entity); + } + + @Override + protected Sponsoring reloadEntity(final Sponsoring entity) { + return sponsoringRepo + .findById(entity.getSponsoringId()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "Membership entity %s was not found in the database.", + Objects.toString(entity) + ) + ) + ); + } + +} diff --git a/sci-types-project/src/main/resources/db/migrations/org/scientificcms/sci_types_project/h2/V7_0_0_1__add_uuids.sql b/sci-types-project/src/main/resources/db/migrations/org/scientificcms/sci_types_project/h2/V7_0_0_1__add_uuids.sql new file mode 100644 index 0000000..5aa6d88 --- /dev/null +++ b/sci-types-project/src/main/resources/db/migrations/org/scientificcms/sci_types_project/h2/V7_0_0_1__add_uuids.sql @@ -0,0 +1,29 @@ +alter table SCI_TYPES_PROJECT.PROJECT_CONTACTS + add column uuid varchar(255); +update SCI_TYPES_PROJECT.PROJECT_CONTACTS set uuid = random_uuid(); +alter table SCI_TYPES_PROJECT.PROJECT_CONTACTS + alter column uuid set not null; +alter table SCI_TYPES_PROJECT.PROJECT_CONTACTS + add constraint UK_9uf8mpe319no9o4pgv3jtdm9d unique (uuid); +alter table SCI_TYPES_PROJECT.PROJECT_CONTACTS_AUD + add column uuid varchar(255); + +alter table SCI_TYPES_PROJECT.PROJECT_MEMBERSHIPS + add column uuid varchar(255); +update SCI_TYPES_PROJECT.PROJECT_MEMBERSHIPS set uuid = random_uuid(); +alter table SCI_TYPES_PROJECT.PROJECT_MEMBERSHIPS + alter column uuid set not null; +alter table SCI_TYPES_PROJECT.PROJECT_MEMBERSHIPS + add constraint UK_3ba40n70bpp8wlhhulmrr6e5h unique (uuid); +alter table SCI_TYPES_PROJECT.PROJECT_MEMBERSHIPS_AUD + add column uuid varchar(255); + +alter table SCI_TYPES_PROJECT.SPONSORING + add column uuid varchar(255); +update SCI_TYPES_PROJECT.SPONSORING set uuid = random_uuid(); +alter table SCI_TYPES_PROJECT.SPONSORING + alter column uuid set not null; +alter table SCI_TYPES_PROJECT.SPONSORING + add constraint UK_b6rte13jrs2se6xad7eenr6mr unique(uuid); +alter table SCI_TYPES_PROJECT.SPONSORING_AUD + add column uuid varchar(255); \ No newline at end of file diff --git a/sci-types-project/src/main/resources/db/migrations/org/scientificcms/sci_types_project/pgsql/V7_0_0_1__add_uuids.sql b/sci-types-project/src/main/resources/db/migrations/org/scientificcms/sci_types_project/pgsql/V7_0_0_1__add_uuids.sql new file mode 100644 index 0000000..8a905be --- /dev/null +++ b/sci-types-project/src/main/resources/db/migrations/org/scientificcms/sci_types_project/pgsql/V7_0_0_1__add_uuids.sql @@ -0,0 +1,29 @@ +alter table SCI_TYPES_PROJECT.PROJECT_CONTACTS + add column uuid varchar(255); +update SCI_TYPES_PROJECT.PROJECT_CONTACTS set uuid = gen_random_uuid(); +alter table SCI_TYPES_PROJECT.PROJECT_CONTACTS + alter column uuid set not null; +alter table SCI_TYPES_PROJECT.PROJECT_CONTACTS + add constraint UK_9uf8mpe319no9o4pgv3jtdm9d unique (uuid); +alter table SCI_TYPES_PROJECT.PROJECT_CONTACTS_AUD + add column uuid varchar(255); + +alter table SCI_TYPES_PROJECT.PROJECT_MEMBERSHIPS + add column uuid varchar(255); +update SCI_TYPES_PROJECT.PROJECT_MEMBERSHIPS set uuid = gen_random_uuid(); +alter table SCI_TYPES_PROJECT.PROJECT_MEMBERSHIPS + alter column uuid set not null; +alter table SCI_TYPES_PROJECT.PROJECT_MEMBERSHIPS + add constraint UK_3ba40n70bpp8wlhhulmrr6e5h unique (uuid); +alter table SCI_TYPES_PROJECT.PROJECT_MEMBERSHIPS_AUD + add column uuid varchar(255); + +alter table SCI_TYPES_PROJECT.SPONSORING + add column uuid varchar(255); +update SCI_TYPES_PROJECT.SPONSORING set uuid = gen_random_uuid(); +alter table SCI_TYPES_PROJECT.SPONSORING + alter column uuid set not null; +alter table SCI_TYPES_PROJECT.SPONSORING + add constraint UK_b6rte13jrs2se6xad7eenr6mr unique(uuid); +alter table SCI_TYPES_PROJECT.SPONSORING_AUD + add column uuid varchar(255); \ No newline at end of file