diff --git a/.github/workflows/kumuluzee-ci.yml b/.github/workflows/kumuluzee-ci.yml index eee283e..f10f1a8 100644 --- a/.github/workflows/kumuluzee-ci.yml +++ b/.github/workflows/kumuluzee-ci.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: - java-version: ['11', '17'] + java-version: ['11', '17', '21'] steps: - name: Checkout code @@ -67,4 +67,4 @@ jobs: OSSRH_USERNAME: Kumuluz OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} GPG_PASSPHRASE: ${{ secrets.OSSRH_GPG_PASSPHRASE }} - run: mvn --batch-mode source:jar javadoc:jar deploy -Pdeploy -DskipTests=true --settings ./settings.xml; \ No newline at end of file + run: mvn --batch-mode source:jar javadoc:jar deploy -Pdeploy -DskipTests=true --settings ./settings.xml; diff --git a/core/pom.xml b/core/pom.xml index d76d075..7b7650a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -7,7 +7,7 @@ kumuluzee-rest com.kumuluz.ee.rest - 2.1.0-SNAPSHOT + 3.0.0-SNAPSHOT KumuluzEE REST Core @@ -17,8 +17,8 @@ - javax.persistence - javax.persistence-api + jakarta.persistence + jakarta.persistence-api org.parboiled diff --git a/core/src/main/java/com/kumuluz/ee/rest/beans/CriteriaField.java b/core/src/main/java/com/kumuluz/ee/rest/beans/CriteriaField.java index 7d5524b..dae460d 100644 --- a/core/src/main/java/com/kumuluz/ee/rest/beans/CriteriaField.java +++ b/core/src/main/java/com/kumuluz/ee/rest/beans/CriteriaField.java @@ -20,7 +20,8 @@ */ package com.kumuluz.ee.rest.beans; -import javax.persistence.criteria.Path; +import jakarta.persistence.criteria.Path; + import java.io.Serializable; /** diff --git a/core/src/main/java/com/kumuluz/ee/rest/beans/CriteriaWhereQuery.java b/core/src/main/java/com/kumuluz/ee/rest/beans/CriteriaWhereQuery.java index 3514fe8..08cdc39 100644 --- a/core/src/main/java/com/kumuluz/ee/rest/beans/CriteriaWhereQuery.java +++ b/core/src/main/java/com/kumuluz/ee/rest/beans/CriteriaWhereQuery.java @@ -20,7 +20,8 @@ */ package com.kumuluz.ee.rest.beans; -import javax.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Predicate; + import java.io.Serializable; /** diff --git a/core/src/main/java/com/kumuluz/ee/rest/beans/QueryParameters.java b/core/src/main/java/com/kumuluz/ee/rest/beans/QueryParameters.java index 92f06e0..31647a1 100644 --- a/core/src/main/java/com/kumuluz/ee/rest/beans/QueryParameters.java +++ b/core/src/main/java/com/kumuluz/ee/rest/beans/QueryParameters.java @@ -110,7 +110,7 @@ public void setFields(List fields) { * {@link #addFilterExpression(FilterExpressionOperation, QueryFilterExpression)} ()} instead. */ public void addFilter(QueryFilter filter) { - if(filter != null) { + if (filter != null) { getFilters().add(filter); } } diff --git a/core/src/main/java/com/kumuluz/ee/rest/interfaces/CriteriaFilter.java b/core/src/main/java/com/kumuluz/ee/rest/interfaces/CriteriaFilter.java index 74d43fa..4c56164 100644 --- a/core/src/main/java/com/kumuluz/ee/rest/interfaces/CriteriaFilter.java +++ b/core/src/main/java/com/kumuluz/ee/rest/interfaces/CriteriaFilter.java @@ -20,9 +20,9 @@ */ package com.kumuluz.ee.rest.interfaces; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; /** * @author Tilen Faganel diff --git a/core/src/main/java/com/kumuluz/ee/rest/utils/JPAUtils.java b/core/src/main/java/com/kumuluz/ee/rest/utils/JPAUtils.java index 74ab38b..d6a59a4 100644 --- a/core/src/main/java/com/kumuluz/ee/rest/utils/JPAUtils.java +++ b/core/src/main/java/com/kumuluz/ee/rest/utils/JPAUtils.java @@ -31,17 +31,18 @@ import com.kumuluz.ee.rest.exceptions.NoSuchEntityFieldException; import com.kumuluz.ee.rest.exceptions.QueryFormatException; import com.kumuluz.ee.rest.interfaces.CriteriaFilter; +import jakarta.persistence.EntityManager; +import jakarta.persistence.Tuple; +import jakarta.persistence.TupleElement; +import jakarta.persistence.TypedQuery; +import jakarta.persistence.criteria.*; +import jakarta.persistence.metamodel.*; -import javax.persistence.EntityManager; -import javax.persistence.Tuple; -import javax.persistence.TupleElement; -import javax.persistence.TypedQuery; -import javax.persistence.criteria.*; -import javax.persistence.metamodel.*; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; +import java.sql.Timestamp; import java.time.*; import java.time.format.DateTimeParseException; import java.util.*; @@ -57,7 +58,7 @@ public class JPAUtils { private static final Logger LOG = Logger.getLogger(JPAUtils.class.getSimpleName()); - private static final String PROP_PERSISTENCE_JDBC_DRIVER = "javax.persistence.jdbc.driver"; + private static final String PROP_PERSISTENCE_JDBC_DRIVER = "jakarta.persistence.jdbc.driver"; private static final String POSTGRES_SQL_DRIVER = "org.postgresql.Driver"; public static Stream getEntityStream(EntityManager em, Class entity) { @@ -194,7 +195,7 @@ public static List queryEntities(EntityManager em, Class entity, Query } private static Optional> buildQuery(EntityManager em, Class entity, QueryParameters q, CriteriaFilter customFilter, - List queryHints, String rootAlias, boolean forceDistinct) { + List queryHints, String rootAlias, boolean forceDistinct) { if (em == null || entity == null) throw new IllegalArgumentException("The entity manager and the entity cannot be null."); @@ -384,17 +385,17 @@ public static List> createFieldsSelect(Root r, QueryParameters q // Temporary methods to not break the public API private static Optional> buildQuerySimple(EntityManager em, Class entity, QueryParameters q, - CriteriaFilter customFilter, - List queryHints, String rootAlias, - boolean forceDistinct) { + CriteriaFilter customFilter, + List queryHints, String rootAlias, + boolean forceDistinct) { return buildQuerySimple(em, entity, q, customFilter, queryHints, rootAlias, forceDistinct, false); } @SuppressWarnings("unchecked") private static Optional> buildQuerySimple(EntityManager em, Class entity, QueryParameters q, - CriteriaFilter customFilter, - List queryHints, String rootAlias, - boolean forceDistinct, boolean ignorePaging) { + CriteriaFilter customFilter, + List queryHints, String rootAlias, + boolean forceDistinct, boolean ignorePaging) { LOG.finest("Querying entity: '" + entity.getSimpleName() + "' with parameters: " + q + "(simple)"); @@ -478,9 +479,9 @@ private static Optional> buildQuerySimple(EntityManager em, Cl @SuppressWarnings("unchecked") private static Optional> buildQueryAdvanced(EntityManager em, Class entity, QueryParameters q, - CriteriaFilter customFilter, - List queryHints, String rootAlias, - boolean forceDistinct) { + CriteriaFilter customFilter, + List queryHints, String rootAlias, + boolean forceDistinct) { LOG.finest("Querying entity: '" + entity.getSimpleName() + "' with parameters: " + q + "(advanced)"); @@ -580,6 +581,7 @@ private static Predicate createWhereQueryInternal(EntityManager em, CriteriaBuil Attribute attribute = (Attribute) entityField.getModel(); boolean isBasic = attribute.getPersistentAttributeType().equals(Attribute.PersistentAttributeType.BASIC); + boolean isAssociation = attribute.isAssociation(); boolean isCollection = attribute.isCollection(); @SuppressWarnings("unchecked") @@ -594,7 +596,7 @@ private static Predicate createWhereQueryInternal(EntityManager em, CriteriaBuil switch (f.getOperation()) { case EQ: - if (f.getDateValue() != null && entityField.getJavaType().equals(Date.class)) { + if (f.getDateValue() != null && Date.class.isAssignableFrom(entityField.getJavaType())) { np = cb.equal(entityField, f.getDateValue()); } else if (f.getValue() != null) { np = cb.equal(entityField, getValueForPath(entityField, f.getValue())); @@ -606,7 +608,7 @@ private static Predicate createWhereQueryInternal(EntityManager em, CriteriaBuil } break; case NEQ: - if (f.getDateValue() != null && entityField.getJavaType().equals(Date.class)) { + if (f.getDateValue() != null && Date.class.isAssignableFrom(entityField.getJavaType())) { np = cb.notEqual(entityField, f.getDateValue()); } else if (f.getValue() != null) { np = cb.notEqual(entityField, getValueForPath(entityField, f.getValue())); @@ -671,7 +673,7 @@ private static Predicate createWhereQueryInternal(EntityManager em, CriteriaBuil Number.class.isAssignableFrom(entityField.getJavaType()) || String.class.isAssignableFrom(entityField.getJavaType())) { - if (f.getDateValue() != null && entityField.getJavaType().equals(Date.class)) { + if (f.getDateValue() != null && Date.class.isAssignableFrom(entityField.getJavaType())) { np = cb.greaterThan(dateField, f.getDateValue()); } else if (f.getValue() != null) { np = cb.greaterThan(compField, (Comparable) getValueForPath(stringField, f.getValue())); @@ -684,7 +686,7 @@ private static Predicate createWhereQueryInternal(EntityManager em, CriteriaBuil Number.class.isAssignableFrom(entityField.getJavaType()) || String.class.isAssignableFrom(entityField.getJavaType())) { - if (f.getDateValue() != null && entityField.getJavaType().equals(Date.class)) { + if (f.getDateValue() != null && Date.class.isAssignableFrom(entityField.getJavaType())) { np = cb.greaterThanOrEqualTo(dateField, f.getDateValue()); } else if (f.getValue() != null) { np = cb.greaterThanOrEqualTo(compField, (Comparable) getValueForPath(stringField, f.getValue())); @@ -697,7 +699,7 @@ private static Predicate createWhereQueryInternal(EntityManager em, CriteriaBuil Number.class.isAssignableFrom(entityField.getJavaType()) || String.class.isAssignableFrom(entityField.getJavaType())) { - if (f.getDateValue() != null && entityField.getJavaType().equals(Date.class)) { + if (f.getDateValue() != null && Date.class.isAssignableFrom(entityField.getJavaType())) { np = cb.lessThan(dateField, f.getDateValue()); } else if (f.getValue() != null) { np = cb.lessThan(compField, (Comparable) getValueForPath(stringField, f.getValue())); @@ -710,7 +712,7 @@ private static Predicate createWhereQueryInternal(EntityManager em, CriteriaBuil Number.class.isAssignableFrom(entityField.getJavaType()) || String.class.isAssignableFrom(entityField.getJavaType())) { - if (f.getDateValue() != null && entityField.getJavaType().equals(Date.class)) { + if (f.getDateValue() != null && Date.class.isAssignableFrom(entityField.getJavaType())) { np = cb.lessThanOrEqualTo(dateField, f.getDateValue()); } else if (f.getValue() != null) { np = cb.lessThanOrEqualTo(compField, (Comparable) getValueForPath(stringField, f.getValue())); @@ -778,7 +780,7 @@ private static Predicate createWhereQueryInternal(EntityManager em, CriteriaBuil ); } } - } else if (isCollection) { + } else if (isAssociation) { String idField; @@ -792,6 +794,16 @@ private static Predicate createWhereQueryInternal(EntityManager em, CriteriaBuil np = cb.isNotNull(entityField.get(idField)); break; } + } else if (isCollection) { + + switch (f.getOperation()) { + case ISNULL: + np = cb.isEmpty(entityField); + break; + case ISNOTNULL: + np = cb.isNotEmpty(entityField); + break; + } } } catch (IllegalArgumentException e) { throw new NoSuchEntityFieldException(e.getMessage(), f.getField(), r.getJavaType().getSimpleName()); @@ -840,7 +852,7 @@ private static Stream createEntitiesFromTuples(List tuples, Class< try { el = entity.getConstructor().newInstance(); } catch (InstantiationException | IllegalAccessException | - NoSuchMethodException | InvocationTargetException e) { + NoSuchMethodException | InvocationTargetException e) { throw new AssertionError(); } @@ -864,7 +876,8 @@ private static Stream createEntitiesFromTuples(List tuples, Class< String[] fName = te.getAlias().split("\\."); createEntityFromTuple(fName, entity, el, o, i); - } catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InvocationTargetException | InstantiationException e) { + } catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | + InvocationTargetException | InstantiationException e) { throw new NoSuchEntityFieldException(e.getMessage(), te.getAlias(), entity.getSimpleName()); } @@ -1059,6 +1072,10 @@ private static Object getValueForPath(Path path, String value) { return Date.from(ZonedDateTime.parse(value).toInstant()); } + if (c.equals(Timestamp.class)) { + return Timestamp.from(ZonedDateTime.parse(value).toInstant()); + } + if (c.equals(Instant.class)) { return ZonedDateTime.parse(value).toInstant(); } @@ -1135,7 +1152,7 @@ private static CriteriaField getCriteriaField(String fieldName, Root r, Map clazz, private static StreamCriteriaField getStreamCriteriaField(Class clazz, String fieldName) { - if (fieldName == null) throw new NoSuchEntityFieldException("No such entity field", fieldName, clazz.getSimpleName()); + if (fieldName == null) + throw new NoSuchEntityFieldException("No such entity field", fieldName, clazz.getSimpleName()); String[] fields = fieldName.split("\\."); @@ -589,6 +590,8 @@ private static Predicate filter(Class clazz, String fieldName, Object return (((Date) value).toInstant()).equals(((Date) fieldValue).toInstant()); } else if (value instanceof Enum) { return value.equals(getValueForField(field, fieldValue.toString())); + } else if (value instanceof UUID) { + return value.equals(UUID.fromString(fieldValue.toString())); } else if (Collection.class.isAssignableFrom(value.getClass())) { Predicate newPredicate = filter(getGenericType(field), fieldName.substring(fieldNames[0].length() + 1), @@ -651,6 +654,8 @@ private static Predicate filter(Class clazz, String fieldName, Object return !(((Date) value).toInstant()).equals(((Date) fieldValue).toInstant()); } else if (value instanceof Enum) { return !value.equals(getValueForField(field, fieldValue.toString())); + } else if (value instanceof UUID) { + return !value.equals(UUID.fromString(fieldValue.toString())); } else if (Collection.class.isAssignableFrom(value.getClass())) { Predicate newPredicate = filter(getGenericType(field), fieldName.substring(fieldNames[0].length() + 1), @@ -933,7 +938,8 @@ private static Predicate filter(Class clazz, String fieldName, Object } else if (operation.equals(FilterOperation.IN)) { if (value != null) { if (value instanceof String || value instanceof Double || value instanceof Float || value instanceof Long || - value instanceof Boolean || value instanceof Byte || value instanceof Short || value instanceof Date || value instanceof Enum) { + value instanceof Boolean || value instanceof Byte || value instanceof Short || value instanceof Date || + value instanceof Enum || value instanceof UUID) { return ((List) fieldValue).stream() .filter(Objects::nonNull) @@ -982,7 +988,8 @@ private static Predicate filter(Class clazz, String fieldName, Object } else if (operation.equals(FilterOperation.NIN)) { if (value != null) { if (value instanceof String || value instanceof Double || value instanceof Float || value instanceof Long || - value instanceof Boolean || value instanceof Byte || value instanceof Short || value instanceof Date || value instanceof Enum) { + value instanceof Boolean || value instanceof Byte || value instanceof Short || value instanceof Date || + value instanceof Enum || value instanceof UUID) { return !((List) fieldValue).stream() .filter(Objects::nonNull) diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsCountTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsCountTest.java index 64b038f..9065020 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsCountTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsCountTest.java @@ -6,12 +6,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.JPAUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.util.Arrays; import java.util.Collection; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsCriteriaFilterTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsCriteriaFilterTest.java index e909098..b92d8f5 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsCriteriaFilterTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsCriteriaFilterTest.java @@ -6,12 +6,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.JPAUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.util.Arrays; import java.util.Collection; import java.util.List; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsFieldsTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsFieldsTest.java index fd7262d..eca095f 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsFieldsTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsFieldsTest.java @@ -7,12 +7,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.JPAUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.util.Arrays; import java.util.Collection; import java.util.List; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsFiltersTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsFiltersTest.java index b3781a5..6987db3 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsFiltersTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsFiltersTest.java @@ -5,16 +5,17 @@ import com.kumuluz.ee.rest.enums.FilterOperation; import com.kumuluz.ee.rest.exceptions.InvalidFieldValueException; import com.kumuluz.ee.rest.exceptions.NoSuchEntityFieldException; +import com.kumuluz.ee.rest.test.entities.Event; import com.kumuluz.ee.rest.test.entities.Project; import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.JPAUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.time.ZonedDateTime; import java.util.Arrays; import java.util.Collection; @@ -853,7 +854,7 @@ public void testUuidNinFilter() { List projects = JPAUtils.queryEntities(em, Project.class, q); Assert.assertNotNull(projects); - Assert.assertEquals(0, projects.size()); + Assert.assertEquals(100, projects.size()); } @Test(expected = InvalidFieldValueException.class) @@ -1060,4 +1061,26 @@ public void testOrFilterWithFields() { Assert.assertEquals(9, users.size()); } + @Test + public void testIsNullFilterOnElementCollection() { + + QueryParameters q = QueryParameters.query("filter=eventNotes:ISNULL").build(); + + List events = JPAUtils.queryEntities(em, Event.class, q); + + Assert.assertNotNull(events); + Assert.assertEquals(1, events.size()); + } + + @Test + public void testIsNotNullFilterOnElementCollection() { + + QueryParameters q = QueryParameters.query("filter=eventNotes:ISNOTNULL").build(); + + List events = JPAUtils.queryEntities(em, Event.class, q); + + Assert.assertNotNull(events); + Assert.assertEquals(2, events.size()); + } + } diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsOrderTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsOrderTest.java index 2282e9b..c3b1a9d 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsOrderTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsOrderTest.java @@ -9,12 +9,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.JPAUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.util.Arrays; import java.util.Collection; import java.util.Comparator; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsPagingTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsPagingTest.java index 5bff017..1879336 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsPagingTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsPagingTest.java @@ -6,12 +6,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.JPAUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.util.Arrays; import java.util.Collection; import java.util.List; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsTemporalTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsTemporalTest.java index c8bdf30..393cb0b 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsTemporalTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/JPAUtilsTemporalTest.java @@ -9,12 +9,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.JPAUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.util.Arrays; import java.util.Collection; import java.util.List; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/QueriedTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/QueriedTest.java index 7e9198f..ca506d7 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/QueriedTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/QueriedTest.java @@ -10,7 +10,8 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; +import jakarta.persistence.EntityManager; + import java.util.Arrays; import java.util.Collection; @@ -52,11 +53,13 @@ public void testQueriedAndPaginated() { q.setOffset(10); q.setLimit(limit); + em.getTransaction().begin(); Queried queried = JPAUtils.getQueried(em, User.class, q); Assert.assertNotNull(queried); Assert.assertEquals(Long.valueOf(100L), queried.getTotalCount()); Assert.assertEquals(limit, queried.stream().count()); + em.getTransaction().commit(); } @Test diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/QueryStreamTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/QueryStreamTest.java index eafa46a..726626f 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/QueryStreamTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/QueryStreamTest.java @@ -4,12 +4,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.JPAUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.util.Arrays; import java.util.Collection; import java.util.Optional; @@ -61,13 +61,14 @@ public void testStreamsObject() { public void testStreamCollect() { QueryParameters q = new QueryParameters(); + em.getTransaction().begin(); Stream users = JPAUtils.getEntityStream(em, User.class, q); int size = (int) users.count(); Assert.assertNotNull(users); Assert.assertEquals(100, size); - + em.getTransaction().commit(); } @Test @@ -85,7 +86,7 @@ public void testMultipleQuieries() { Assert.assertNotNull(users); Assert.assertEquals(100, size); Assert.assertEquals(totalCount.intValue(), size); - + em.getTransaction().commit(); } @Test(expected = IllegalStateException.class) diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsCountTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsCountTest.java index 2421e3e..d497a17 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsCountTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsCountTest.java @@ -6,12 +6,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.StreamUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -72,7 +72,7 @@ public void testQueryCount() { Long count = StreamUtils.queryEntitiesCount(users, q); Assert.assertNotNull(count); - Assert.assertEquals( 2L, count.longValue()); + Assert.assertEquals(2L, count.longValue()); } @Test diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsFieldsTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsFieldsTest.java index 2909185..ca68a06 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsFieldsTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsFieldsTest.java @@ -7,12 +7,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.StreamUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.math.BigDecimal; import java.time.LocalDate; import java.time.ZoneId; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsFiltersTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsFiltersTest.java index 40307fc..7f4d4ee 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsFiltersTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsFiltersTest.java @@ -9,12 +9,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.StreamUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; @@ -998,7 +998,7 @@ public void testUuidNinFilter() { projects = StreamUtils.queryEntities(projects, q); Assert.assertNotNull(projects); - Assert.assertEquals(0, projects.size()); + Assert.assertEquals(100, projects.size()); } @Test(expected = InvalidFieldValueException.class) diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsOrderTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsOrderTest.java index 57d838e..21a0383 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsOrderTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsOrderTest.java @@ -16,7 +16,8 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; +import jakarta.persistence.EntityManager; + import java.util.Arrays; import java.util.Collection; import java.util.Comparator; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsPagingTest.java b/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsPagingTest.java index 32336fe..ff60b60 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsPagingTest.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/StreamUtilsPagingTest.java @@ -6,12 +6,12 @@ import com.kumuluz.ee.rest.test.entities.User; import com.kumuluz.ee.rest.test.utils.JpaUtil; import com.kumuluz.ee.rest.utils.StreamUtils; +import jakarta.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import javax.persistence.EntityManager; import java.util.Arrays; import java.util.Collection; import java.util.List; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/entities/Event.java b/core/src/test/java/com/kumuluz/ee/rest/test/entities/Event.java index 7e1ea50..96e98fa 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/entities/Event.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/entities/Event.java @@ -1,9 +1,11 @@ package com.kumuluz.ee.rest.test.entities; -import javax.persistence.*; +import jakarta.persistence.*; + import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZonedDateTime; +import java.util.Set; /** * @author cen1 @@ -24,6 +26,11 @@ public class Event { @Column(name = "ends_at") private ZonedDateTime endsAt; + @ElementCollection + @CollectionTable(name = "event_notes", joinColumns = @JoinColumn(name = "event_id")) + @Column(name = "event_note") + private Set eventNotes; + public Integer getId() { return id; } @@ -55,4 +62,12 @@ public ZonedDateTime getEndsAt() { public void setEndsAt(ZonedDateTime endsAt) { this.endsAt = endsAt; } + + public Set getEventNotes() { + return eventNotes; + } + + public void setEventNotes(Set eventNotes) { + this.eventNotes = eventNotes; + } } diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/entities/ExternalInfo.java b/core/src/test/java/com/kumuluz/ee/rest/test/entities/ExternalInfo.java index f7f2f91..a735938 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/entities/ExternalInfo.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/entities/ExternalInfo.java @@ -1,7 +1,7 @@ package com.kumuluz.ee.rest.test.entities; -import javax.persistence.Column; -import javax.persistence.MappedSuperclass; +import jakarta.persistence.Column; +import jakarta.persistence.MappedSuperclass; /** * @author gpor0 diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/entities/InstantAttributeConverter.java b/core/src/test/java/com/kumuluz/ee/rest/test/entities/InstantAttributeConverter.java index f402d53..007a246 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/entities/InstantAttributeConverter.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/entities/InstantAttributeConverter.java @@ -1,7 +1,8 @@ package com.kumuluz.ee.rest.test.entities; -import javax.persistence.AttributeConverter; -import javax.persistence.Converter; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; + import java.sql.Timestamp; import java.time.Instant; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/entities/Project.java b/core/src/test/java/com/kumuluz/ee/rest/test/entities/Project.java index b12bc75..321bd75 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/entities/Project.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/entities/Project.java @@ -2,8 +2,11 @@ import com.kumuluz.ee.rest.annotations.RestIgnore; import com.kumuluz.ee.rest.test.entities.enums.ProjectStatus; +import com.kumuluz.ee.rest.test.utils.UUIDConverter; +import jakarta.persistence.*; +import org.eclipse.persistence.annotations.Convert; +import org.eclipse.persistence.annotations.Converter; -import javax.persistence.*; import java.io.Serializable; import java.util.UUID; @@ -20,6 +23,8 @@ public class Project implements Serializable { private Integer id; @Column(name = "public_id") + @Converter(name = "uuidConverter", converterClass = UUIDConverter.class) + @Convert("uuidConverter") private UUID publicId; private String name; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/entities/ProjectLocation.java b/core/src/test/java/com/kumuluz/ee/rest/test/entities/ProjectLocation.java index 6debfbc..7e38bb5 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/entities/ProjectLocation.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/entities/ProjectLocation.java @@ -1,6 +1,7 @@ package com.kumuluz.ee.rest.test.entities; -import javax.persistence.*; +import jakarta.persistence.*; + import java.io.Serializable; /** diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/entities/User.java b/core/src/test/java/com/kumuluz/ee/rest/test/entities/User.java index fff2a2e..08c7a4b 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/entities/User.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/entities/User.java @@ -4,9 +4,10 @@ import com.kumuluz.ee.rest.annotations.RestMapping; import com.kumuluz.ee.rest.test.entities.enums.UserStatus; import com.kumuluz.ee.rest.test.utils.UUIDConverter; +import jakarta.persistence.*; +import org.eclipse.persistence.annotations.Convert; import org.eclipse.persistence.annotations.Converter; -import javax.persistence.*; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; @@ -22,15 +23,14 @@ @Entity @RestIgnore("userIgnoredField") @Table(name = "users") -@Converter(name = "uuid", converterClass = UUIDConverter.class) @NamedQueries({@NamedQuery(name = "User.getAll", query = "SELECT u FROM User u")}) public class User implements Comparable, Serializable { @Id private Integer id; - @Column(columnDefinition = "uuid") - @Convert(converter = UUIDConverter.class) + @Converter(name = "uuidConverter", converterClass = UUIDConverter.class) + @Convert("uuidConverter") private UUID uuid; @RestMapping("firstnameChanged") diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/entities/UserCareer.java b/core/src/test/java/com/kumuluz/ee/rest/test/entities/UserCareer.java index c51426d..1ff5ddd 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/entities/UserCareer.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/entities/UserCareer.java @@ -2,8 +2,8 @@ import com.kumuluz.ee.rest.annotations.RestIgnore; import com.kumuluz.ee.rest.annotations.RestMapping; +import jakarta.persistence.*; -import javax.persistence.*; import java.io.Serializable; /** diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/entities/ZonedDateTimeAttributeConverter.java b/core/src/test/java/com/kumuluz/ee/rest/test/entities/ZonedDateTimeAttributeConverter.java index b84cdf2..62ccad5 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/entities/ZonedDateTimeAttributeConverter.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/entities/ZonedDateTimeAttributeConverter.java @@ -1,7 +1,8 @@ package com.kumuluz.ee.rest.test.entities; -import javax.persistence.AttributeConverter; -import javax.persistence.Converter; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; + import java.sql.Timestamp; import java.time.ZoneId; import java.time.ZonedDateTime; diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/utils/JpaUtil.java b/core/src/test/java/com/kumuluz/ee/rest/test/utils/JpaUtil.java index 3b1f7fd..d87e49b 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/utils/JpaUtil.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/utils/JpaUtil.java @@ -1,8 +1,8 @@ package com.kumuluz.ee.rest.test.utils; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Persistence; /** * @author Tilen Faganel diff --git a/core/src/test/java/com/kumuluz/ee/rest/test/utils/UUIDConverter.java b/core/src/test/java/com/kumuluz/ee/rest/test/utils/UUIDConverter.java index abd1383..9d6fb51 100644 --- a/core/src/test/java/com/kumuluz/ee/rest/test/utils/UUIDConverter.java +++ b/core/src/test/java/com/kumuluz/ee/rest/test/utils/UUIDConverter.java @@ -20,29 +20,37 @@ */ package com.kumuluz.ee.rest.test.utils; -import javax.persistence.AttributeConverter; +import org.eclipse.persistence.sessions.Session; + import java.util.UUID; /** * @author gpor0 + * @author terli00 + * + * Implemented to override default Eclipse UUID Converter (EclipseLink version 4.0.2). + * Original converter does not have implemented null-check for objects. */ -@javax.persistence.Converter -public class UUIDConverter implements AttributeConverter { - +public class UUIDConverter extends org.eclipse.persistence.mappings.converters.UUIDConverter { @Override - public Object convertToDatabaseColumn(UUID uuid) { - return uuid; + public Object convertObjectValueToDataValue(Object o, Session session) { + if (o == null) { + return null; + } + + if (o instanceof UUID) { + return o.toString(); + } else { + throw new IllegalArgumentException("Source object is not an instance of java.util.UUID"); + } } @Override - public UUID convertToEntityAttribute(Object dbData) { - - if (dbData == null) { + public Object convertDataValueToObjectValue(Object o, Session session) { + if (o == null) { return null; - } else if (dbData instanceof UUID) { - return (UUID) dbData; } - return UUID.fromString(dbData.toString()); + return UUID.fromString(o.toString()); } } \ No newline at end of file diff --git a/core/src/test/resources/META-INF/persistence.xml b/core/src/test/resources/META-INF/persistence.xml index fe9b7cc..c993125 100644 --- a/core/src/test/resources/META-INF/persistence.xml +++ b/core/src/test/resources/META-INF/persistence.xml @@ -20,17 +20,17 @@ com.kumuluz.ee.rest.test.entities.ZonedDateTimeAttributeConverter - - + - - + + - - - + + + - + @@ -49,17 +49,17 @@ com.kumuluz.ee.rest.test.entities.ProjectLocation - - + - - + + - - - + + + - + diff --git a/core/src/test/resources/db_init.sql b/core/src/test/resources/db_init.sql index 10f0634..c42e78b 100644 --- a/core/src/test/resources/db_init.sql +++ b/core/src/test/resources/db_init.sql @@ -99,106 +99,106 @@ insert into users (id, uuid, firstname, lastname, email, country, ip_address, ro insert into users (id, uuid, firstname, lastname, email, country, ip_address, role, confirmed, createdAt, score, birth_date, registration_date, registration_time) values (99, '7932efdd-067b-4418-99e9-725af9d63d36', 'Shirley', 'Warren', 'swarren2q@blogger.com', 'Nigeria', '86.48.161.126', 0, FALSE, '2014-11-10T04:19:46Z', 15.7, '2015-04-29', '2015-04-30T04:20:11Z', '04:20:11'); insert into users (id, uuid, firstname, lastname, email, country, ip_address, role, confirmed, createdAt, score, birth_date, registration_date, registration_time) values (100, '7932efdd-067b-4418-1009-725af9d63d36', 'Jonathan', 'Hall', 'jhall2r@lycos.com', 'China', '40.240.80.91', 0, FALSE, '2014-07-23T08:47:02Z', 15.7, '2015-04-29', '2015-04-30T04:20:11Z', '04:20:11'); -insert into projects (id, name, description, status, user_id) values (1, 'Crimson', 'In hac habitasse platea dictumst. Morbi vestibulum, velit id pretium iaculis, diam erat fermentum justo, nec condimentum neque sapien placerat ante. Nulla justo.', 0, 15); -insert into projects (id, name, description, status, user_id) values (2, 'Blue', 'Cras non velit nec nisi vulputate nonummy. Maecenas tincidunt lacus at velit. Vivamus vel nulla eget eros elementum pellentesque. Quisque porta volutpat erat. ', 1, 14); -insert into projects (id, name, description, status, user_id) values (3, 'Goldenrod', 'In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt. Nulla mollis molestie lorem. Quisque ut erat. Curabitur gravida nisi at nibh.', 1, 4); -insert into projects (id, name, description, status, user_id) values (4, 'Blue', 'Integer non velit.', 0, 12); -insert into projects (id, name, description, status, user_id) values (5, 'Goldenrod', 'Nulla suscipit ligula in lacus. Curabitur at ipsum ac tellus semper interdum.', 0, 4); -insert into projects (id, name, description, status, user_id) values (6, 'Orange', 'Phasellus sit amet erat. Nulla tempus. Vivamus in felis eu sapien cursus vestibulum. Proin eu mi. Nulla ac enim.', 0, 44); -insert into projects (id, name, description, status, user_id) values (7, 'Mauv', 'Praesent lectus. Vestibulum quam sapien, varius ut, blandit non, interdum in, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.', 1, 99); -insert into projects (id, name, description, status, user_id) values (8, 'Yellow', 'Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis. Integer aliquet, massa id lobortis convallis, tortor risus dapibus augue, vel accumsan tellus nisi eu orci.', 1, 86); -insert into projects (id, name, description, status, user_id) values (9, 'Indigo', 'Integer ac neque. Duis bibendum. Morbi non quam nec dui luctus rutrum. Nulla tellus. In sagittis dui vel nisl. ', 0, 76); -insert into projects (id, name, description, status, user_id) values (10, 'Yellow', 'In est risus, auctor sed, tristique in, tempus sit amet, sem. Fusce consequat. Nulla nisl. Nunc nisl.', 0, 89); -insert into projects (id, name, description, status, user_id) values (11, 'Khaki', 'Praesent lectus. Vestibulum quam sapien, varius ut, blandit non, interdum in, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.', 0, 34); -insert into projects (id, name, description, status, user_id) values (12, 'Violet', 'Integer ac neque. Duis bibendum. Morbi non quam nec dui luctus rutrum. Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. ', 0, 69); -insert into projects (id, name, description, status, user_id) values (13, 'Purple', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin interdum mauris non ligula pellentesque ultrices.', 1, 84); -insert into projects (id, name, description, status, user_id) values (14, 'Aquamarine', 'Maecenas pulvinar lobortis est. Phasellus sit amet erat. Nulla tempus. Vivamus in felis eu sapien cursus vestibulum.', 1, 97); -insert into projects (id, name, description, status, user_id) values (15, 'Red', 'Praesent id massa id nisl venenatis lacinia. Aenean sit amet justo. Morbi ut odio. Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo.', 1, 61); -insert into projects (id, name, description, status, user_id) values (16, 'Yellow', 'Suspendisse potenti. Nullam porttitor lacus at turpis. Donec posuere metus vitae ipsum. Aliquam non mauris. ', 1, 73); -insert into projects (id, name, description, status, user_id) values (17, 'Red', 'Pellentesque at nulla. Suspendisse potenti. Cras in purus eu magna vulputate luctus.', 1, 4); -insert into projects (id, name, description, status, user_id) values (18, 'Maroon', 'Integer ac neque. Duis bibendum.', 0, 86); -insert into projects (id, name, description, status, user_id) values (19, 'Goldenrod', 'Suspendisse ornare consequat lectus. In est risus, auctor sed, tristique in, tempus sit amet, sem.', 0, 23); -insert into projects (id, name, description, status, user_id) values (20, 'Teal', 'Sed vel enim sit amet nunc viverra dapibus. Nulla suscipit ligula in lacus.', 1, 23); -insert into projects (id, name, description, status, user_id) values (21, 'Red', 'Suspendisse potenti.', 1, 28); -insert into projects (id, name, description, status, user_id) values (22, 'Crimson', 'Nulla tempus. Vivamus in felis eu sapien cursus vestibulum. Proin eu mi. ', 1, 56); -insert into projects (id, name, description, status, user_id) values (23, 'Fuscia', 'Morbi quis tortor id nulla ultrices aliquet. Maecenas leo odio, condimentum id, luctus nec, molestie sed, justo.', 1, 48); -insert into projects (id, name, description, status, user_id) values (24, 'Puce', 'Donec ut mauris eget massa tempor convallis. Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh. ', 0, 44); -insert into projects (id, name, description, status, user_id) values (25, 'Blue', 'In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt. Nulla mollis molestie lorem.', 1, 12); -insert into projects (id, name, description, status, user_id) values (26, 'Mauv', 'Proin interdum mauris non ligula pellentesque ultrices. Phasellus id sapien in sapien iaculis congue. ', 0, 30); -insert into projects (id, name, description, status, user_id) values (27, 'Orange', 'Aenean auctor gravida sem. Praesent id massa id nisl venenatis lacinia. Aenean sit amet justo.', 1, 64); -insert into projects (id, name, description, status, user_id) values (28, 'Fuscia', 'Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh. Quisque id justo sit amet sapien dignissim vestibulum.', 1, 28); -insert into projects (id, name, description, status, user_id) values (29, 'Khaki', 'Morbi a ipsum. Integer a nibh. In quis justo. Maecenas rhoncus aliquam lacus. Morbi quis tortor id nulla ultrices aliquet.', 1, 11); -insert into projects (id, name, description, status, user_id) values (30, 'Khaki', 'In blandit ultrices enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin interdum mauris non ligula pellentesque ultrices. ', 1, 75); -insert into projects (id, name, description, status, user_id) values (31, 'Puce', 'Nulla facilisi. Cras non velit nec nisi vulputate nonummy. Maecenas tincidunt lacus at velit.', 1, 49); -insert into projects (id, name, description, status, user_id) values (32, 'Aquamarine', 'Quisque ut erat. Curabitur gravida nisi at nibh. In hac habitasse platea dictumst.', 0, 93); -insert into projects (id, name, description, status, user_id) values (33, 'Green', 'Donec posuere metus vitae ipsum.', 0, 29); -insert into projects (id, name, description, status, user_id) values (34, 'Aquamarine', 'Morbi non lectus. Aliquam sit amet diam in magna bibendum imperdiet.', 1, 20); -insert into projects (id, name, description, status, user_id) values (35, 'Mauv', 'Aenean auctor gravida sem. Praesent id massa id nisl venenatis lacinia. Aenean sit amet justo. Morbi ut odio.', 0, 55); -insert into projects (id, name, description, status, user_id) values (36, 'Violet', 'Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.', 0, 47); -insert into projects (id, name, description, status, user_id) values (37, 'Maroon', 'Nam congue, risus semper porta volutpat, quam pede lobortis ligula, sit amet eleifend pede libero quis orci.', 0, 20); -insert into projects (id, name, description, status, user_id) values (38, 'Purple', 'Integer a nibh. In quis justo. Maecenas rhoncus aliquam lacus. Morbi quis tortor id nulla ultrices aliquet.', 0, 40); -insert into projects (id, name, description, status, user_id) values (39, 'Pink', 'Suspendisse potenti. In eleifend quam a odio. In hac habitasse platea dictumst.', 1, 60); -insert into projects (id, name, description, status, user_id) values (40, 'Teal', 'In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt.', 0, 49); -insert into projects (id, name, description, status, user_id) values (41, 'Yellow', 'Maecenas pulvinar lobortis est.', 1, 28); -insert into projects (id, name, description, status, user_id) values (42, 'Turquoise', 'Curabitur at ipsum ac tellus semper interdum. Mauris ullamcorper purus sit amet nulla.', 1, 90); -insert into projects (id, name, description, status, user_id) values (43, 'Red', 'Donec quis orci eget orci vehicula condimentum. Curabitur in libero ut massa volutpat convallis.', 1, 54); -insert into projects (id, name, description, status, user_id) values (44, 'Fuscia', 'Vestibulum ac est lacinia nisi venenatis tristique. Fusce congue, diam id ornare imperdiet, sapien urna pretium nisl, ut volutpat sapien arcu sed augue.', 0, 54); -insert into projects (id, name, description, status, user_id) values (45, 'Khaki', 'Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla dapibus dolor vel est.', 1, 39); -insert into projects (id, name, description, status, user_id) values (46, 'Pink', 'Suspendisse ornare consequat lectus. In est risus, auctor sed, tristique in, tempus sit amet, sem.', 1, 25); -insert into projects (id, name, description, status, user_id) values (47, 'Teal', 'Sed accumsan felis. Ut at dolor quis odio consequat varius.', 1, 46); -insert into projects (id, name, description, status, user_id) values (48, 'Crimson', 'Nullam sit amet turpis elementum ligula vehicula consequat. Morbi a ipsum. Integer a nibh.', 1, 41); -insert into projects (id, name, description, status, user_id) values (49, 'Purple', 'Suspendisse ornare consequat lectus.', 1, 86); -insert into projects (id, name, description, status, user_id) values (50, 'Aquamarine', 'In hac habitasse platea dictumst. Morbi vestibulum, velit id pretium iaculis, diam erat fermentum justo, nec condimentum neque sapien placerat ante.', 0, 19); -insert into projects (id, name, description, status, user_id) values (51, 'Purple', 'Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis faucibus accumsan odio.', 0, 25); -insert into projects (id, name, description, status, user_id) values (52, 'Turquoise', 'Pellentesque eget nunc. Donec quis orci eget orci vehicula condimentum.', 0, 26); -insert into projects (id, name, description, status, user_id) values (53, 'Crimson', 'Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis. Integer aliquet, massa id lobortis convallis, tortor risus dapibus augue, vel accumsan tellus nisi eu orci.', 0, 40); -insert into projects (id, name, description, status, user_id) values (54, 'Indigo', 'Suspendisse ornare consequat lectus. In est risus, auctor sed, tristique in, tempus sit amet, sem.', 1, 78); -insert into projects (id, name, description, status, user_id) values (55, 'Khaki', 'Vivamus vestibulum sagittis sapien. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', 0, 36); -insert into projects (id, name, description, status, user_id) values (56, 'Purple', 'Nunc nisl. Duis bibendum, felis sed interdum venenatis, turpis enim blandit mi, in porttitor pede justo eu massa.', 0, 33); -insert into projects (id, name, description, status, user_id) values (57, 'Khaki', 'In congue. Etiam justo. Etiam pretium iaculis justo. In hac habitasse platea dictumst. Etiam faucibus cursus urna.', 1, 9); -insert into projects (id, name, description, status, user_id) values (58, 'Orange', 'Donec ut dolor. Morbi vel lectus in quam fringilla rhoncus. Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.', 1, 94); -insert into projects (id, name, description, status, user_id) values (59, 'Purple', 'In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem. Duis aliquam convallis nunc.', 0, 45); -insert into projects (id, name, description, status, user_id) values (60, 'Aquamarine', 'Morbi non lectus. Aliquam sit amet diam in magna bibendum imperdiet. Nullam orci pede, venenatis non, sodales sed, tincidunt eu, felis.', 0, 11); -insert into projects (id, name, description, status, user_id) values (61, 'Yellow', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus.', 1, 83); -insert into projects (id, name, description, status, user_id) values (62, 'Maroon', 'Cras pellentesque volutpat dui. Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc.', 1, 20); -insert into projects (id, name, description, status, user_id) values (63, 'Maroon', 'Nullam varius. Nulla facilisi. Cras non velit nec nisi vulputate nonummy. Maecenas tincidunt lacus at velit.', 0, 33); -insert into projects (id, name, description, status, user_id) values (64, 'Yellow', 'In eleifend quam a odio. In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt.', 1, 100); -insert into projects (id, name, description, status, user_id) values (65, 'Violet', 'Etiam pretium iaculis justo. In hac habitasse platea dictumst. Etiam faucibus cursus urna. Ut tellus.', 0, 42); -insert into projects (id, name, description, status, user_id) values (66, 'Indigo', 'Ut tellus.', 1, 46); -insert into projects (id, name, description, status, user_id) values (67, 'Khaki', 'Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est. Phasellus sit amet erat. Nulla tempus.', 1, 85); -insert into projects (id, name, description, status, user_id) values (68, 'Green', 'Etiam justo. Etiam pretium iaculis justo. In hac habitasse platea dictumst.', 0, 18); -insert into projects (id, name, description, status, user_id) values (69, 'Green', 'Morbi vel lectus in quam fringilla rhoncus. Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.', 0, 89); -insert into projects (id, name, description, status, user_id) values (70, 'Maroon', 'Mauris lacinia sapien quis libero. Nullam sit amet turpis elementum ligula vehicula consequat. Morbi a ipsum. Integer a nibh.', 0, 95); -insert into projects (id, name, description, status, user_id) values (71, 'Yellow', 'Quisque ut erat.', 0, 21); -insert into projects (id, name, description, status, user_id) values (72, 'Maroon', 'Suspendisse accumsan tortor quis turpis. Sed ante. Vivamus tortor. Duis mattis egestas metus. Aenean fermentum.', 0, 86); -insert into projects (id, name, description, status, user_id) values (73, 'Goldenrod', 'Integer non velit. Donec diam neque, vestibulum eget, vulputate ut, ultrices vel, augue.', 1, 86); -insert into projects (id, name, description, status, user_id) values (74, 'Teal', 'Integer tincidunt ante vel ipsum. Praesent blandit lacinia erat. Vestibulum sed magna at nunc commodo placerat. ', 1, 65); -insert into projects (id, name, description, status, user_id) values (75, 'Green', 'Suspendisse potenti. Cras in purus eu magna vulputate luctus.', 1, 99); -insert into projects (id, name, description, status, user_id) values (76, 'Crimson', 'In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt.', 1, 34); -insert into projects (id, name, description, status, user_id) values (77, 'Aquamarine', 'Vivamus vestibulum sagittis sapien. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', 0, 33); -insert into projects (id, name, description, status, user_id) values (78, 'Pink', 'Phasellus id sapien in sapien iaculis congue. Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl.', 0, 76); -insert into projects (id, name, description, status, user_id) values (79, 'Red', 'Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh.', 1, 14); -insert into projects (id, name, description, status, user_id) values (80, 'Green', 'Aenean fermentum. Donec ut mauris eget massa tempor convallis.', 1, 27); -insert into projects (id, name, description, status, user_id) values (81, 'Yellow', 'Vestibulum rutrum rutrum neque. Aenean auctor gravida sem.', 0, 56); -insert into projects (id, name, description, status, user_id) values (82, 'Mauv', 'Vestibulum ac est lacinia nisi venenatis tristique.', 1, 77); -insert into projects (id, name, description, status, user_id) values (83, 'Puce', 'Nulla ac enim. In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem.', 1, 11); -insert into projects (id, name, description, status, user_id) values (84, 'Aquamarine', 'Maecenas leo odio, condimentum id, luctus nec, molestie sed, justo.', 0, 5); -insert into projects (id, name, description, status, user_id) values (85, 'Teal', 'Sed vel enim sit amet nunc viverra dapibus. Nulla suscipit ligula in lacus.', 1, 28); -insert into projects (id, name, description, status, user_id) values (86, 'Fuscia', 'Praesent blandit. Nam nulla. Integer pede justo, lacinia eget, tincidunt eget, tempus vel, pede.', 0, 19); -insert into projects (id, name, description, status, user_id) values (87, 'Blue', 'Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.', 0, 8); -insert into projects (id, name, description, status, user_id) values (88, 'Blue', 'Aliquam erat volutpat. In congue. Etiam justo. Etiam pretium iaculis justo.', 1, 15); -insert into projects (id, name, description, status, user_id) values (89, 'Fuscia', 'Etiam vel augue. Vestibulum rutrum rutrum neque.', 0, 47); -insert into projects (id, name, description, status, user_id) values (90, 'Maroon', 'Duis consequat dui nec nisi volutpat eleifend. Donec ut dolor. ', 0, 28); -insert into projects (id, name, description, status, user_id) values (91, 'Green', 'Mauris sit amet eros. Suspendisse accumsan tortor quis turpis. Sed ante.', 1, 89); -insert into projects (id, name, description, status, user_id) values (92, 'Aquamarine', 'Maecenas tincidunt lacus at velit. Vivamus vel nulla eget eros elementum pellentesque.', 0, 84); -insert into projects (id, name, description, status, user_id) values (93, 'Green', 'Nulla nisl. Nunc nisl. Duis bibendum, felis sed interdum venenatis, turpis enim blandit mi, in porttitor pede justo eu massa.', 0, 83); -insert into projects (id, name, description, status, user_id) values (94, 'Goldenrod', 'In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt.', 0, 16); -insert into projects (id, name, description, status, user_id) values (95, 'Violet', 'Curabitur convallis. Duis consequat dui nec nisi volutpat eleifend. Donec ut dolor.', 0, 34); -insert into projects (id, name, description, status, user_id) values (96, 'Red', 'Mauris sit amet eros. Suspendisse accumsan tortor quis turpis. Sed ante.', 0, 50); -insert into projects (id, name, description, status, user_id) values (97, 'Orange', 'Proin at turpis a pede posuere nonummy. Integer non velit. Donec diam neque, vestibulum eget, vulputate ut, ultrices vel, augue.', 1, 44); -insert into projects (id, name, description, status, user_id) values (98, 'Mauv', 'In hac habitasse platea dictumst. Etiam faucibus cursus urna. Ut tellus.', 1, 80); -insert into projects (id, name, description, status, user_id) values (99, 'Teal', 'Duis aliquam convallis nunc. Proin at turpis a pede posuere nonummy. Integer non velit.', 0, 41); -insert into projects (id, name, description, status, user_id) values (100, 'Maroon', null, 0, 83); +insert into projects (id, name, description, status, user_id, public_id) values (1, 'Crimson', 'In hac habitasse platea dictumst. Morbi vestibulum, velit id pretium iaculis, diam erat fermentum justo, nec condimentum neque sapien placerat ante. Nulla justo.', 0, 15, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (2, 'Blue', 'Cras non velit nec nisi vulputate nonummy. Maecenas tincidunt lacus at velit. Vivamus vel nulla eget eros elementum pellentesque. Quisque porta volutpat erat. ', 1, 14, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (3, 'Goldenrod', 'In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt. Nulla mollis molestie lorem. Quisque ut erat. Curabitur gravida nisi at nibh.', 1, 4, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (4, 'Blue', 'Integer non velit.', 0, 12, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (5, 'Goldenrod', 'Nulla suscipit ligula in lacus. Curabitur at ipsum ac tellus semper interdum.', 0, 4, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (6, 'Orange', 'Phasellus sit amet erat. Nulla tempus. Vivamus in felis eu sapien cursus vestibulum. Proin eu mi. Nulla ac enim.', 0, 44, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (7, 'Mauv', 'Praesent lectus. Vestibulum quam sapien, varius ut, blandit non, interdum in, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.', 1, 99, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (8, 'Yellow', 'Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis. Integer aliquet, massa id lobortis convallis, tortor risus dapibus augue, vel accumsan tellus nisi eu orci.', 1, 86, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (9, 'Indigo', 'Integer ac neque. Duis bibendum. Morbi non quam nec dui luctus rutrum. Nulla tellus. In sagittis dui vel nisl. ', 0, 76, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (10, 'Yellow', 'In est risus, auctor sed, tristique in, tempus sit amet, sem. Fusce consequat. Nulla nisl. Nunc nisl.', 0, 89, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (11, 'Khaki', 'Praesent lectus. Vestibulum quam sapien, varius ut, blandit non, interdum in, ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.', 0, 34, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (12, 'Violet', 'Integer ac neque. Duis bibendum. Morbi non quam nec dui luctus rutrum. Nulla tellus. In sagittis dui vel nisl. Duis ac nibh. ', 0, 69, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (13, 'Purple', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin interdum mauris non ligula pellentesque ultrices.', 1, 84, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (14, 'Aquamarine', 'Maecenas pulvinar lobortis est. Phasellus sit amet erat. Nulla tempus. Vivamus in felis eu sapien cursus vestibulum.', 1, 97, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (15, 'Red', 'Praesent id massa id nisl venenatis lacinia. Aenean sit amet justo. Morbi ut odio. Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo.', 1, 61, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (16, 'Yellow', 'Suspendisse potenti. Nullam porttitor lacus at turpis. Donec posuere metus vitae ipsum. Aliquam non mauris. ', 1, 73, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (17, 'Red', 'Pellentesque at nulla. Suspendisse potenti. Cras in purus eu magna vulputate luctus.', 1, 4, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (18, 'Maroon', 'Integer ac neque. Duis bibendum.', 0, 86, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (19, 'Goldenrod', 'Suspendisse ornare consequat lectus. In est risus, auctor sed, tristique in, tempus sit amet, sem.', 0, 23, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (20, 'Teal', 'Sed vel enim sit amet nunc viverra dapibus. Nulla suscipit ligula in lacus.', 1, 23, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (21, 'Red', 'Suspendisse potenti.', 1, 28, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (22, 'Crimson', 'Nulla tempus. Vivamus in felis eu sapien cursus vestibulum. Proin eu mi. ', 1, 56, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (23, 'Fuscia', 'Morbi quis tortor id nulla ultrices aliquet. Maecenas leo odio, condimentum id, luctus nec, molestie sed, justo.', 1, 48, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (24, 'Puce', 'Donec ut mauris eget massa tempor convallis. Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh. ', 0, 44, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (25, 'Blue', 'In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt. Nulla mollis molestie lorem.', 1, 12, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (26, 'Mauv', 'Proin interdum mauris non ligula pellentesque ultrices. Phasellus id sapien in sapien iaculis congue. ', 0, 30, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (27, 'Orange', 'Aenean auctor gravida sem. Praesent id massa id nisl venenatis lacinia. Aenean sit amet justo.', 1, 64, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (28, 'Fuscia', 'Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh. Quisque id justo sit amet sapien dignissim vestibulum.', 1, 28, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (29, 'Khaki', 'Morbi a ipsum. Integer a nibh. In quis justo. Maecenas rhoncus aliquam lacus. Morbi quis tortor id nulla ultrices aliquet.', 1, 11, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (30, 'Khaki', 'In blandit ultrices enim. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin interdum mauris non ligula pellentesque ultrices. ', 1, 75, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (31, 'Puce', 'Nulla facilisi. Cras non velit nec nisi vulputate nonummy. Maecenas tincidunt lacus at velit.', 1, 49, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (32, 'Aquamarine', 'Quisque ut erat. Curabitur gravida nisi at nibh. In hac habitasse platea dictumst.', 0, 93, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (33, 'Green', 'Donec posuere metus vitae ipsum.', 0, 29, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (34, 'Aquamarine', 'Morbi non lectus. Aliquam sit amet diam in magna bibendum imperdiet.', 1, 20, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (35, 'Mauv', 'Aenean auctor gravida sem. Praesent id massa id nisl venenatis lacinia. Aenean sit amet justo. Morbi ut odio.', 0, 55, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (36, 'Violet', 'Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.', 0, 47, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (37, 'Maroon', 'Nam congue, risus semper porta volutpat, quam pede lobortis ligula, sit amet eleifend pede libero quis orci.', 0, 20, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (38, 'Purple', 'Integer a nibh. In quis justo. Maecenas rhoncus aliquam lacus. Morbi quis tortor id nulla ultrices aliquet.', 0, 40, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (39, 'Pink', 'Suspendisse potenti. In eleifend quam a odio. In hac habitasse platea dictumst.', 1, 60, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (40, 'Teal', 'In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt.', 0, 49, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (41, 'Yellow', 'Maecenas pulvinar lobortis est.', 1, 28, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (42, 'Turquoise', 'Curabitur at ipsum ac tellus semper interdum. Mauris ullamcorper purus sit amet nulla.', 1, 90, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (43, 'Red', 'Donec quis orci eget orci vehicula condimentum. Curabitur in libero ut massa volutpat convallis.', 1, 54, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (44, 'Fuscia', 'Vestibulum ac est lacinia nisi venenatis tristique. Fusce congue, diam id ornare imperdiet, sapien urna pretium nisl, ut volutpat sapien arcu sed augue.', 0, 54, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (45, 'Khaki', 'Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla dapibus dolor vel est.', 1, 39, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (46, 'Pink', 'Suspendisse ornare consequat lectus. In est risus, auctor sed, tristique in, tempus sit amet, sem.', 1, 25, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (47, 'Teal', 'Sed accumsan felis. Ut at dolor quis odio consequat varius.', 1, 46, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (48, 'Crimson', 'Nullam sit amet turpis elementum ligula vehicula consequat. Morbi a ipsum. Integer a nibh.', 1, 41, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (49, 'Purple', 'Suspendisse ornare consequat lectus.', 1, 86, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (50, 'Aquamarine', 'In hac habitasse platea dictumst. Morbi vestibulum, velit id pretium iaculis, diam erat fermentum justo, nec condimentum neque sapien placerat ante.', 0, 19, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (51, 'Purple', 'Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis faucibus accumsan odio.', 0, 25, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (52, 'Turquoise', 'Pellentesque eget nunc. Donec quis orci eget orci vehicula condimentum.', 0, 26, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (53, 'Crimson', 'Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis. Integer aliquet, massa id lobortis convallis, tortor risus dapibus augue, vel accumsan tellus nisi eu orci.', 0, 40, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (54, 'Indigo', 'Suspendisse ornare consequat lectus. In est risus, auctor sed, tristique in, tempus sit amet, sem.', 1, 78, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (55, 'Khaki', 'Vivamus vestibulum sagittis sapien. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', 0, 36, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (56, 'Purple', 'Nunc nisl. Duis bibendum, felis sed interdum venenatis, turpis enim blandit mi, in porttitor pede justo eu massa.', 0, 33, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (57, 'Khaki', 'In congue. Etiam justo. Etiam pretium iaculis justo. In hac habitasse platea dictumst. Etiam faucibus cursus urna.', 1, 9, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (58, 'Orange', 'Donec ut dolor. Morbi vel lectus in quam fringilla rhoncus. Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.', 1, 94, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (59, 'Purple', 'In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem. Duis aliquam convallis nunc.', 0, 45, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (60, 'Aquamarine', 'Morbi non lectus. Aliquam sit amet diam in magna bibendum imperdiet. Nullam orci pede, venenatis non, sodales sed, tincidunt eu, felis.', 0, 11, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (61, 'Yellow', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin risus.', 1, 83, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (62, 'Maroon', 'Cras pellentesque volutpat dui. Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc.', 1, 20, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (63, 'Maroon', 'Nullam varius. Nulla facilisi. Cras non velit nec nisi vulputate nonummy. Maecenas tincidunt lacus at velit.', 0, 33, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (64, 'Yellow', 'In eleifend quam a odio. In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt.', 1, 100, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (65, 'Violet', 'Etiam pretium iaculis justo. In hac habitasse platea dictumst. Etiam faucibus cursus urna. Ut tellus.', 0, 42, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (66, 'Indigo', 'Ut tellus.', 1, 46, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (67, 'Khaki', 'Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est. Phasellus sit amet erat. Nulla tempus.', 1, 85, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (68, 'Green', 'Etiam justo. Etiam pretium iaculis justo. In hac habitasse platea dictumst.', 0, 18, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (69, 'Green', 'Morbi vel lectus in quam fringilla rhoncus. Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.', 0, 89, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (70, 'Maroon', 'Mauris lacinia sapien quis libero. Nullam sit amet turpis elementum ligula vehicula consequat. Morbi a ipsum. Integer a nibh.', 0, 95, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (71, 'Yellow', 'Quisque ut erat.', 0, 21, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (72, 'Maroon', 'Suspendisse accumsan tortor quis turpis. Sed ante. Vivamus tortor. Duis mattis egestas metus. Aenean fermentum.', 0, 86, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (73, 'Goldenrod', 'Integer non velit. Donec diam neque, vestibulum eget, vulputate ut, ultrices vel, augue.', 1, 86, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (74, 'Teal', 'Integer tincidunt ante vel ipsum. Praesent blandit lacinia erat. Vestibulum sed magna at nunc commodo placerat. ', 1, 65, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (75, 'Green', 'Suspendisse potenti. Cras in purus eu magna vulputate luctus.', 1, 99, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (76, 'Crimson', 'In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt.', 1, 34, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (77, 'Aquamarine', 'Vivamus vestibulum sagittis sapien. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.', 0, 33, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (78, 'Pink', 'Phasellus id sapien in sapien iaculis congue. Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl.', 0, 76, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (79, 'Red', 'Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh.', 1, 14, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (80, 'Green', 'Aenean fermentum. Donec ut mauris eget massa tempor convallis.', 1, 27, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (81, 'Yellow', 'Vestibulum rutrum rutrum neque. Aenean auctor gravida sem.', 0, 56, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (82, 'Mauv', 'Vestibulum ac est lacinia nisi venenatis tristique.', 1, 77, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (83, 'Puce', 'Nulla ac enim. In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem.', 1, 11, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (84, 'Aquamarine', 'Maecenas leo odio, condimentum id, luctus nec, molestie sed, justo.', 0, 5, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (85, 'Teal', 'Sed vel enim sit amet nunc viverra dapibus. Nulla suscipit ligula in lacus.', 1, 28, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (86, 'Fuscia', 'Praesent blandit. Nam nulla. Integer pede justo, lacinia eget, tincidunt eget, tempus vel, pede.', 0, 19, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (87, 'Blue', 'Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.', 0, 8, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (88, 'Blue', 'Aliquam erat volutpat. In congue. Etiam justo. Etiam pretium iaculis justo.', 1, 15, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (89, 'Fuscia', 'Etiam vel augue. Vestibulum rutrum rutrum neque.', 0, 47, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (90, 'Maroon', 'Duis consequat dui nec nisi volutpat eleifend. Donec ut dolor. ', 0, 28, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (91, 'Green', 'Mauris sit amet eros. Suspendisse accumsan tortor quis turpis. Sed ante.', 1, 89, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (92, 'Aquamarine', 'Maecenas tincidunt lacus at velit. Vivamus vel nulla eget eros elementum pellentesque.', 0, 84, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (93, 'Green', 'Nulla nisl. Nunc nisl. Duis bibendum, felis sed interdum venenatis, turpis enim blandit mi, in porttitor pede justo eu massa.', 0, 83, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (94, 'Goldenrod', 'In hac habitasse platea dictumst. Maecenas ut massa quis augue luctus tincidunt.', 0, 16, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (95, 'Violet', 'Curabitur convallis. Duis consequat dui nec nisi volutpat eleifend. Donec ut dolor.', 0, 34, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (96, 'Red', 'Mauris sit amet eros. Suspendisse accumsan tortor quis turpis. Sed ante.', 0, 50, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (97, 'Orange', 'Proin at turpis a pede posuere nonummy. Integer non velit. Donec diam neque, vestibulum eget, vulputate ut, ultrices vel, augue.', 1, 44, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (98, 'Mauv', 'In hac habitasse platea dictumst. Etiam faucibus cursus urna. Ut tellus.', 1, 80, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (99, 'Teal', 'Duis aliquam convallis nunc. Proin at turpis a pede posuere nonummy. Integer non velit.', 0, 41, UUID()); +insert into projects (id, name, description, status, user_id, public_id) values (100, 'Maroon', null, 0, 83, UUID()); insert into user_careers (id, years, current_position, user_id) values (1, 5, 'Developer', 4); @@ -206,6 +206,10 @@ insert into events (id, begins_at, intermission_at, ends_at) values (1, '2020-01 insert into events (id, begins_at, intermission_at, ends_at) values (2, '2020-01-02T00:00:00.00Z', '2020-01-02T09:00:00.00Z', '2020-01-02T18:00:00.00Z'); insert into events (id, begins_at, intermission_at, ends_at) values (3, '2020-01-03T00:00:00.00Z', '2020-01-03T09:00:00.00Z', '2020-01-03T18:00:00.00Z'); +insert into event_notes (event_id, event_note) values (1, 'Event 1 Note 1'); +insert into event_notes (event_id, event_note) values (1, 'Event 1 Note 2'); +insert into event_notes (event_id, event_note) values (3, 'Event 3 Note 1'); + insert into project_locations (id, external_id, location_name, project_id) values (1, 'z', 'Ljubljana', 16); insert into project_locations (id, external_id, location_name, project_id) values (2, 'y', 'Celje', 14); insert into project_locations (id, external_id, location_name, project_id) values (3, 'x', 'Maribor', 50); diff --git a/pom.xml b/pom.xml index b3ef154..9d97cb3 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.kumuluz.ee.rest kumuluzee-rest - 2.1.0-SNAPSHOT + 3.0.0-SNAPSHOT core @@ -26,17 +26,19 @@ 11 UTF-8 - 2.2 + 3.1.0 1.4.1 + 9.6 + 4.0.1 + 4.0.4 - 4.13.1 - 2.2.220 - 2.7.10 - 5.5.7.Final + 4.13.2 + 2.2.224 + 4.0.2 + 6.3.1.Final 1.6.13 - 1.6 - 2.3.1 + 3.1.0 @@ -102,9 +104,9 @@ - javax.persistence - javax.persistence-api - ${javax.persistence-api.version} + jakarta.persistence + jakarta.persistence-api + ${jakarta.persistence-api.version} provided @@ -113,9 +115,37 @@ ${parboiled-java.version} - javax.xml.bind - jaxb-api - ${jaxb-api.version} + jakarta.xml.bind + jakarta.xml.bind-api + ${jakarta-xml-bind-api.version} + + + com.sun.xml.bind + jaxb-impl + ${jaxb-impl.version} + runtime + + + + + org.ow2.asm + asm + ${asm.version} + + + org.ow2.asm + asm-tree + ${asm.version} + + + org.ow2.asm + asm-analysis + ${asm.version} + + + org.ow2.asm + asm-util + ${asm.version}