branch feature/spgeed updated (c3d598ef -> ddd012c1)
This is an automated email from the git hooks/post-receive script. New change to branch feature/spgeed in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git from c3d598ef Pollen User Service passed to Spgeed only missing (Delete emailaddress) new 34c91488 correcting PollenUserServiceTest (display error | comment error type) new ddd012c1 PollenUserService + PollenResourceService working The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit ddd012c127320dd543a5a4bdd5511ae3fcca3383 Author: Killian <killian.herbreteau@epitech.eu> Date: Wed Oct 30 17:35:46 2019 +0100 PollenUserService + PollenResourceService working commit 34c91488657aa3ea76d1e48d17902b9307ddd6ce Author: Killian <killian.herbreteau@epitech.eu> Date: Tue Oct 29 16:43:10 2019 +0100 correcting PollenUserServiceTest (display error | comment error type) Summary of changes: .../persistence/Dao/PollenChoiceSpgeedDao.java | 16 +- .../persistence/Dao/PollenPollSpgeedDao.java | 182 +++++++++++---------- .../persistence/Dao/PollenPrincipalSpgeedDao.java | 21 +-- .../persistence/Dao/PollenResourceSpgeedDao.java | 78 ++++++++- .../Dao/PollenUserCredentialSpgeedDao.java | 70 +++++++- .../Dao/PollenUserEmailAddressSpgeedDao.java | 56 ++++--- .../persistence/Dao/PollenUserSpgeedDao.java | 108 ++++++------ .../chorem/pollen/persistence/PollenMapper.java | 58 ++++--- .../services/service/PollenResourceService.java | 25 +-- .../services/service/PollenServiceSupport.java | 27 ++- .../pollen/services/service/PollenUserService.java | 70 ++++---- .../pollen/services/service/SocialAuthService.java | 25 +-- .../pollen/services/AbstractPollenServiceTest.java | 3 +- .../services/service/PollenUserServiceTest.java | 13 +- 14 files changed, 455 insertions(+), 297 deletions(-) -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/spgeed in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 34c91488657aa3ea76d1e48d17902b9307ddd6ce Author: Killian <killian.herbreteau@epitech.eu> Date: Tue Oct 29 16:43:10 2019 +0100 correcting PollenUserServiceTest (display error | comment error type) --- .../chorem/pollen/services/AbstractPollenServiceTest.java | 3 ++- .../pollen/services/service/PollenUserServiceTest.java | 14 +++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/AbstractPollenServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/AbstractPollenServiceTest.java index ad495f7e..bedb4bc0 100644 --- a/pollen-services/src/test/java/org/chorem/pollen/services/AbstractPollenServiceTest.java +++ b/pollen-services/src/test/java/org/chorem/pollen/services/AbstractPollenServiceTest.java @@ -33,6 +33,7 @@ import org.chorem.pollen.services.test.FakePollenServiceContext; import org.junit.After; import org.junit.Assert; import org.junit.Rule; +import org.omg.PortableInterceptor.SYSTEM_EXCEPTION; import java.util.Locale; @@ -77,7 +78,7 @@ public abstract class AbstractPollenServiceTest { protected void assertErrorKeyFound(InvalidFormException e, String... keys) { Multimap<String, String> errors = e.getErrors(); - Assert.assertEquals("Expected " + keys.length + " errors, but had " + errors.keySet(), keys.length, errors.keySet().size()); + Assert.assertEquals("Expected " + keys.length + " errors, but had " + errors.keySet().size(), keys.length, errors.keySet().size()); for (String key : keys) { Assert.assertTrue("Expected error:" + key + ", but not found among:" + errors.keySet(), errors.containsKey(key)); diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java index 80c4d071..7fd1c152 100644 --- a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java +++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java @@ -21,15 +21,12 @@ package org.chorem.pollen.services.service; * #L% */ +import com.google.common.base.Preconditions; import org.apache.commons.collections4.CollectionUtils; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.PollenUserEmailAddress; import org.chorem.pollen.services.AbstractPollenServiceTest; -import org.chorem.pollen.services.bean.PaginationResultBean; -import org.chorem.pollen.services.bean.PollenEntityId; -import org.chorem.pollen.services.bean.PollenEntityRef; -import org.chorem.pollen.services.bean.PollenUserBean; -import org.chorem.pollen.services.bean.PollenUserEmailAddressBean; +import org.chorem.pollen.services.bean.*; import org.chorem.pollen.services.service.security.PollenAuthenticationException; import org.chorem.pollen.services.service.security.PollenDefaultEmailAddressException; import org.chorem.pollen.services.service.security.PollenEmailNotValidatedException; @@ -90,8 +87,8 @@ public class PollenUserServiceTest extends AbstractPollenServiceTest { try { service.getUser("pollen_user_tony_" + System.nanoTime()); - - } catch (TopiaNoResultException e) { + Assert.fail("Should throw an error"); + } catch (TopiaNoResultException | IllegalArgumentException e) { Assert.assertTrue(true); } @@ -124,7 +121,7 @@ public class PollenUserServiceTest extends AbstractPollenServiceTest { try { // no name // no generate password - // unauthorized email + // unauthorized email pattern service.createUser(newUser); Assert.fail(); } catch (InvalidFormException e) { @@ -266,7 +263,6 @@ public class PollenUserServiceTest extends AbstractPollenServiceTest { service.removeEmailAddress(savedUser.getEntityId(), lastEmailAddress.getEntityId()); savedUser = service.getUser(savedUser.getEntityId()); Assert.assertEquals(2, savedUser.getEmailAddresses().size()); - } protected void setEmails(PollenUserBean user, String ... emailAddresses) { -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/spgeed in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit ddd012c127320dd543a5a4bdd5511ae3fcca3383 Author: Killian <killian.herbreteau@epitech.eu> Date: Wed Oct 30 17:35:46 2019 +0100 PollenUserService + PollenResourceService working --- .../persistence/Dao/PollenChoiceSpgeedDao.java | 16 +- .../persistence/Dao/PollenPollSpgeedDao.java | 182 +++++++++++---------- .../persistence/Dao/PollenPrincipalSpgeedDao.java | 21 +-- .../persistence/Dao/PollenResourceSpgeedDao.java | 78 ++++++++- .../Dao/PollenUserCredentialSpgeedDao.java | 70 +++++++- .../Dao/PollenUserEmailAddressSpgeedDao.java | 56 ++++--- .../persistence/Dao/PollenUserSpgeedDao.java | 108 ++++++------ .../chorem/pollen/persistence/PollenMapper.java | 58 ++++--- .../services/service/PollenResourceService.java | 25 +-- .../services/service/PollenServiceSupport.java | 27 ++- .../pollen/services/service/PollenUserService.java | 70 ++++---- .../pollen/services/service/SocialAuthService.java | 25 +-- .../services/service/PollenUserServiceTest.java | 1 - 13 files changed, 449 insertions(+), 288 deletions(-) diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenChoiceSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenChoiceSpgeedDao.java index be90ae16..c952c123 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenChoiceSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenChoiceSpgeedDao.java @@ -1,9 +1,19 @@ package org.chorem.pollen.persistence.Dao; -import org.chorem.pollen.persistence.entity.Choice; -import org.nuiton.spgeed.SpgeedDao; +import static org.chorem.pollen.persistence.entity.Choice.*; public interface PollenChoiceSpgeedDao extends PollenSpgeedDao { - String propertieswoForeignKey[] = {Choice.PROPERTY_CHOICE_VALUE, Choice.PROPERTY_DESCRIPTION, Choice.PROPERTY_CHOICE_ORDER, Choice.PROPERTY_TOPIA_ID}; + String choiceName = "ch"; + + String aggName = "choices_agg"; + + String properties = choiceName + "." + PROPERTY_TOPIA_ID + ", " + + choiceName + "." + PROPERTY_TOPIA_VERSION + ", " + + choiceName + "." + PROPERTY_TOPIA_CREATE_DATE + ", " + + choiceName + "." + PROPERTY_CHOICE_VALUE + ", " + + choiceName + "." + PROPERTY_DESCRIPTION + ", " + + choiceName + "." + PROPERTY_CREATOR + ", " + + choiceName + "." + PROPERTY_CHOICE_TYPE + ", " + + choiceName + "." + PROPERTY_QUESTION; } \ No newline at end of file diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPollSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPollSpgeedDao.java index 2736a54e..42343eee 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPollSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPollSpgeedDao.java @@ -6,44 +6,46 @@ import org.chorem.pollen.persistence.entity.PollenPrincipal; import org.nuiton.spgeed.annotations.Select; import org.nuiton.spgeed.annotations.Update; +import static org.chorem.pollen.persistence.entity.Poll.*; + public interface PollenPollSpgeedDao extends PollenSpgeedDao { String pollName = "po"; String aggName = "polls_agg"; - String properties = pollName + "." + Poll.PROPERTY_TOPIA_ID - + pollName + "." + Poll.PROPERTY_TOPIA_VERSION + ", " - + pollName + "." + Poll.PROPERTY_TOPIA_CREATE_DATE + ", " - + pollName + "." + Poll.PROPERTY_TITLE + ", " - + pollName + "." + Poll.PROPERTY_DESCRIPTION + ", " - + pollName + "." + Poll.PROPERTY_BEGIN_DATE + ", " - + pollName + "." + Poll.PROPERTY_END_DATE + ", " - + pollName + "." + Poll.PROPERTY_ANONYMOUS_VOTE_ALLOWED + ", " - + pollName + "." + Poll.PROPERTY_CONTINUOUS_RESULTS + ", " - + pollName + "." + Poll.PROPERTY_NOTIFY_ME_HOURS_BEFORE_POLL_ENDS + ", " - + pollName + "." + Poll.PROPERTY_POLL_END_REMINDER_SENT + ", " - + pollName + "." + Poll.PROPERTY_NOTIFICATION_LOCALE + ", " - + pollName + "." + Poll.PROPERTY_VOTE_NOTIFICATION + ", " - + pollName + "." + Poll.PROPERTY_POLL_TYPE + ", " - + pollName + "." + Poll.PROPERTY_VOTE_VISIBILITY + ", " - + pollName + "." + Poll.PROPERTY_COMMENT_VISIBILITY + ", " - + pollName + "." + Poll.PROPERTY_RESULT_VISIBILITY + ", " - + pollName + "." + Poll.PROPERTY_CREATOR + ", " - + pollName + "." + Poll.PROPERTY_FEED_CONTENT + ", " - + pollName + "." + Poll.PROPERTY_COMMENT_NOTIFICATION + ", " - + pollName + "." + Poll.PROPERTY_NEW_CHOICE_NOTIFICATION + ", " - + pollName + "." + Poll.PROPERTY_GTU_VALIDATION_DATE + ", " - + pollName + "." + Poll.PROPERTY_PREMIUM + ", " - + pollName + "." + Poll.PROPERTY_NOTIFICATION_MAX_VOTER_SEND + ", " - + pollName + "." + Poll.PROPERTY_EMAIL_ADDRESS_SUFFIXES; + String properties = pollName + "." + PROPERTY_TOPIA_ID + + pollName + "." + PROPERTY_TOPIA_VERSION + ", " + + pollName + "." + PROPERTY_TOPIA_CREATE_DATE + ", " + + pollName + "." + PROPERTY_TITLE + ", " + + pollName + "." + PROPERTY_DESCRIPTION + ", " + + pollName + "." + PROPERTY_BEGIN_DATE + ", " + + pollName + "." + PROPERTY_END_DATE + ", " + + pollName + "." + PROPERTY_ANONYMOUS_VOTE_ALLOWED + ", " + + pollName + "." + PROPERTY_CONTINUOUS_RESULTS + ", " + + pollName + "." + PROPERTY_NOTIFY_ME_HOURS_BEFORE_POLL_ENDS + ", " + + pollName + "." + PROPERTY_POLL_END_REMINDER_SENT + ", " + + pollName + "." + PROPERTY_NOTIFICATION_LOCALE + ", " + + pollName + "." + PROPERTY_VOTE_NOTIFICATION + ", " + + pollName + "." + PROPERTY_POLL_TYPE + ", " + + pollName + "." + PROPERTY_VOTE_VISIBILITY + ", " + + pollName + "." + PROPERTY_COMMENT_VISIBILITY + ", " + + pollName + "." + PROPERTY_RESULT_VISIBILITY + ", " + + pollName + "." + PROPERTY_CREATOR + ", " + + pollName + "." + PROPERTY_FEED_CONTENT + ", " + + pollName + "." + PROPERTY_COMMENT_NOTIFICATION + ", " + + pollName + "." + PROPERTY_NEW_CHOICE_NOTIFICATION + ", " + + pollName + "." + PROPERTY_GTU_VALIDATION_DATE + ", " + + pollName + "." + PROPERTY_PREMIUM + ", " + + pollName + "." + PROPERTY_NOTIFICATION_MAX_VOTER_SEND + ", " + + pollName + "." + PROPERTY_EMAIL_ADDRESS_SUFFIXES; String command = aggName + " AS (" + "SELECT " + properties + ", " - + "json_agg(" + PollenPrincipalSpgeedDao.principalName + ".*)->0 AS " + Poll.PROPERTY_CREATOR + + "json_agg(" + PollenPrincipalSpgeedDao.principalName + ".*)->0 AS " + PROPERTY_CREATOR + " FROM poll " + pollName - + " JOIN " + PollenPrincipalSpgeedDao.aggName + " " + PollenPrincipalSpgeedDao.principalName + " ON " + PollenPrincipalSpgeedDao.principalName + "." + PollenPrincipal.PROPERTY_TOPIA_ID + " = " + pollName + "." + Poll.PROPERTY_CREATOR - + " GROUP BY " + pollName + "." + Poll.PROPERTY_TOPIA_ID + + " JOIN " + PollenPrincipalSpgeedDao.aggName + " " + PollenPrincipalSpgeedDao.principalName + " ON " + PollenPrincipalSpgeedDao.principalName + "." + PollenPrincipal.PROPERTY_TOPIA_ID + " = " + pollName + "." + PROPERTY_CREATOR + + " GROUP BY " + pollName + "." + PROPERTY_TOPIA_ID + ")"; String commands = "WITH " @@ -57,78 +59,78 @@ public interface PollenPollSpgeedDao extends PollenSpgeedDao { @Select(sql = commands, mapper = PollenMapper.class) Poll[] getallpoll(); - String pollProperties = Poll.PROPERTY_TOPIA_ID + Poll.PROPERTY_TOPIA_VERSION + ", " - + Poll.PROPERTY_TITLE + ", " + Poll.PROPERTY_DESCRIPTION + ", " - + Poll.PROPERTY_BEGIN_DATE + ", " + Poll.PROPERTY_END_DATE + ", " - + Poll.PROPERTY_ANONYMOUS_VOTE_ALLOWED + ", " + Poll.PROPERTY_CONTINUOUS_RESULTS + ", " - + Poll.PROPERTY_NOTIFY_ME_HOURS_BEFORE_POLL_ENDS + ", " + Poll.PROPERTY_POLL_END_REMINDER_SENT + ", " - + Poll.PROPERTY_NOTIFICATION_LOCALE + ", " + Poll.PROPERTY_VOTE_NOTIFICATION + ", " - + Poll.PROPERTY_POLL_TYPE + ", " + Poll.PROPERTY_VOTE_VISIBILITY + ", " - + Poll.PROPERTY_COMMENT_VISIBILITY + ", " + Poll.PROPERTY_RESULT_VISIBILITY + ", " - + Poll.PROPERTY_CREATOR + ", " + Poll.PROPERTY_FEED_CONTENT + ", " - + Poll.PROPERTY_COMMENT_NOTIFICATION + ", " + Poll.PROPERTY_NEW_CHOICE_NOTIFICATION + ", " - + Poll.PROPERTY_GTU_VALIDATION_DATE + ", " + Poll.PROPERTY_PREMIUM + ", " - + Poll.PROPERTY_NOTIFICATION_MAX_VOTER_SEND + ", " + Poll.PROPERTY_EMAIL_ADDRESS_SUFFIXES; - - String pollVariables = "${p." + Poll.PROPERTY_TOPIA_ID + "}, " - + "${p." + Poll.PROPERTY_TOPIA_VERSION + "}, " - + "${p." + Poll.PROPERTY_TITLE + "}, " - + "${p." + Poll.PROPERTY_DESCRIPTION + "}, " - + "${p." + Poll.PROPERTY_BEGIN_DATE + "}, " - + "${p." + Poll.PROPERTY_END_DATE + "}, " - + "${p." + Poll.PROPERTY_ANONYMOUS_VOTE_ALLOWED + "}, " - + "${p." + Poll.PROPERTY_CONTINUOUS_RESULTS + "}, " - + "${p." + Poll.PROPERTY_NOTIFY_ME_HOURS_BEFORE_POLL_ENDS + "}, " - + "${p." + Poll.PROPERTY_POLL_END_REMINDER_SENT + "}, " - + "${p." + Poll.PROPERTY_NOTIFICATION_LOCALE + "}, " - + "${p." + Poll.PROPERTY_VOTE_NOTIFICATION + "}, " - + "${p." + Poll.PROPERTY_POLL_TYPE + "}, " - + "${p." + Poll.PROPERTY_VOTE_VISIBILITY + "}, " - + "${p." + Poll.PROPERTY_COMMENT_VISIBILITY + "}, " - + "${p." + Poll.PROPERTY_RESULT_VISIBILITY + "}, " - + "${p." + Poll.PROPERTY_CREATOR + "." + PollenPrincipal.PROPERTY_TOPIA_ID + "}, " - + "${p." + Poll.PROPERTY_FEED_CONTENT + "}, " - + "${p." + Poll.PROPERTY_COMMENT_NOTIFICATION + "}, " - + "${p." + Poll.PROPERTY_NEW_CHOICE_NOTIFICATION + "}, " - + "${p." + Poll.PROPERTY_GTU_VALIDATION_DATE + "}, " - + "${p." + Poll.PROPERTY_PREMIUM + "}, " - + "${p." + Poll.PROPERTY_NOTIFICATION_MAX_VOTER_SEND + "}, " - + "${p." + Poll.PROPERTY_EMAIL_ADDRESS_SUFFIXES + "}"; + String pollProperties = PROPERTY_TOPIA_ID + PROPERTY_TOPIA_VERSION + ", " + + PROPERTY_TITLE + ", " + PROPERTY_DESCRIPTION + ", " + + PROPERTY_BEGIN_DATE + ", " + PROPERTY_END_DATE + ", " + + PROPERTY_ANONYMOUS_VOTE_ALLOWED + ", " + PROPERTY_CONTINUOUS_RESULTS + ", " + + PROPERTY_NOTIFY_ME_HOURS_BEFORE_POLL_ENDS + ", " + PROPERTY_POLL_END_REMINDER_SENT + ", " + + PROPERTY_NOTIFICATION_LOCALE + ", " + PROPERTY_VOTE_NOTIFICATION + ", " + + PROPERTY_POLL_TYPE + ", " + PROPERTY_VOTE_VISIBILITY + ", " + + PROPERTY_COMMENT_VISIBILITY + ", " + PROPERTY_RESULT_VISIBILITY + ", " + + PROPERTY_CREATOR + ", " + PROPERTY_FEED_CONTENT + ", " + + PROPERTY_COMMENT_NOTIFICATION + ", " + PROPERTY_NEW_CHOICE_NOTIFICATION + ", " + + PROPERTY_GTU_VALIDATION_DATE + ", " + PROPERTY_PREMIUM + ", " + + PROPERTY_NOTIFICATION_MAX_VOTER_SEND + ", " + PROPERTY_EMAIL_ADDRESS_SUFFIXES; + + String pollVariables = "${p." + PROPERTY_TOPIA_ID + "}, " + + "${p." + PROPERTY_TOPIA_VERSION + "}, " + + "${p." + PROPERTY_TITLE + "}, " + + "${p." + PROPERTY_DESCRIPTION + "}, " + + "${p." + PROPERTY_BEGIN_DATE + "}, " + + "${p." + PROPERTY_END_DATE + "}, " + + "${p." + PROPERTY_ANONYMOUS_VOTE_ALLOWED + "}, " + + "${p." + PROPERTY_CONTINUOUS_RESULTS + "}, " + + "${p." + PROPERTY_NOTIFY_ME_HOURS_BEFORE_POLL_ENDS + "}, " + + "${p." + PROPERTY_POLL_END_REMINDER_SENT + "}, " + + "${p." + PROPERTY_NOTIFICATION_LOCALE + "}, " + + "${p." + PROPERTY_VOTE_NOTIFICATION + "}, " + + "${p." + PROPERTY_POLL_TYPE + "}, " + + "${p." + PROPERTY_VOTE_VISIBILITY + "}, " + + "${p." + PROPERTY_COMMENT_VISIBILITY + "}, " + + "${p." + PROPERTY_RESULT_VISIBILITY + "}, " + + "${p." + PROPERTY_CREATOR + "." + PollenPrincipal.PROPERTY_TOPIA_ID + "}, " + + "${p." + PROPERTY_FEED_CONTENT + "}, " + + "${p." + PROPERTY_COMMENT_NOTIFICATION + "}, " + + "${p." + PROPERTY_NEW_CHOICE_NOTIFICATION + "}, " + + "${p." + PROPERTY_GTU_VALIDATION_DATE + "}, " + + "${p." + PROPERTY_PREMIUM + "}, " + + "${p." + PROPERTY_NOTIFICATION_MAX_VOTER_SEND + "}, " + + "${p." + PROPERTY_EMAIL_ADDRESS_SUFFIXES + "}"; String editPoll = "UPDATE SET " - + Poll.PROPERTY_TOPIA_VERSION + " = EXCLUDED." + Poll.PROPERTY_TOPIA_VERSION + ", " - + Poll.PROPERTY_TITLE + " = EXCLUDED." + Poll.PROPERTY_TITLE + ", " - + Poll.PROPERTY_DESCRIPTION + " = EXCLUDED." + Poll.PROPERTY_DESCRIPTION + ", " - + Poll.PROPERTY_BEGIN_DATE + " = EXCLUDED." + Poll.PROPERTY_BEGIN_DATE + ", " - + Poll.PROPERTY_END_DATE + " = EXCLUDED." + Poll.PROPERTY_END_DATE + ", " - + Poll.PROPERTY_ANONYMOUS_VOTE_ALLOWED + " = EXCLUDED." + Poll.PROPERTY_ANONYMOUS_VOTE_ALLOWED + ", " - + Poll.PROPERTY_CONTINUOUS_RESULTS + " = EXCLUDED." + Poll.PROPERTY_CONTINUOUS_RESULTS + ", " - + Poll.PROPERTY_NOTIFY_ME_HOURS_BEFORE_POLL_ENDS + " = EXCLUDED." + Poll.PROPERTY_NOTIFY_ME_HOURS_BEFORE_POLL_ENDS + ", " - + Poll.PROPERTY_POLL_END_REMINDER_SENT + " = EXCLUDED." + Poll.PROPERTY_POLL_END_REMINDER_SENT + ", " - + Poll.PROPERTY_NOTIFICATION_LOCALE + " = EXCLUDED." + Poll.PROPERTY_NOTIFICATION_LOCALE + ", " - + Poll.PROPERTY_VOTE_NOTIFICATION + " = EXCLUDED." + Poll.PROPERTY_VOTE_NOTIFICATION + ", " - + Poll.PROPERTY_POLL_TYPE + " = EXCLUDED." + Poll.PROPERTY_POLL_TYPE + ", " - + Poll.PROPERTY_VOTE_VISIBILITY + " = EXCLUDED." + Poll.PROPERTY_VOTE_VISIBILITY + ", " - + Poll.PROPERTY_COMMENT_VISIBILITY + " = EXCLUDED." + Poll.PROPERTY_COMMENT_VISIBILITY + ", " - + Poll.PROPERTY_RESULT_VISIBILITY + " = EXCLUDED." + Poll.PROPERTY_RESULT_VISIBILITY + ", " - + Poll.PROPERTY_CREATOR + " = EXCLUDED." + Poll.PROPERTY_CREATOR + ", " - + Poll.PROPERTY_FEED_CONTENT + " = EXCLUDED." + Poll.PROPERTY_FEED_CONTENT + ", " - + Poll.PROPERTY_COMMENT_NOTIFICATION + " = EXCLUDED." + Poll.PROPERTY_COMMENT_NOTIFICATION + ", " - + Poll.PROPERTY_NEW_CHOICE_NOTIFICATION + " = EXCLUDED." + Poll.PROPERTY_NEW_CHOICE_NOTIFICATION + ", " - + Poll.PROPERTY_GTU_VALIDATION_DATE + " = EXCLUDED." + Poll.PROPERTY_GTU_VALIDATION_DATE + ", " - + Poll.PROPERTY_PREMIUM + " = EXCLUDED." + Poll.PROPERTY_PREMIUM + ", " - + Poll.PROPERTY_NOTIFICATION_MAX_VOTER_SEND + " = EXCLUDED." + Poll.PROPERTY_NOTIFICATION_MAX_VOTER_SEND + ", " - + Poll.PROPERTY_EMAIL_ADDRESS_SUFFIXES + " = EXCLUDED." + Poll.PROPERTY_EMAIL_ADDRESS_SUFFIXES; + + PROPERTY_TOPIA_VERSION + " = EXCLUDED." + PROPERTY_TOPIA_VERSION + ", " + + PROPERTY_TITLE + " = EXCLUDED." + PROPERTY_TITLE + ", " + + PROPERTY_DESCRIPTION + " = EXCLUDED." + PROPERTY_DESCRIPTION + ", " + + PROPERTY_BEGIN_DATE + " = EXCLUDED." + PROPERTY_BEGIN_DATE + ", " + + PROPERTY_END_DATE + " = EXCLUDED." + PROPERTY_END_DATE + ", " + + PROPERTY_ANONYMOUS_VOTE_ALLOWED + " = EXCLUDED." + PROPERTY_ANONYMOUS_VOTE_ALLOWED + ", " + + PROPERTY_CONTINUOUS_RESULTS + " = EXCLUDED." + PROPERTY_CONTINUOUS_RESULTS + ", " + + PROPERTY_NOTIFY_ME_HOURS_BEFORE_POLL_ENDS + " = EXCLUDED." + PROPERTY_NOTIFY_ME_HOURS_BEFORE_POLL_ENDS + ", " + + PROPERTY_POLL_END_REMINDER_SENT + " = EXCLUDED." + PROPERTY_POLL_END_REMINDER_SENT + ", " + + PROPERTY_NOTIFICATION_LOCALE + " = EXCLUDED." + PROPERTY_NOTIFICATION_LOCALE + ", " + + PROPERTY_VOTE_NOTIFICATION + " = EXCLUDED." + PROPERTY_VOTE_NOTIFICATION + ", " + + PROPERTY_POLL_TYPE + " = EXCLUDED." + PROPERTY_POLL_TYPE + ", " + + PROPERTY_VOTE_VISIBILITY + " = EXCLUDED." + PROPERTY_VOTE_VISIBILITY + ", " + + PROPERTY_COMMENT_VISIBILITY + " = EXCLUDED." + PROPERTY_COMMENT_VISIBILITY + ", " + + PROPERTY_RESULT_VISIBILITY + " = EXCLUDED." + PROPERTY_RESULT_VISIBILITY + ", " + + PROPERTY_CREATOR + " = EXCLUDED." + PROPERTY_CREATOR + ", " + + PROPERTY_FEED_CONTENT + " = EXCLUDED." + PROPERTY_FEED_CONTENT + ", " + + PROPERTY_COMMENT_NOTIFICATION + " = EXCLUDED." + PROPERTY_COMMENT_NOTIFICATION + ", " + + PROPERTY_NEW_CHOICE_NOTIFICATION + " = EXCLUDED." + PROPERTY_NEW_CHOICE_NOTIFICATION + ", " + + PROPERTY_GTU_VALIDATION_DATE + " = EXCLUDED." + PROPERTY_GTU_VALIDATION_DATE + ", " + + PROPERTY_PREMIUM + " = EXCLUDED." + PROPERTY_PREMIUM + ", " + + PROPERTY_NOTIFICATION_MAX_VOTER_SEND + " = EXCLUDED." + PROPERTY_NOTIFICATION_MAX_VOTER_SEND + ", " + + PROPERTY_EMAIL_ADDRESS_SUFFIXES + " = EXCLUDED." + PROPERTY_EMAIL_ADDRESS_SUFFIXES; String createPoll = "INSERT INTO poll (" + pollProperties + ") VALUES (" + pollVariables + ")"; - String savePoll = createPoll + " ON CONFLICT (" + Poll.PROPERTY_TOPIA_ID + ") DO " + editPoll; + String savePoll = createPoll + " ON CONFLICT (" + PROPERTY_TOPIA_ID + ") DO " + editPoll; @Update(sql = savePoll, mapper = PollenMapper.class) int savePoll(Poll p); String deletePoll = "DELETE FROM poll" + - " WHERE " + Poll.PROPERTY_TOPIA_ID + " = ${u.topiaId}"; + " WHERE " + PROPERTY_TOPIA_ID + " = ${u.topiaId}"; @Update(sql = deletePoll, mapper = PollenMapper.class) int deletePoll(Poll p); diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPrincipalSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPrincipalSpgeedDao.java index f84f10bd..d808d5e3 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPrincipalSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenPrincipalSpgeedDao.java @@ -1,25 +1,26 @@ package org.chorem.pollen.persistence.Dao; -import org.chorem.pollen.persistence.entity.Poll; -import org.chorem.pollen.persistence.entity.PollenPrincipal; import org.chorem.pollen.persistence.entity.PollenUser; +import static org.chorem.pollen.persistence.entity.PollenPrincipal.*; + public interface PollenPrincipalSpgeedDao extends PollenSpgeedDao{ String principalName = "pr"; String aggName = "principals_agg"; - String propertieswoForeignKey = principalName+"." +PollenPrincipal.PROPERTY_NAME + ", " - + principalName+"." +PollenPrincipal.PROPERTY_EMAIL + ", "+principalName+"."+PollenPrincipal.PROPERTY_INVALID + ", " - + principalName+"." +PollenPrincipal.PROPERTY_TOPIA_ID; + String properties = principalName + "." + PROPERTY_NAME + ", " + + principalName + "." + PROPERTY_EMAIL + ", " + + principalName + "." + PROPERTY_INVALID + ", " + + principalName + "." + PROPERTY_TOPIA_ID; String command = aggName + " AS (" - + "SELECT " + propertieswoForeignKey + ", " - + "json_agg(" + PollenUserSpgeedDao.userName + ".*)->0 AS " + PollenPrincipal.PROPERTY_POLLEN_USER - + " FROM " + PollenUserSpgeedDao.aggName + " " + PollenUserSpgeedDao.userName - + " JOIN pollenprincipal " + principalName + " ON " + PollenUserSpgeedDao.userName + "." + PollenUser.PROPERTY_TOPIA_ID + " = " + principalName + "." + PollenPrincipal.PROPERTY_POLLEN_USER - + " GROUP BY " + principalName + "." + PollenPrincipal.PROPERTY_TOPIA_ID + + "SELECT " + properties + ", " + + "json_agg(" + PollenUserSpgeedDao.userName + ".*)->0 AS " + PROPERTY_POLLEN_USER + + " FROM " + PollenUserSpgeedDao.aggName + " " + PollenUserSpgeedDao.userName + + " JOIN pollenprincipal " + principalName + " ON " + PollenUserSpgeedDao.userName + "." + PollenUser.PROPERTY_TOPIA_ID + " = " + principalName + "." + PROPERTY_POLLEN_USER + + " GROUP BY " + principalName + "." + PROPERTY_TOPIA_ID + ")"; String commands = "WITH " diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenResourceSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenResourceSpgeedDao.java index 5e530659..ce9ede6d 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenResourceSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenResourceSpgeedDao.java @@ -1,31 +1,91 @@ package org.chorem.pollen.persistence.Dao; import org.chorem.pollen.persistence.PollenMapper; +import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.PollenResource; +import org.chorem.pollen.persistence.entity.PollenUser; +import org.nuiton.spgeed.annotations.Select; import org.nuiton.spgeed.annotations.Update; +import static org.chorem.pollen.persistence.entity.PollenResource.*; + public interface PollenResourceSpgeedDao extends PollenSpgeedDao { String resourceName = "uc"; String aggName = "ressource_agg"; - String properties = PollenResource.PROPERTY_TOPIA_ID + ", " - + PollenResource.PROPERTY_TOPIA_VERSION + ", " - + PollenResource.PROPERTY_TOPIA_CREATE_DATE + ", " - + PollenResource.PROPERTY_RESOURCE_CONTENT + ", " - + PollenResource.PROPERTY_CONTENT_TYPE + ", " - + PollenResource.PROPERTY_NAME + ", " - + PollenResource.PROPERTY_SIZE + ", " - + PollenResource.PROPERTY_RESOURCE_TYPE; + String properties = resourceName + "." + PROPERTY_TOPIA_ID + ", " + + resourceName + "." + PROPERTY_TOPIA_VERSION + ", " + + resourceName + "." + PROPERTY_TOPIA_CREATE_DATE + ", " + + resourceName + "." + PROPERTY_RESOURCE_CONTENT + ", " + + resourceName + "." + PROPERTY_CONTENT_TYPE + ", " + + resourceName + "." + PROPERTY_NAME + ", " + + resourceName + "." + PROPERTY_SIZE + ", " + + resourceName + "." + PROPERTY_RESOURCE_TYPE; String command = aggName + " AS (" + " SELECT " + properties + " FROM pollenresource" + ")"; + String commands = "WITH " + command + + " SELECT * FROM " + aggName; + + String getResource = commands + " " + resourceName + + " WHERE " + resourceName + "." + PROPERTY_TOPIA_ID + " = ${topiaId}"; + + @Select(sql = getResource, mapper = PollenMapper.class) + PollenResource getResource(String topiaId); + + String getResourceUserId = "WITH " + PollenUserSpgeedDao.aggName + " AS (" + + "SELECT " + PollenUser.PROPERTY_TOPIA_ID + ", " + PollenUser.PROPERTY_AVATAR + + " FROM pollenuser WHERE " + PollenUser.PROPERTY_TOPIA_ID + " = ${userId}" + + ")" + + " SELECT " + properties + + " FROM pollenresource, " + + PollenUserSpgeedDao.aggName + " " + PollenUserSpgeedDao.userName + + " WHERE " + PollenUserSpgeedDao.userName + "." + PollenUser.PROPERTY_AVATAR + " = " + PROPERTY_TOPIA_ID; + + @Select(sql = getResourceUserId, mapper = PollenMapper.class) + PollenResource getResourceUserId(String userId); + + String resourceVariables = "${r." + PROPERTY_TOPIA_ID + "}, " + + "${r." + PROPERTY_TOPIA_VERSION + "}, " + + "${r." + PROPERTY_TOPIA_CREATE_DATE + "}, " + + "${r." + PROPERTY_RESOURCE_CONTENT + "}, " + + "${r." + PROPERTY_CONTENT_TYPE + "}, " + + "${r." + PROPERTY_NAME + "}, " + + "${r." + PROPERTY_SIZE + "}, " + + "${r." + PROPERTY_RESOURCE_TYPE + "}"; + + String resourceProperties = PROPERTY_TOPIA_ID + ", " + + PROPERTY_TOPIA_VERSION + ", " + + PROPERTY_TOPIA_CREATE_DATE + ", " + + PROPERTY_RESOURCE_CONTENT + ", " + + PROPERTY_CONTENT_TYPE + ", " + + PROPERTY_NAME + ", " + + PROPERTY_SIZE + ", " + + PROPERTY_RESOURCE_TYPE; + + String createResource = "INSERT INTO pollenresource (" + resourceProperties + ") " + + "VALUES (" + resourceVariables + ")"; + + String editResource = "UPDATE SET " + + PROPERTY_TOPIA_VERSION + " = EXCLUDED." + PROPERTY_TOPIA_VERSION + + PROPERTY_RESOURCE_CONTENT + " = EXCLUDED." + PROPERTY_RESOURCE_CONTENT + + PROPERTY_CONTENT_TYPE + " = EXCLUDED." + PROPERTY_CONTENT_TYPE + + PROPERTY_NAME + " = EXCLUDED." + PROPERTY_NAME + + PROPERTY_SIZE + " = EXCLUDED." + PROPERTY_SIZE + + PROPERTY_RESOURCE_TYPE + " = EXCLUDED." + PROPERTY_RESOURCE_TYPE; + + String saveResource = createResource + " ON CONFLICT (" + PROPERTY_TOPIA_ID + ") DO " + editResource; + + @Update(sql = saveResource, mapper = PollenMapper.class) + int saveResource(PollenResource r); + String deleteResource = "DELETE FROM pollenresource " + - "WHERE " + PollenResource.PROPERTY_TOPIA_ID + " ${topiaId}"; + "WHERE " + PROPERTY_TOPIA_ID + " ${topiaId}"; @Update(sql = deleteResource, mapper = PollenMapper.class) int deleteResource(String topiaId); diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserCredentialSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserCredentialSpgeedDao.java index f4385c76..67088aa3 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserCredentialSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserCredentialSpgeedDao.java @@ -1,10 +1,13 @@ package org.chorem.pollen.persistence.Dao; import org.chorem.pollen.persistence.PollenMapper; +import org.chorem.pollen.persistence.entity.PollenUserEmailAddress; import org.chorem.pollen.persistence.entity.UserCredential; import org.nuiton.spgeed.annotations.Select; import org.nuiton.spgeed.annotations.Update; +import static org.chorem.pollen.persistence.entity.UserCredential.*; + import java.util.List; public interface PollenUserCredentialSpgeedDao extends PollenSpgeedDao { @@ -13,13 +16,17 @@ public interface PollenUserCredentialSpgeedDao extends PollenSpgeedDao { String aggName = "credientials_agg"; - String properties = UserCredential.PROPERTY_TOPIA_ID + ", " - + UserCredential.PROPERTY_TOPIA_VERSION + ", " - + UserCredential.PROPERTY_TOPIA_CREATE_DATE + ", " - + UserCredential.PROPERTY_PROVIDER + ", " - + UserCredential.PROPERTY_USER_ID + ", " - + UserCredential.PROPERTY_USER_NAME + ", " - + UserCredential.PROPERTY_EMAIL + ", " + String credentialForeignKey = userCredentialName + ".pollenuser"; + + String credentialTable = aggName + " " + userCredentialName; + + String properties = PROPERTY_TOPIA_ID + ", " + + PROPERTY_TOPIA_VERSION + ", " + + PROPERTY_TOPIA_CREATE_DATE + ", " + + PROPERTY_PROVIDER + ", " + + PROPERTY_USER_ID + ", " + + PROPERTY_USER_NAME + ", " + + PROPERTY_EMAIL + ", " + "pollenuser"; String command = aggName + " AS (" @@ -27,13 +34,58 @@ public interface PollenUserCredentialSpgeedDao extends PollenSpgeedDao { + " FROM usercredential" + ")"; + String userCredentialProperties = PROPERTY_TOPIA_ID + ", " + + PROPERTY_TOPIA_VERSION + ", " + + PROPERTY_PROVIDER + ", " + + PROPERTY_USER_ID + ", " + + PROPERTY_EMAIL + ", " + + PROPERTY_USER_NAME; + + String userCredentialPropertiesForeign = userCredentialProperties + ", pollenuser"; + + String userCredentialVariable = "${uc." + PROPERTY_TOPIA_ID + "}, " + + "${uc." + PROPERTY_TOPIA_VERSION + "}, " + + "${uc." + PROPERTY_PROVIDER + "}, " + + "${uc." + PROPERTY_USER_ID + "}, " + + "${uc." + PROPERTY_EMAIL + "}, " + + "${uc." + PROPERTY_USER_NAME + "}"; + + String userCredentialVariableForeign = userCredentialVariable + ", ${pollenuser}"; + + String createUserCredential = "INSERT INTO usercredential (" + userCredentialProperties + ") " + + "VALUES (" + userCredentialVariable + ")"; + + String createUserCredentialForeign = "INSERT INTO usercredential " + + "(" + userCredentialPropertiesForeign + ") " + + "VALUES (" + userCredentialVariableForeign + ")"; + + String editUserCredential = "UPDATE SET " + + PROPERTY_PROVIDER + " = EXCLUDED." + PROPERTY_PROVIDER + ", " + + PROPERTY_USER_ID + " = EXCLUDED." + PROPERTY_USER_ID + ", " + + PROPERTY_EMAIL + " = EXCLUDED." + PROPERTY_EMAIL + ", " + + PROPERTY_USER_NAME + " = EXCLUDED." + PROPERTY_USER_NAME; + + String editEmailForeign = editUserCredential + ", pollenuser = EXCLUDED.pollenuser"; + + String saveUserCredential = createUserCredential + + " ON CONFLICT (" + PROPERTY_TOPIA_ID + ") DO " + editUserCredential; + + String saveUserCredentialForeign = createUserCredentialForeign + + " ON CONFLICT (" + PROPERTY_TOPIA_ID + ") DO " + editEmailForeign; + + @Update(sql = saveUserCredential, mapper = PollenMapper.class) + int saveUserCredential(UserCredential uc); + + @Update(sql = saveUserCredentialForeign, mapper = PollenMapper.class) + int saveUserCredential(UserCredential uc, String pollenuser); + String deleteUserCredential = "DELETE FROM usercredential " + - "WHERE " + UserCredential.PROPERTY_TOPIA_ID + " = ${topiaId}"; + "WHERE " + PROPERTY_TOPIA_ID + " = ${topiaId}"; @Update(sql = deleteUserCredential, mapper = PollenMapper.class) int deleteUserCredential(List<String> topiaId); - String getUserCredential = "SELECT * FROM usercredential WHERE " + UserCredential.PROPERTY_USER_ID + " = ${topiaId}"; + String getUserCredential = "SELECT * FROM usercredential WHERE " + PROPERTY_USER_ID + " = ${topiaId}"; @Select(sql = getUserCredential, mapper = PollenMapper.class) UserCredential[] getUserCredential(String topiaId); } \ No newline at end of file diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserEmailAddressSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserEmailAddressSpgeedDao.java index 9e68eae5..acc75231 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserEmailAddressSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserEmailAddressSpgeedDao.java @@ -1,13 +1,11 @@ package org.chorem.pollen.persistence.Dao; import org.chorem.pollen.persistence.PollenMapper; -import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.PollenUserEmailAddress; import org.nuiton.spgeed.annotations.Select; import org.nuiton.spgeed.annotations.Update; -import java.util.Collection; -import java.util.List; +import static org.chorem.pollen.persistence.entity.PollenUserEmailAddress.*; public interface PollenUserEmailAddressSpgeedDao extends PollenSpgeedDao { @@ -17,10 +15,16 @@ public interface PollenUserEmailAddressSpgeedDao extends PollenSpgeedDao { String aggName = "emails_agg"; - String properties = PollenUserEmailAddress.PROPERTY_EMAIL_ADDRESS + ", " + - PollenUserEmailAddress.PROPERTY_PGP_PUBLIC_KEY + ", " + - PollenUserEmailAddress.PROPERTY_VALIDATED + ", " + - PollenUserEmailAddress.PROPERTY_TOPIA_ID + ", " + + String demailTable = aggName + " " + demailName; + + String emailsTable = aggName + " " + emailsName; + + String emailsForeignKey = emailsName + ".pollenuser"; + + String properties = PROPERTY_EMAIL_ADDRESS + ", " + + PROPERTY_PGP_PUBLIC_KEY + ", " + + PROPERTY_VALIDATED + ", " + + PROPERTY_TOPIA_ID + ", " + "pollenuser"; String command = aggName+" AS (" + @@ -29,26 +33,30 @@ public interface PollenUserEmailAddressSpgeedDao extends PollenSpgeedDao { ")"; String findEmail = "WITH " + command + " SELECT * FROM " + aggName + - " WHERE " + PollenUserEmailAddress.PROPERTY_EMAIL_ADDRESS + " = ${emailAddress}"; + " WHERE " + PROPERTY_EMAIL_ADDRESS + " = ${emailAddress}"; @Select(sql = findEmail, mapper = PollenMapper.class) PollenUserEmailAddress findEmailAddress(String emailAddress); String getEmail = "WITH " + command + " SELECT * FROM " + aggName + - " WHERE " + PollenUserEmailAddress.PROPERTY_TOPIA_ID + " = ${topiaId}"; + " WHERE " + PROPERTY_TOPIA_ID + " = ${topiaId}"; @Select(sql = getEmail, mapper = PollenMapper.class) PollenUserEmailAddress getEmailAddress(String topiaId); - String emailProperties = PollenUserEmailAddress.PROPERTY_TOPIA_ID + ", " + - PollenUserEmailAddress.PROPERTY_TOPIA_VERSION + ", " + - PollenUserEmailAddress.PROPERTY_EMAIL_ADDRESS + ", " + - PollenUserEmailAddress.PROPERTY_PGP_PUBLIC_KEY + ", " + - PollenUserEmailAddress.PROPERTY_VALIDATED; + String emailProperties = PROPERTY_TOPIA_ID + ", " + + PROPERTY_TOPIA_VERSION + ", " + + PROPERTY_EMAIL_ADDRESS + ", " + + PROPERTY_PGP_PUBLIC_KEY + ", " + + PROPERTY_VALIDATED; String emailPropertiesForeign = emailProperties + ", pollenuser"; - String emailVariable = "${e.topiaId}, ${e.topiaVersion}, ${e.emailAddress}, ${e.pgpPublicKey}, ${e.validated}"; + String emailVariable = "${e." + PROPERTY_TOPIA_ID + "}, " + + "${e." + PROPERTY_TOPIA_VERSION + "}, " + + "${e." + PROPERTY_EMAIL_ADDRESS + "}, " + + "${e." + PROPERTY_PGP_PUBLIC_KEY + "}, " + + "${e." + PROPERTY_VALIDATED + "}"; String emailVariableForeign = emailVariable + ", ${pollenuser}"; @@ -59,17 +67,17 @@ public interface PollenUserEmailAddressSpgeedDao extends PollenSpgeedDao { "VALUES (" + emailVariableForeign + ")"; String editEmail = "UPDATE SET " - + PollenUserEmailAddress.PROPERTY_EMAIL_ADDRESS + " = EXCLUDED." + PollenUserEmailAddress.PROPERTY_EMAIL_ADDRESS + ", " - + PollenUserEmailAddress.PROPERTY_PGP_PUBLIC_KEY + " = EXCLUDED." + PollenUserEmailAddress.PROPERTY_PGP_PUBLIC_KEY + ", " - + PollenUserEmailAddress.PROPERTY_VALIDATED + " = EXCLUDED." + PollenUserEmailAddress.PROPERTY_VALIDATED; + + PROPERTY_EMAIL_ADDRESS + " = EXCLUDED." + PROPERTY_EMAIL_ADDRESS + ", " + + PROPERTY_PGP_PUBLIC_KEY + " = EXCLUDED." + PROPERTY_PGP_PUBLIC_KEY + ", " + + PROPERTY_VALIDATED + " = EXCLUDED." + PROPERTY_VALIDATED; String editEmailForeign = editEmail + ", pollenuser = EXCLUDED.pollenuser"; String saveEmail = createEmail - + " ON CONFLICT (" + PollenUserEmailAddress.PROPERTY_TOPIA_ID + ") DO " + editEmail; + + " ON CONFLICT (" + PROPERTY_TOPIA_ID + ") DO " + editEmail; String saveEmailForeign = createEmailForeign - + " ON CONFLICT (" + PollenUserEmailAddress.PROPERTY_TOPIA_ID + ") DO " + editEmailForeign; + + " ON CONFLICT (" + PROPERTY_TOPIA_ID + ") DO " + editEmailForeign; @Update(sql = saveEmail, mapper = PollenMapper.class) int saveEmail(PollenUserEmailAddress e); @@ -77,14 +85,8 @@ public interface PollenUserEmailAddressSpgeedDao extends PollenSpgeedDao { @Update(sql = saveEmailForeign, mapper = PollenMapper.class) int saveEmail(PollenUserEmailAddress e, String pollenuser); - String updatePollenUser = "UPDATE pollenuseremailaddress SET pollenuser = ${pollenUser} WHERE " + - PollenUserEmailAddress.PROPERTY_TOPIA_ID + " = ${topiaId}"; - - @Update(sql = updatePollenUser, mapper = PollenMapper.class) - int updatePollenUser(String pollenUser, Collection<String> topiaId); - String deleteEmail = "DELETE FROM pollenuseremailaddress" + - " WHERE " + PollenUserEmailAddress.PROPERTY_TOPIA_ID + " = ${topiaId}"; + " WHERE " + PROPERTY_TOPIA_ID + " = ${topiaId}"; @Update(sql = deleteEmail, mapper = PollenMapper.class) int deleteEmail(String topiaId); diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserSpgeedDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserSpgeedDao.java index a3968e7b..00fe5921 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserSpgeedDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/Dao/PollenUserSpgeedDao.java @@ -1,14 +1,17 @@ package org.chorem.pollen.persistence.Dao; import org.chorem.pollen.persistence.PollenMapper; -import org.chorem.pollen.persistence.entity.Poll; +import org.chorem.pollen.persistence.entity.PollenResource; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.PollenUserEmailAddress; +import org.chorem.pollen.persistence.entity.UserCredential; import org.nuiton.spgeed.Chunk; import org.nuiton.spgeed.annotations.Select; import org.nuiton.spgeed.annotations.Update; +import static org.chorem.pollen.persistence.entity.PollenUser.*; import static org.chorem.pollen.persistence.Dao.PollenUserEmailAddressSpgeedDao.*; +import static org.chorem.pollen.persistence.Dao.PollenUserCredentialSpgeedDao.*; public interface PollenUserSpgeedDao extends PollenSpgeedDao { @@ -16,23 +19,25 @@ public interface PollenUserSpgeedDao extends PollenSpgeedDao { String aggName = "users_agg"; - String propertieswoForeignKey = userName + "." + PollenUser.PROPERTY_NAME + ", " + - userName + "." + PollenUser.PROPERTY_ADMINISTRATOR + ", "+userName + "." + PollenUser.PROPERTY_LANGUAGE + ", " + - userName + "." + PollenUser.PROPERTY_PASSWORD + ", "+userName + "." + PollenUser.PROPERTY_SALT + ", " + - userName + "." + PollenUser.PROPERTY_BANNED + ", "+userName + "." + PollenUser.PROPERTY_GTU_VALIDATION_DATE + ", " + - userName + "." + PollenUser.PROPERTY_PREMIUM_TO + ", "+userName + "." + PollenUser.PROPERTY_CAN_CREATE_POLL + ", " + - userName + "." + PollenUser.PROPERTY_TOPIA_ID + ", " + userName + "." + PollenUser.PROPERTY_TOPIA_CREATE_DATE;; + String userId = userName + "." + PROPERTY_TOPIA_ID; + + String propertieswoForeignKey = userName + "." + PROPERTY_NAME + ", " + + userName + "." + PROPERTY_ADMINISTRATOR + ", "+userName + "." + PROPERTY_LANGUAGE + ", " + + userName + "." + PROPERTY_PASSWORD + ", "+userName + "." + PROPERTY_SALT + ", " + + userName + "." + PROPERTY_BANNED + ", "+userName + "." + PROPERTY_GTU_VALIDATION_DATE + ", " + + userName + "." + PROPERTY_PREMIUM_TO + ", "+userName + "." + PROPERTY_CAN_CREATE_POLL + ", " + + userName + "." + PROPERTY_TOPIA_ID + ", " + userName + "." + PROPERTY_TOPIA_CREATE_DATE;; String command = aggName + " AS (" + "SELECT " + propertieswoForeignKey + ", " - + "json_agg(" + demailName + ".*)->0 AS " + PollenUser.PROPERTY_DEFAULT_EMAIL_ADDRESS + ", " - + "json_agg(" + emailsName + ".*) AS " + PollenUser.PROPERTY_EMAIL_ADDRESSES + ", " - + "json_agg(" + PollenUserCredentialSpgeedDao.userCredentialName + ".*) AS " + PollenUser.PROPERTY_USER_CREDENTIAL + + "json_agg(" + demailName + ".*)->0 AS " + PROPERTY_DEFAULT_EMAIL_ADDRESS + ", " + + "COALESCE(json_agg(" + emailsName + ".*) FILTER (WHERE " + emailsForeignKey + " IS NOT NULL), null) AS " + PROPERTY_EMAIL_ADDRESSES + ", " + + "COALESCE(json_agg(" + userCredentialName + ".*) FILTER (WHERE " + credentialForeignKey + " IS NOT NULL), null) AS " + PROPERTY_USER_CREDENTIAL + " FROM pollenuser " + userName - + " JOIN " + PollenUserEmailAddressSpgeedDao.aggName + " " + demailName + " ON " + demailName + "." + PollenUserEmailAddress.PROPERTY_TOPIA_ID + " = " + userName + "." + PollenUser.PROPERTY_DEFAULT_EMAIL_ADDRESS - + " LEFT OUTER JOIN " + PollenUserEmailAddressSpgeedDao.aggName + " " + PollenUserEmailAddressSpgeedDao.emailsName + " ON " + PollenUserEmailAddressSpgeedDao.emailsName + ".pollenuser = " + userName + "." + PollenUser.PROPERTY_TOPIA_ID - + " LEFT OUTER JOIN " + PollenUserCredentialSpgeedDao.aggName + " " + PollenUserCredentialSpgeedDao.userCredentialName + " ON " + PollenUserCredentialSpgeedDao.userCredentialName + ".pollenuser = " + userName + "." + PollenUser.PROPERTY_TOPIA_ID - + " GROUP BY " + userName + "." + PollenUser.PROPERTY_TOPIA_ID + + " JOIN " + demailTable + " ON " + demailName + "." + PollenUserEmailAddress.PROPERTY_TOPIA_ID + " = " + userName + "." + PROPERTY_DEFAULT_EMAIL_ADDRESS + + " LEFT OUTER JOIN " + emailsTable + " ON " + emailsForeignKey + " = " + userName + "." + PROPERTY_TOPIA_ID + + " LEFT OUTER JOIN " + credentialTable + " ON " + credentialForeignKey + " = " + userId + + " GROUP BY " + userId + ")"; String commands = "WITH " + @@ -42,58 +47,67 @@ public interface PollenUserSpgeedDao extends PollenSpgeedDao { " SELECT * from " + aggName; String getUser = commands + " " + userName + " WHERE " + - userName + "." + PollenUser.PROPERTY_TOPIA_ID + " = ${userId}"; + userId + " = ${userId}"; @Select(sql = getUser, mapper = PollenMapper.class) PollenUser getUser(String userId); + String findUserWithCredentialProviderAndValidatedId = commands + " " + userName + + " WHERE " + userName + "." + PROPERTY_USER_CREDENTIAL + "." + UserCredential.PROPERTY_PROVIDER + " = ${provider}" + + " AND " + userName + "." + PROPERTY_USER_CREDENTIAL + "." + UserCredential.PROPERTY_USER_ID + " = ${userId}"; + @Select(sql = findUserWithCredentialProviderAndValidatedId, mapper = PollenMapper.class) + PollenUser findUserWithCredentialOrNull(String provider, String userId); + String getAllUsers = commands + " ORDER BY ${userOrder | toString()}"; @Select(sql = getAllUsers, mapper = PollenMapper.class) Chunk<PollenUser> getAllUsers(Chunk previousChunk, String userOrder); - String userProperties = PollenUser.PROPERTY_TOPIA_ID + ", " + PollenUser.PROPERTY_TOPIA_VERSION + ", " - + PollenUser.PROPERTY_NAME + ", " + PollenUser.PROPERTY_ADMINISTRATOR + ", " - + PollenUser.PROPERTY_LANGUAGE + ", " + PollenUser.PROPERTY_PASSWORD + ", " - + PollenUser.PROPERTY_SALT + ", " + PollenUser.PROPERTY_BANNED + ", " - + PollenUser.PROPERTY_GTU_VALIDATION_DATE + ", " + PollenUser.PROPERTY_PREMIUM_TO + ", " - + PollenUser.PROPERTY_CAN_CREATE_POLL + ", " + PollenUser.PROPERTY_DEFAULT_EMAIL_ADDRESS; - - String userVariables = "${u." + PollenUser.PROPERTY_TOPIA_ID + "}, " - + "${u." + PollenUser.PROPERTY_TOPIA_VERSION + "}, " - + "${u." + PollenUser.PROPERTY_NAME + "}, " - + "${u." + PollenUser.PROPERTY_ADMINISTRATOR + "}, " - + "${u." + PollenUser.PROPERTY_LANGUAGE + "}, " - + "${u." + PollenUser.PROPERTY_PASSWORD + "}, " - + "${u." + PollenUser.PROPERTY_SALT + "}, " - + "${u." + PollenUser.PROPERTY_BANNED + "}, " - + "${u." + PollenUser.PROPERTY_GTU_VALIDATION_DATE + "}, " - + "${u." + PollenUser.PROPERTY_PREMIUM_TO + "}, " - + "${u." + PollenUser.PROPERTY_CAN_CREATE_POLL + "}, " - + "${u." + PollenUser.PROPERTY_DEFAULT_EMAIL_ADDRESS + " " + PollenUserEmailAddress.PROPERTY_TOPIA_ID + "}"; + String userProperties = PROPERTY_TOPIA_ID + ", " + PROPERTY_TOPIA_VERSION + ", " + + PROPERTY_NAME + ", " + PROPERTY_ADMINISTRATOR + ", " + + PROPERTY_LANGUAGE + ", " + PROPERTY_PASSWORD + ", " + + PROPERTY_SALT + ", " + PROPERTY_BANNED + ", " + + PROPERTY_GTU_VALIDATION_DATE + ", " + PROPERTY_PREMIUM_TO + ", " + + PROPERTY_CAN_CREATE_POLL + ", " + PROPERTY_AVATAR + ", " + + PROPERTY_DEFAULT_EMAIL_ADDRESS; + + String userVariables = "${u." + PROPERTY_TOPIA_ID + "}, " + + "${u." + PROPERTY_TOPIA_VERSION + "}, " + + "${u." + PROPERTY_NAME + "}, " + + "${u." + PROPERTY_ADMINISTRATOR + "}, " + + "${u." + PROPERTY_LANGUAGE + "}, " + + "${u." + PROPERTY_PASSWORD + "}, " + + "${u." + PROPERTY_SALT + "}, " + + "${u." + PROPERTY_BANNED + "}, " + + "${u." + PROPERTY_GTU_VALIDATION_DATE + "}, " + + "${u." + PROPERTY_PREMIUM_TO + "}, " + + "${u." + PROPERTY_CAN_CREATE_POLL + "}, " + + "${u." + PROPERTY_AVATAR + "." + PollenResource.PROPERTY_TOPIA_ID + "}, " + + "${u." + PROPERTY_DEFAULT_EMAIL_ADDRESS + "." + PollenUserEmailAddress.PROPERTY_TOPIA_ID + "}"; String editUser = "UPDATE SET " - + PollenUser.PROPERTY_TOPIA_VERSION + " = EXCLUDED." + PollenUser.PROPERTY_TOPIA_VERSION + ", " - + PollenUser.PROPERTY_NAME + " = EXCLUDED." + PollenUser.PROPERTY_NAME + ", " - + PollenUser.PROPERTY_ADMINISTRATOR + " = EXCLUDED." + PollenUser.PROPERTY_ADMINISTRATOR + ", " - + PollenUser.PROPERTY_LANGUAGE + " = EXCLUDED." + PollenUser.PROPERTY_LANGUAGE + ", " - + PollenUser.PROPERTY_PASSWORD + " = EXCLUDED." + PollenUser.PROPERTY_PASSWORD + ", " - + PollenUser.PROPERTY_SALT + " = EXCLUDED." + PollenUser.PROPERTY_SALT + ", " - + PollenUser.PROPERTY_BANNED + " = EXCLUDED." + PollenUser.PROPERTY_BANNED + ", " - + PollenUser.PROPERTY_GTU_VALIDATION_DATE + " = EXCLUDED." + PollenUser.PROPERTY_GTU_VALIDATION_DATE + ", " - + PollenUser.PROPERTY_PREMIUM_TO + " = EXCLUDED." + PollenUser.PROPERTY_PREMIUM_TO + ", " - + PollenUser.PROPERTY_CAN_CREATE_POLL + " = EXCLUDED." + PollenUser.PROPERTY_CAN_CREATE_POLL + ", " - + PollenUser.PROPERTY_DEFAULT_EMAIL_ADDRESS + " = EXCLUDED." + PollenUser.PROPERTY_DEFAULT_EMAIL_ADDRESS; + + PROPERTY_TOPIA_VERSION + " = EXCLUDED." + PROPERTY_TOPIA_VERSION + ", " + + PROPERTY_NAME + " = EXCLUDED." + PROPERTY_NAME + ", " + + PROPERTY_ADMINISTRATOR + " = EXCLUDED." + PROPERTY_ADMINISTRATOR + ", " + + PROPERTY_LANGUAGE + " = EXCLUDED." + PROPERTY_LANGUAGE + ", " + + PROPERTY_PASSWORD + " = EXCLUDED." + PROPERTY_PASSWORD + ", " + + PROPERTY_SALT + " = EXCLUDED." + PROPERTY_SALT + ", " + + PROPERTY_BANNED + " = EXCLUDED." + PROPERTY_BANNED + ", " + + PROPERTY_GTU_VALIDATION_DATE + " = EXCLUDED." + PROPERTY_GTU_VALIDATION_DATE + ", " + + PROPERTY_PREMIUM_TO + " = EXCLUDED." + PROPERTY_PREMIUM_TO + ", " + + PROPERTY_CAN_CREATE_POLL + " = EXCLUDED." + PROPERTY_CAN_CREATE_POLL + ", " + + PROPERTY_AVATAR + " = EXCLUDED." + PROPERTY_AVATAR + ", " + + PROPERTY_DEFAULT_EMAIL_ADDRESS + " = EXCLUDED." + PROPERTY_DEFAULT_EMAIL_ADDRESS; String createUser = "INSERT INTO pollenuser (" + userProperties + ") VALUES (" + userVariables + ")"; - String saveUser = createUser + " ON CONFLICT (" + PollenUser.PROPERTY_TOPIA_ID + ") DO " + editUser; + String saveUser = createUser + " ON CONFLICT (" + PROPERTY_TOPIA_ID + ") DO " + editUser; @Update(sql = saveUser, mapper = PollenMapper.class) int saveUser(PollenUser u); String deleteUser = "DELETE FROM pollenuser" + - " WHERE " + PollenUser.PROPERTY_TOPIA_ID + " = ${u.topiaId}"; + " WHERE " + PROPERTY_TOPIA_ID + " = ${u.topiaId}"; @Update(sql = deleteUser, mapper = PollenMapper.class) int deleteUser(PollenUser u); diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/PollenMapper.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/PollenMapper.java index f0b86dce..134b48f2 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/PollenMapper.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/PollenMapper.java @@ -4,44 +4,52 @@ import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver; import com.fasterxml.jackson.databind.module.SimpleModule; -import com.google.common.math.BigIntegerMath; import org.chorem.pollen.persistence.entity.*; import org.nuiton.spgeed.mapper.JsonMapper; +import org.nuiton.topia.persistence.TopiaEntity; -import java.math.BigInteger; +import java.util.*; public class PollenMapper extends JsonMapper { + public static <E extends TopiaEntity> Map<Class<E>, Class<? extends E>> getMapper() { + Map<Class<E>, Class<? extends E>> mapper = new HashMap<>(); + mapper.put((Class<E>) ChildFavoriteList.class, (Class<? extends E>) ChildFavoriteListImpl.class); + mapper.put((Class<E>) Choice.class, (Class<? extends E>) ChoiceImpl.class); + mapper.put((Class<E>) Comment.class, (Class<? extends E>) CommentImpl.class); + mapper.put((Class<E>) EmailToResend.class, (Class<? extends E>) EmailToResendImpl.class); + mapper.put((Class<E>) FavoriteList.class, (Class<? extends E>) FavoriteListImpl.class); + mapper.put((Class<E>) FavoriteListMember.class, (Class<? extends E>) FavoriteListMemberImpl.class); + mapper.put((Class<E>) LoginProvider.class, (Class<? extends E>) LoginProviderImpl.class); + mapper.put((Class<E>) Poll.class, (Class<? extends E>) PollImpl.class); + mapper.put((Class<E>) PollenPrincipal.class, (Class<? extends E>) PollenPrincipalImpl.class); + mapper.put((Class<E>) PollenResource.class, (Class<? extends E>) PollenResourceImpl.class); + mapper.put((Class<E>) PollenToken.class, (Class<? extends E>) PollenTokenImpl.class); + mapper.put((Class<E>) PollenUser.class, (Class<? extends E>) PollenUserImpl.class); + mapper.put((Class<E>) PollenUserEmailAddress.class, (Class<? extends E>) PollenUserEmailAddressImpl.class); + mapper.put((Class<E>) Question.class, (Class<? extends E>) QuestionImpl.class); + mapper.put((Class<E>) Report.class, (Class<? extends E>) ReportImpl.class); + mapper.put((Class<E>) SessionToken.class, (Class<? extends E>) SessionTokenImpl.class); + mapper.put((Class<E>) UserCredential.class, (Class<? extends E>) UserCredentialImpl.class); + mapper.put((Class<E>) Vote.class, (Class<? extends E>) VoteImpl.class); + mapper.put((Class<E>) Voter.class, (Class<? extends E>) VoterImpl.class); + mapper.put((Class<E>) VoterList.class, (Class<? extends E>) VoterListImpl.class); + mapper.put((Class<E>) VoterListMember.class, (Class<? extends E>) VoterListMemberImpl.class); + mapper.put((Class<E>) VoteToChoice.class, (Class<? extends E>) VoteToChoiceImpl.class); + return mapper; + } + @Override public void configureObjectMapper(ObjectMapper mapper) { super.configureObjectMapper(mapper); - SimpleModule module = new SimpleModule("CustomModel", Version.unknownVersion()); + SimpleModule module = new SimpleModule("PollenMapper", Version.unknownVersion()); SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver(); - resolver.addMapping(ChildFavoriteList.class, ChildFavoriteListImpl.class); - resolver.addMapping(Choice.class, ChoiceImpl.class); - resolver.addMapping(Comment.class, CommentImpl.class); - resolver.addMapping(EmailToResend.class, EmailToResendImpl.class); - resolver.addMapping(FavoriteList.class, FavoriteListImpl.class); - resolver.addMapping(FavoriteListMember.class, FavoriteListMemberImpl.class); - resolver.addMapping(LoginProvider.class, LoginProviderImpl.class); - resolver.addMapping(Poll.class, PollImpl.class); - resolver.addMapping(PollenPrincipal.class, PollenPrincipalImpl.class); - resolver.addMapping(PollenResource.class, PollenResourceImpl.class); - resolver.addMapping(PollenToken.class, PollenTokenImpl.class); - resolver.addMapping(PollenUser.class, PollenUserImpl.class); - resolver.addMapping(PollenUserEmailAddress.class, PollenUserEmailAddressImpl.class); - resolver.addMapping(Question.class, QuestionImpl.class); - resolver.addMapping(Report.class, ReportImpl.class); - resolver.addMapping(SessionToken.class, SessionTokenImpl.class); - resolver.addMapping(UserCredential.class, UserCredentialImpl.class); - resolver.addMapping(Vote.class, VoteImpl.class); - resolver.addMapping(Voter.class, VoterImpl.class); - resolver.addMapping(VoterList.class, VoterListImpl.class); - resolver.addMapping(VoterListMember.class, VoterListMemberImpl.class); - resolver.addMapping(VoteToChoice.class, VoteToChoiceImpl.class); + for (Map.Entry<Class<TopiaEntity>, Class<? extends TopiaEntity>> entry : PollenMapper.getMapper().entrySet()) { + resolver.addMapping(entry.getKey(), entry.getValue()); + } module.setAbstractTypes(resolver); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java index d7300986..1762fde7 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java @@ -22,6 +22,7 @@ package org.chorem.pollen.services.service; */ import org.chorem.pollen.persistence.entity.PollenResource; +import org.chorem.pollen.persistence.entity.PollenResourceImpl; import org.chorem.pollen.persistence.entity.ResourceType; import org.chorem.pollen.services.PollenService; import org.chorem.pollen.services.PollenTechnicalException; @@ -34,6 +35,7 @@ import org.chorem.pollen.services.bean.resource.ResourceFileBean; import org.chorem.pollen.services.bean.resource.ResourceMetaBean; import org.chorem.pollen.services.bean.resource.ResourceStreamBean; import org.nuiton.topia.persistence.TopiaIdFactory; +import org.nuiton.topia.persistence.internal.ShortTopiaIdFactory; import javax.imageio.ImageIO; import java.awt.Graphics2D; @@ -188,7 +190,7 @@ public class PollenResourceService extends PollenServiceSupport implements Polle errorMap.failIfNotEmpty(); // commit done by the caller - return getPollenResourceDao().create(saveResource(resource)); + return saveResource(resource); } public void deleteResource(String resourceId) { @@ -202,34 +204,23 @@ public class PollenResourceService extends PollenServiceSupport implements Polle checkIsAdmin(); } - getPollenResourceDao().delete(resource); - - commit(); + getSpgeedRessourceDao().deleteResource(resourceId); } public ResourceStreamBean getAvatar(String userId) { checkIsConnectedRequired(); - PollenResource resource = getPollenResourceDao().findAvatarForUser(userId); + PollenResource resource = getSpgeedRessourceDao().getResourceUserId(userId); return toResourceStreamBean(resource); } protected PollenResource getResource0(String resourceId) { - return getPollenResourceDao().forTopiaIdEquals(resourceId).findUnique(); + return getSpgeedRessourceDao().getResource(resourceId); } - protected PollenResource saveResource(AbstractResourceBean resource) { - boolean resourceExist = resource.isPersisted(); - - PollenResource toSave; - - if (resourceExist) { - toSave = getResource0(resource.getEntityId()); - } else { - toSave = getPollenResourceDao().create(); - } + PollenResource toSave = newEntity(PollenResource.class); toSave.setName(resource.getName()); toSave.setContentType(resource.getContentType()); @@ -237,6 +228,8 @@ public class PollenResourceService extends PollenServiceSupport implements Polle toSave.setResourceType(resource.getResourceType()); toSave.setResourceContent(resource.getResourceBlob()); + getSpgeedRessourceDao().saveResource(toSave); + return toSave; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java index fd88b8a9..4701994e 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java @@ -52,17 +52,16 @@ import org.hibernate.internal.SessionFactoryImpl; import org.nuiton.spgeed.SqlSession; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.TopiaIdFactory; +import org.nuiton.topia.persistence.internal.ShortTopiaIdFactory; import org.nuiton.util.StringUtil; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; import javax.sql.DataSource; import java.sql.SQLException; -import java.util.Collection; -import java.util.Date; -import java.util.Locale; -import java.util.Map; +import java.util.*; import java.util.function.Function; /** @@ -79,6 +78,8 @@ public abstract class PollenServiceSupport implements PollenService { protected SqlSession spgeedSession = null; + protected TopiaIdFactory topiaIdFactory = null; + public static synchronized Object getLock(String id) { return ENTITY_LOCK_BY_ID. computeIfAbsent(id, id2 -> new Object()); } @@ -225,6 +226,24 @@ public abstract class PollenServiceSupport implements PollenService { return spgeedSession; } + + protected <E extends TopiaEntity> E newEntity(Class<E> entityClass) { + try { + E topiaEntity = (E) PollenMapper.getMapper().get(entityClass).newInstance(); + + if (topiaIdFactory == null) { + topiaIdFactory = new ShortTopiaIdFactory(); + } + + topiaEntity.setTopiaId(topiaIdFactory.newTopiaId(entityClass, topiaEntity)); + + return topiaEntity; + } catch (InstantiationException | IllegalAccessException e) { + throw new TopiaException( + "Impossible de trouver ou d'instancier la classe " + entityClass.getSimpleName()); + } + } + protected <E extends PollenSpgeedDao> E getSpgeedDao(Class<E> daoClass) { SqlSession session = getSpgeedSqlSession(); session.setDefaultMapper(PollenMapper.class); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java index 31db0127..a05a0444 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java @@ -38,17 +38,11 @@ import org.chorem.pollen.services.bean.UserCredentialBean; import org.chorem.pollen.services.bean.UsersRight; import org.chorem.pollen.services.bean.resource.ResourceFileBean; import org.chorem.pollen.services.service.security.*; -import org.junit.Assert; import org.nuiton.spgeed.Chunk; -import org.nuiton.spgeed.ChunkArrayList; -import org.nuiton.topia.persistence.TopiaIdFactory; -import org.nuiton.topia.persistence.internal.ShortTopiaIdFactory; import org.nuiton.util.pagination.PaginationOrder; import org.nuiton.util.pagination.PaginationParameter; import org.nuiton.util.pagination.PaginationResult; -import org.omg.CORBA.DynAnyPackage.Invalid; -import javax.annotation.CheckForNull; import java.util.*; import java.util.stream.Collectors; @@ -155,14 +149,17 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer } private void saveUser(PollenUser user) { - PollenUserEmailAddress emailAddress = user.getDefaultEmailAddress(); + PollenUserEmailAddress defaultemailAddress = user.getDefaultEmailAddress(); - if (emailAddress != null) { - getSpgeedUserEmailAddressDao().saveEmail(emailAddress); - } + getSpgeedUserEmailAddressDao().saveEmail(defaultemailAddress); getSpgeedUserDao().saveUser(user); - if (emailAddress != null) { - getSpgeedUserEmailAddressDao().saveEmail(emailAddress, user.getTopiaId()); + for (PollenUserEmailAddress emails : user.getEmailAddresses()) { + getSpgeedUserEmailAddressDao().saveEmail(emails, user.getTopiaId()); + } + if (user.getUserCredential() != null) { + for (UserCredential userCredential : user.getUserCredential()) { + getSpgeedUserCredentialDao().saveUserCredential(userCredential, user.getTopiaId()); + } } } @@ -216,10 +213,9 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer anonymizeUser(user); } - /*getSpgeedUserDao().deleteUser(user); - if (user.getUserCredential() - */getUserCredentialDao().deleteAll(user.getUserCredential()); - getPollenUserDao().delete(user); + getSpgeedUserDao().deleteUser(user); + getUserCredentialDao().deleteAll(user.getUserCredential()); + //getPollenUserDao().delete(user); commit(); getNotificationService().onUserDeleted(user); @@ -316,7 +312,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer } - public void createDefaultUsers() throws InvalidFormException { + public void createDefaultUsers() { if (getPollenUserDao().count() == 0) { @@ -332,7 +328,6 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer PollenUser admin = savePollenUser(adminBean); admin.setAdministrator(true); admin.getDefaultEmailAddress().setValidated(true); - commit(); } } @@ -350,9 +345,8 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer checkIsAdmin(); PollenUser user = getUser0(userId); if (user.getAvatar() != null) { - getPollenResourceDao().delete(user.getAvatar()); + getSpgeedRessourceDao().deleteResource(user.getAvatar().getTopiaId()); } - commit(); } public PollenEntityRef<PollenResource> setAvatar(ResourceFileBean resourceBean) throws InvalidFormException { @@ -360,11 +354,14 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer resourceBean.setResourceType(ResourceType.AVATAR); PollenResource avatarResource = getPollenResourceService().createAvatarResource(resourceBean); PollenUser user = getConnectedUser(); - if (user.getAvatar() != null) { - getPollenResourceDao().delete(user.getAvatar()); - } + PollenResource oldAvatar = user.getAvatar(); + user.setAvatar(avatarResource); - commit(); + getSpgeedUserDao().saveUser(user); + if (oldAvatar != null) { + getSpgeedRessourceDao().deleteResource(user.getAvatar().getTopiaId()); + } + return PollenEntityRef.of(avatarResource); } @@ -384,15 +381,13 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer emailAddress = checkUserEmailAddress(errors, emailAddress); errors.failIfNotEmpty(); - PollenUserEmailAddress address = new PollenUserEmailAddressImpl(); + PollenUserEmailAddress address = newEntity(PollenUserEmailAddress.class); address.setEmailAddress(emailAddress); address.setValidated(false); user.addEmailAddresses(address); String token = getSecurityService().generateEmailToken(address); - TopiaIdFactory idFactory = new ShortTopiaIdFactory(); - address.setTopiaId(idFactory.newTopiaId(PollenUserEmailAddress.class, address)); getSpgeedUserEmailAddressDao().saveEmail(address, user.getTopiaId()); getNotificationService().onUserEmailAddressAdded(user, address, token); @@ -484,16 +479,13 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer toSave = getUser0(user.getEntityId()); } else { - TopiaIdFactory idFactory = new ShortTopiaIdFactory(); - toSave = new PollenUserImpl(); - toSave.setTopiaId(idFactory.newTopiaId(PollenUser.class, toSave)); + toSave = newEntity(PollenUser.class); PollenUserEmailAddressBean emailAddress = user.getDefaultEmailAddress(); if (emailAddress != null) { - PollenUserEmailAddress defaultEmailAddress = new PollenUserEmailAddressImpl(); + PollenUserEmailAddress defaultEmailAddress = newEntity(PollenUserEmailAddress.class); - defaultEmailAddress.setTopiaId(idFactory.newTopiaId(PollenUserEmailAddress.class, defaultEmailAddress)); defaultEmailAddress.setEmailAddress(getCleanMail(emailAddress.getEmailAddress())); defaultEmailAddress.setValidated(false); @@ -502,6 +494,14 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer toSave.setDefaultEmailAddress(defaultEmailAddress); } + for (UserCredentialBean userCredentialBean:user.getCredentials()) { + UserCredential userCredential = newEntity(UserCredential.class); + userCredential.setEmail(userCredentialBean.getEmailAddress()); + userCredential.setUserName(userCredentialBean.getUserName()); + userCredential.setProvider(userCredentialBean.getProvider()); + userCredential.setUserId(toSave.getTopiaId()); + toSave.addUserCredential(userCredential); + } if (user.isGtuValidated()) { toSave.setGtuValidationDate(getNow()); } @@ -526,8 +526,6 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer protected PollenUser getUser0(String userId) { PollenUser user = getSpgeedUserDao().getUser(userId); - Assert.assertEquals(getSpgeedUserCredentialDao().getUserCredential(userId), user.getUserCredential()); - user = getPollenUserDao().forTopiaIdEquals(userId).findUnique(); if (user == null) { throw new IllegalArgumentException(); } @@ -615,7 +613,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer checkNotNull(emailAddress); checkIsPersisted(emailAddress); - PollenUserEmailAddress result = getPollenUserEmailAddressDao().forTopiaIdEquals(emailAddress.getEntityId()).findUnique(); + PollenUserEmailAddress result = getSpgeedUserEmailAddressDao().getEmailAddress(emailAddress.getEntityId()); if (!user.containsEmailAddresses(result)) { @@ -625,7 +623,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer result.setPgpPublicKey(emailAddress.getPgpPublicKey()); - commit(); + getSpgeedUserEmailAddressDao().saveEmail(result); return toPollenUserEmailAddressBean(result); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java index d1c3bab8..362ca5a6 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java @@ -30,16 +30,15 @@ import org.brickred.socialauth.SocialAuthConfig; import org.brickred.socialauth.SocialAuthManager; import org.brickred.socialauth.util.Constants; import org.brickred.socialauth.util.OAuthConfig; +import org.chorem.pollen.persistence.Dao.PollenUserSpgeedDao; import org.chorem.pollen.persistence.entity.LoginProvider; import org.chorem.pollen.persistence.entity.LoginProviderTopiaDao; import org.chorem.pollen.persistence.entity.PollenResource; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.PollenUserEmailAddress; -import org.chorem.pollen.persistence.entity.PollenUserImpl; import org.chorem.pollen.persistence.entity.PollenUserTopiaDao; import org.chorem.pollen.persistence.entity.ResourceType; import org.chorem.pollen.persistence.entity.UserCredential; -import org.chorem.pollen.persistence.entity.UserCredentialImpl; import org.chorem.pollen.services.bean.LoginProviderBean; import org.chorem.pollen.services.bean.PollenEntityId; import org.chorem.pollen.services.bean.PollenEntityRef; @@ -71,7 +70,7 @@ public class SocialAuthService extends PollenServiceSupport { Profile p = provider.getUserProfile(); PollenUser pollenUser; - PollenUserTopiaDao userDao = getPollenUserDao(); + PollenUserSpgeedDao userDao = getSpgeedUserDao(); PollenUser pollenUserForCredential = userDao.findUserWithCredentialOrNull(p.getProviderId(), p.getValidatedId()); if (pollenUserForCredential != null) { @@ -95,24 +94,28 @@ public class SocialAuthService extends PollenServiceSupport { UserCredential credential = createUserCredential(p); - pollenUser = new PollenUserImpl(); + pollenUser = newEntity(PollenUser.class); pollenUser.setName(name); String credentialEmail = getCleanMail(credential.getEmail()); + PollenUserEmailAddress defaultEmailAddress = null; if (StringUtils.isNotBlank(credentialEmail)) { - PollenUserEmailAddress defaultEmailAddress = getPollenUserEmailAddressDao().create(); + defaultEmailAddress = newEntity(PollenUserEmailAddress.class); defaultEmailAddress.setEmailAddress(credentialEmail); pollenUser.addEmailAddresses(defaultEmailAddress); pollenUser.setDefaultEmailAddress(defaultEmailAddress); + getSpgeedUserEmailAddressDao().saveEmail(defaultEmailAddress); } pollenUser.setLanguage(p.getLanguage()); pollenUser.setAdministrator(false); pollenUser.setBanned(false); pollenUser.addUserCredential(credential); - pollenUser = userDao.create(pollenUser); - commit(); + userDao.saveUser(pollenUser); + if (StringUtils.isNotBlank(credentialEmail)) { + getSpgeedUserEmailAddressDao().saveEmail(defaultEmailAddress, pollenUser.getTopiaId()); + } getNotificationService().onUserCreatedFromProvider(pollenUser, credential); } @@ -147,11 +150,12 @@ public class SocialAuthService extends PollenServiceSupport { .map(PollenUserEmailAddress::getEmailAddress) .noneMatch(email -> Objects.equals(credentialEmail, email)); if (addEmailAddress) { - PollenUserEmailAddress emailAddress = getPollenUserEmailAddressDao().create(); + PollenUserEmailAddress emailAddress = newEntity(PollenUserEmailAddress.class); emailAddress.setEmailAddress(credentialEmail); connectedUser.addEmailAddresses(emailAddress); } } + getSpgeedUserCredentialDao().saveUserCredential(credential, connectedUser.getTopiaId()); commit(); @@ -168,12 +172,11 @@ public class SocialAuthService extends PollenServiceSupport { userEmail = p.getEmail(); } - UserCredential credential = new UserCredentialImpl(); + UserCredential credential = newEntity(UserCredential.class); credential.setProvider(p.getProviderId()); credential.setUserId(p.getValidatedId()); credential.setUserName(accountName); credential.setEmail(userEmail); - credential = getUserCredentialDao().create(credential); return credential; } @@ -270,7 +273,7 @@ public class SocialAuthService extends PollenServiceSupport { if (loginProviderExists) { toSave = dao.forTopiaIdEquals(loginProvider.getEntityId()).findUnique(); } else { - toSave = dao.create(); + toSave = newEntity(LoginProvider.class); } toSave.setName(loginProvider.getName()); toSave.setKey(loginProvider.getKey()); diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java index 7fd1c152..c9690f2e 100644 --- a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java +++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java @@ -21,7 +21,6 @@ package org.chorem.pollen.services.service; * #L% */ -import com.google.common.base.Preconditions; import org.apache.commons.collections4.CollectionUtils; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.PollenUserEmailAddress; -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm