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>.