From 71afc8d8aa9e259c449571d28ccab386604ef1c8 Mon Sep 17 00:00:00 2001 From: YukiFujisawa Date: Tue, 24 Sep 2019 12:45:36 +0900 Subject: [PATCH 1/7] Fix getter setter is double-defined. --- .../mailchimp/domain/CampaignDefaults.java | 31 --- .../java/com/mailchimp/domain/Member.java | 13 +- .../com/mailchimp/domain/SubscriberList.java | 219 +----------------- 3 files changed, 13 insertions(+), 250 deletions(-) diff --git a/src/main/java/com/mailchimp/domain/CampaignDefaults.java b/src/main/java/com/mailchimp/domain/CampaignDefaults.java index e156d67..a356613 100644 --- a/src/main/java/com/mailchimp/domain/CampaignDefaults.java +++ b/src/main/java/com/mailchimp/domain/CampaignDefaults.java @@ -48,35 +48,4 @@ public class CampaignDefaults { @Setter private String language; - public String getFromName() { - return fromName; - } - - public void setFromName(String fromName) { - this.fromName = fromName; - } - - public String getFromEmail() { - return fromEmail; - } - - public void setFromEmail(String fromEmail) { - this.fromEmail = fromEmail; - } - - public String getSubject() { - return subject; - } - - public void setSubject(String subject) { - this.subject = subject; - } - - public String getLanguage() { - return language; - } - - public void setLanguage(String language) { - this.language = language; - } } diff --git a/src/main/java/com/mailchimp/domain/Member.java b/src/main/java/com/mailchimp/domain/Member.java index c383034..dc65031 100644 --- a/src/main/java/com/mailchimp/domain/Member.java +++ b/src/main/java/com/mailchimp/domain/Member.java @@ -82,21 +82,11 @@ public static class SubscriberStats { private SubscribeStatus status; @JsonProperty("merge_fields") + @Builder.Default @Getter @Setter private Map mergeFields = new HashMap<>(); -// @JsonProperty -// @Getter -// @Setter -// private Map interests = new HashMap<>(); - //@JsonProperty - //@Getter - //@JsonIgnore - //private SubscriberStats stats = new SubscriberStats(); -// @JsonProperty("ip_signup") -// @Getter -// private String ipSignup; @JsonProperty("timestamp_signup") @JsonDeserialize(using = MailChimpZonedDateTimeDeserializer.class) @JsonSerialize(using = MailChimpZonedDateTimeSerializer.class) @@ -157,6 +147,7 @@ public static class SubscriberStats { private String listId; @JsonProperty("interests") + @Builder.Default private Map interests = new HashMap<>(); @JsonIgnore diff --git a/src/main/java/com/mailchimp/domain/SubscriberList.java b/src/main/java/com/mailchimp/domain/SubscriberList.java index c615c60..ea7ba97 100644 --- a/src/main/java/com/mailchimp/domain/SubscriberList.java +++ b/src/main/java/com/mailchimp/domain/SubscriberList.java @@ -84,80 +84,18 @@ public static class Contact { @Getter @Setter private String phone; - - public String getCompany() { - return company; - } - - public void setCompany(String company) { - this.company = company; - } - - public String getAddress1() { - return address1; - } - - public void setAddress1(String address1) { - this.address1 = address1; - } - - public String getAddress2() { - return address2; - } - - public void setAddress2(String address2) { - this.address2 = address2; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getState() { - return state; - } - - public void setState(String state) { - this.state = state; - } - - public String getZip() { - return zip; - } - - public void setZip(String zip) { - this.zip = zip; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } } /** * A string that uniquely identifies this list. */ @Getter + @Setter private String id; @JsonProperty("total_items") @Getter + @Setter private Integer totalItems; /** @@ -172,6 +110,7 @@ public void setPhone(String phone) { */ @JsonProperty("contact") @Getter + @Setter private Contact contact = new Contact(); /** @@ -195,6 +134,7 @@ public void setPhone(String phone) { */ @JsonProperty("campaign_defaults") @Getter + @Setter private CampaignDefaults campaignDefaults = new CampaignDefaults(); /** @@ -218,6 +158,7 @@ public void setPhone(String phone) { */ @JsonProperty("date_created") @Getter + @Setter @JsonDeserialize(using = MailChimpZonedDateTimeDeserializer.class) private ZonedDateTime dateCreated; @@ -226,6 +167,7 @@ public void setPhone(String phone) { */ @JsonProperty("list_rating") @Getter + @Setter private Integer listRating; /** @@ -243,6 +185,7 @@ public void setPhone(String phone) { */ @JsonProperty("subscribe_url_short") @Getter + @Setter private String subscribeUrlShort; /** @@ -250,6 +193,7 @@ public void setPhone(String phone) { */ @JsonProperty("subscribe_url_long") @Getter + @Setter private String subscribeUrlLong; /** @@ -257,6 +201,7 @@ public void setPhone(String phone) { */ @JsonProperty("beamer_address") @Getter + @Setter private String beamerAddress; /** @@ -270,155 +215,13 @@ public void setPhone(String phone) { * Any list-specific modules installed for this list. */ @Getter + @Setter private java.util.List modules; /** * Stats for the list. Many of these are cached for at least five minutes. */ @Getter + @Setter private ListStats stats; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public Integer getTotalItems() { - return totalItems; - } - - public void setTotalItems(Integer totalItems) { - this.totalItems = totalItems; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Contact getContact() { - return contact; - } - - public void setContact(Contact contact) { - this.contact = contact; - } - - public String getPermissionReminder() { - return permissionReminder; - } - - public void setPermissionReminder(String permissionReminder) { - this.permissionReminder = permissionReminder; - } - - public Boolean getUseArchiveBar() { - return useArchiveBar; - } - - public void setUseArchiveBar(Boolean useArchiveBar) { - this.useArchiveBar = useArchiveBar; - } - - public CampaignDefaults getCampaignDefaults() { - return campaignDefaults; - } - - public void setCampaignDefaults(CampaignDefaults campaignDefaults) { - this.campaignDefaults = campaignDefaults; - } - - public String getNotifyOnSubscribe() { - return notifyOnSubscribe; - } - - public void setNotifyOnSubscribe(String notifyOnSubscribe) { - this.notifyOnSubscribe = notifyOnSubscribe; - } - - public String getNotifyOnUnsubscribe() { - return notifyOnUnsubscribe; - } - - public void setNotifyOnUnsubscribe(String notifyOnUnsubscribe) { - this.notifyOnUnsubscribe = notifyOnUnsubscribe; - } - - public ZonedDateTime getDateCreated() { - return dateCreated; - } - - public void setDateCreated(ZonedDateTime dateCreated) { - this.dateCreated = dateCreated; - } - - public Integer getListRating() { - return listRating; - } - - public void setListRating(Integer listRating) { - this.listRating = listRating; - } - - public Boolean getEmailTypeOption() { - return emailTypeOption; - } - - public void setEmailTypeOption(Boolean emailTypeOption) { - this.emailTypeOption = emailTypeOption; - } - - public String getSubscribeUrlShort() { - return subscribeUrlShort; - } - - public void setSubscribeUrlShort(String subscribeUrlShort) { - this.subscribeUrlShort = subscribeUrlShort; - } - - public String getSubscribeUrlLong() { - return subscribeUrlLong; - } - - public void setSubscribeUrlLong(String subscribeUrlLong) { - this.subscribeUrlLong = subscribeUrlLong; - } - - public String getBeamerAddress() { - return beamerAddress; - } - - public void setBeamerAddress(String beamerAddress) { - this.beamerAddress = beamerAddress; - } - - public Visibility getVisibility() { - return visibility; - } - - public void setVisibility(Visibility visibility) { - this.visibility = visibility; - } - - public java.util.List getModules() { - return modules; - } - - public void setModules(java.util.List modules) { - this.modules = modules; - } - - public ListStats getStats() { - return stats; - } - - public void setStats(ListStats stats) { - this.stats = stats; - } } From 3010833df1b1b1e6cfaedd89c595a628115a4dbb Mon Sep 17 00:00:00 2001 From: YukiFujisawa Date: Tue, 24 Sep 2019 13:43:11 +0900 Subject: [PATCH 2/7] Verup libs --- build.gradle | 9 +- gradle/wrapper/gradle-wrapper.jar | Bin 53638 -> 54417 bytes gradle/wrapper/gradle-wrapper.properties | 6 +- gradlew | 72 ++++++---- gradlew.bat | 174 +++++++++++------------ 5 files changed, 134 insertions(+), 127 deletions(-) diff --git a/build.gradle b/build.gradle index 27f4afd..3f59b98 100644 --- a/build.gradle +++ b/build.gradle @@ -12,12 +12,13 @@ repositories { } dependencies { - compile group: 'org.projectlombok', name: 'lombok', version: '1.18.4' + compile group: 'org.projectlombok', name: 'lombok', version: '1.18.10' + annotationProcessor 'org.projectlombok:lombok:1.18.10' compile group: 'io.github.openfeign', name: 'feign-core', version: '10.1.0' - compile('com.fasterxml.jackson.core:jackson-databind:2.8.3') - compile('commons-codec:commons-codec:1.10') + compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.9.3' + compile group: 'commons-codec', name: 'commons-codec', version: '1.13' compile group: 'org.apache.commons', name: 'commons-io', version: '1.3.2' - testCompile('junit:junit:4.12') + testCompile group: 'junit', name: 'junit', version: '4.12' testCompile group: 'io.github.openfeign', name: 'feign-mock', version: '10.1.0' } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e8c6bf7bb47dff6b81c2cf7a349eb7e912c9fbe2..758de960ec7947253b058ff79c88ce51f3abe08a 100644 GIT binary patch delta 41646 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 delta 40910 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 T;CCn=7sen3+N*UN>eqh&$fC5S diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0af31bf..31e94e3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Dec 29 11:07:55 CET 2018 +#Tue Sep 24 13:01:32 JST 2019 +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.7-all.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 97fac78..cccdd3d 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,26 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -85,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -150,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index aec9973..f955316 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,90 +1,84 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega From 6ab5ca29224f33db1d435fd8b6095107dfe4b463 Mon Sep 17 00:00:00 2001 From: YukiFujisawa Date: Tue, 24 Sep 2019 18:36:28 +0900 Subject: [PATCH 3/7] Verup openfeign --- build.gradle | 4 ++-- src/main/java/com/mailchimp/MailChimpErrorDecoder.java | 2 +- src/main/java/com/mailchimp/MailChimpErrorException.java | 2 +- src/main/java/com/mailchimp/jackson/JacksonEncoder.java | 7 ++++++- src/test/java/com/mailchimp/MailChimpClientTest.java | 3 ++- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 3f59b98..2343bbf 100644 --- a/build.gradle +++ b/build.gradle @@ -14,11 +14,11 @@ repositories { dependencies { compile group: 'org.projectlombok', name: 'lombok', version: '1.18.10' annotationProcessor 'org.projectlombok:lombok:1.18.10' - compile group: 'io.github.openfeign', name: 'feign-core', version: '10.1.0' + compile group: 'io.github.openfeign', name: 'feign-core', version: '10.4.0' compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.9.3' compile group: 'commons-codec', name: 'commons-codec', version: '1.13' compile group: 'org.apache.commons', name: 'commons-io', version: '1.3.2' testCompile group: 'junit', name: 'junit', version: '4.12' - testCompile group: 'io.github.openfeign', name: 'feign-mock', version: '10.1.0' + testCompile group: 'io.github.openfeign', name: 'feign-mock', version: '10.4.0' } \ No newline at end of file diff --git a/src/main/java/com/mailchimp/MailChimpErrorDecoder.java b/src/main/java/com/mailchimp/MailChimpErrorDecoder.java index c3c5619..8583de2 100644 --- a/src/main/java/com/mailchimp/MailChimpErrorDecoder.java +++ b/src/main/java/com/mailchimp/MailChimpErrorDecoder.java @@ -49,7 +49,7 @@ public Exception decode(String methodKey, Response response) { } } else if (response.status() == 503) { // 503: Service (temporary) unavailable Date retryAfter = new RetryAfterDecoder().apply(firstOrNull(response.headers(), RETRY_AFTER)); - return new RetryableException(response.reason(), response.request().httpMethod(), retryAfter); + return new RetryableException(response.status(), response.reason(), response.request().httpMethod(), retryAfter, response.request()); } else { return new ErrorDecoder.Default().decode(methodKey, response); } diff --git a/src/main/java/com/mailchimp/MailChimpErrorException.java b/src/main/java/com/mailchimp/MailChimpErrorException.java index ff0e7fe..7b840f8 100644 --- a/src/main/java/com/mailchimp/MailChimpErrorException.java +++ b/src/main/java/com/mailchimp/MailChimpErrorException.java @@ -22,7 +22,7 @@ public class MailChimpErrorException extends FeignException { * Creates a new instance of MailChimpErrorException without detail message. */ public MailChimpErrorException(int status, String message, MailChimpError error) { - super(message); + super(status, message); this.error = error; } diff --git a/src/main/java/com/mailchimp/jackson/JacksonEncoder.java b/src/main/java/com/mailchimp/jackson/JacksonEncoder.java index c86aafa..23bebeb 100644 --- a/src/main/java/com/mailchimp/jackson/JacksonEncoder.java +++ b/src/main/java/com/mailchimp/jackson/JacksonEncoder.java @@ -1,10 +1,13 @@ package com.mailchimp.jackson; +import static feign.Util.UTF_8; + import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import feign.Request; import feign.RequestTemplate; import feign.codec.EncodeException; import feign.codec.Encoder; @@ -33,7 +36,9 @@ public JacksonEncoder(ObjectMapper mapper) { @Override public void encode(Object object, Type bodyType, RequestTemplate template) { try { - template.body(mapper.writeValueAsString(object)); + String bodyText = mapper.writeValueAsString(object); + byte[] bodyData = bodyText != null ? bodyText.getBytes(UTF_8) : null; + template.body(Request.Body.encoded(bodyData, UTF_8)); } catch (JsonProcessingException e) { throw new EncodeException(e.getMessage(), e); } diff --git a/src/test/java/com/mailchimp/MailChimpClientTest.java b/src/test/java/com/mailchimp/MailChimpClientTest.java index 5c59204..47ec1e5 100644 --- a/src/test/java/com/mailchimp/MailChimpClientTest.java +++ b/src/test/java/com/mailchimp/MailChimpClientTest.java @@ -5,6 +5,7 @@ import com.mailchimp.query.BatchesQuery; import com.mailchimp.query.ListMembersQuery; import com.mailchimp.query.ListsQuery; +import feign.FeignException; import feign.Response; import feign.mock.HttpMethod; import feign.mock.MockClient; @@ -486,7 +487,7 @@ public void removeBatch_existingBatchId_batchStopped(){ mailChimpClient.removeBatch("1"); } - @Test(expected = MailChimpErrorException.class) + @Test(expected = FeignException.NotFound.class) public void searchMembers_emptyQuery_throwException(){ mailChimpClient.searchMembers(""); } From 6b993344320976e35b843959e82276335790065a Mon Sep 17 00:00:00 2001 From: YukiFujisawa Date: Thu, 3 Oct 2019 16:50:00 +0900 Subject: [PATCH 4/7] Add *.log and Main.java --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index c0bbc2b..3a3e4b8 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ bin/ /.nb-gradle/ test.properties out +Main.java +*.log From b64e685072e267b42e25249749a379df60a32ec6 Mon Sep 17 00:00:00 2001 From: YukiFujisawa Date: Thu, 3 Oct 2019 16:51:05 +0900 Subject: [PATCH 5/7] Update gradle-5.6.2 --- gradle/wrapper/gradle-wrapper.properties | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 gradle/wrapper/gradle-wrapper.properties diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 31e94e3..0000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Tue Sep 24 13:01:32 JST 2019 -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStorePath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME From e7c3fb96168175d3038cdf1b50f58f3eb8dca51f Mon Sep 17 00:00:00 2001 From: YukiFujisawa Date: Thu, 3 Oct 2019 16:53:20 +0900 Subject: [PATCH 6/7] Add /reference Object --- .../java/com/mailchimp/MailChimpClient.java | 57 ++++- .../com/mailchimp/MailChimpClientBuilder.java | 2 +- .../domain/CampaignClickDetails.java | 100 +++++++++ .../mailchimp/domain/ClickReportsMembers.java | 93 ++++++++ .../java/com/mailchimp/domain/Condition.java | 24 -- .../com/mailchimp/domain/ExactMatches.java | 15 -- src/main/java/com/mailchimp/domain/Link.java | 54 +++++ .../java/com/mailchimp/domain/Member.java | 4 - .../com/mailchimp/domain/MemberActivity.java | 50 +++++ .../java/com/mailchimp/domain/Members.java | 24 -- .../java/com/mailchimp/domain/Report.java | 210 ++++++++++++++++++ .../java/com/mailchimp/domain/Reports.java | 17 ++ src/main/java/com/mailchimp/domain/Root.java | 28 +-- .../com/mailchimp/query/ReportsQuery.java | 26 +++ 14 files changed, 604 insertions(+), 100 deletions(-) create mode 100644 src/main/java/com/mailchimp/domain/CampaignClickDetails.java create mode 100644 src/main/java/com/mailchimp/domain/ClickReportsMembers.java create mode 100644 src/main/java/com/mailchimp/domain/Link.java create mode 100644 src/main/java/com/mailchimp/domain/MemberActivity.java create mode 100644 src/main/java/com/mailchimp/domain/Report.java create mode 100644 src/main/java/com/mailchimp/domain/Reports.java create mode 100644 src/main/java/com/mailchimp/query/ReportsQuery.java diff --git a/src/main/java/com/mailchimp/MailChimpClient.java b/src/main/java/com/mailchimp/MailChimpClient.java index 0427576..35b83ea 100644 --- a/src/main/java/com/mailchimp/MailChimpClient.java +++ b/src/main/java/com/mailchimp/MailChimpClient.java @@ -4,6 +4,7 @@ import com.mailchimp.query.BatchesQuery; import com.mailchimp.query.ListMembersQuery; import com.mailchimp.query.ListsQuery; +import com.mailchimp.query.ReportsQuery; import feign.Param; import feign.QueryMap; import feign.RequestLine; @@ -15,6 +16,7 @@ public interface MailChimpClient { /** * Gets API Root. + * * @return root info about the account */ @RequestLine("GET /3.0/") @@ -22,16 +24,19 @@ public interface MailChimpClient { /** * Gets member by subscriberHash in list. + * * @param listId if of the list * @param subscriberHash hash of member's email (see {@link Member#getSubscriberHash(String)}) * @return member * @throws MailChimpErrorException when listId or subscriberHash was not found */ @RequestLine("GET /3.0/lists/{list-id}/members/{subscriber-hash}") - Member getListMember(@Param("list-id") String listId, @Param("subscriber-hash") String subscriberHash); + Member getListMember(@Param("list-id") String listId, + @Param("subscriber-hash") String subscriberHash); /** * Creates member in list. + * * @param listId id of the list where to create the member in * @param member to create * @return created member @@ -42,6 +47,7 @@ public interface MailChimpClient { /** * Updates member in a list. + * * @param listId id of the list where to create the member in * @param subscriberHash hash of member's email (see {@link Member#getSubscriberHash(String)}) * @param member to update @@ -49,19 +55,23 @@ public interface MailChimpClient { * @throws MailChimpErrorException when the list-id was not found */ @RequestLine("PUT /3.0/lists/{list-id}/members/{subscriber-hash}") - Member updateListMember(@Param("list-id") String listId, @Param("subscriber-hash") String subscriberHash, Member member); + Member updateListMember(@Param("list-id") String listId, + @Param("subscriber-hash") String subscriberHash, Member member); /** * Removes member from list. + * * @param listId id of the list * @param subscriberHash hash of member's email (see {@link Member#getSubscriberHash(String)}) * @throws MailChimpErrorException when listId or subscriberHash was not found */ @RequestLine("DELETE /3.0/lists/{list-id}/members/{subscriber-hash}") - void removeListMember(@Param("list-id") String listId, @Param("subscriber-hash") String subscriberHash); + void removeListMember(@Param("list-id") String listId, + @Param("subscriber-hash") String subscriberHash); /** * Create subscriberList. + * * @param subscriberList to create * @return created subscriberList */ @@ -70,6 +80,7 @@ public interface MailChimpClient { /** * Removes list. + * * @param listId id of the list * @throws MailChimpErrorException when listId was not found */ @@ -78,6 +89,7 @@ public interface MailChimpClient { /** * Gets list. + * * @param listId id of the list * @return found list * @throws MailChimpErrorException when listId was not found @@ -87,6 +99,7 @@ public interface MailChimpClient { /** * Gets lists by query. + * * @param query to filter results on * @return filtered list of lists */ @@ -95,6 +108,7 @@ public interface MailChimpClient { /** * Gets list members. + * * @param listId id of the list * @param query to filter results on * @return filtered members @@ -105,6 +119,7 @@ public interface MailChimpClient { /** * Get list's member-fields. + * * @param listId id of the list * @return list's member-fields * @throws MailChimpErrorException when listId was not found @@ -114,6 +129,7 @@ public interface MailChimpClient { /** * Create merge-field for list. + * * @param listId id of the list * @param mergeField merge-field to create * @return created merge-field for the list @@ -124,6 +140,7 @@ public interface MailChimpClient { /** * Removes merge-field from list. + * * @param listId id of the list * @param mergeId id of merge-field * @throws MailChimpErrorException when listId or mergeId was not found @@ -133,6 +150,7 @@ public interface MailChimpClient { /** * Create segment in list. + * * @param listId id of the list * @param segment segment to create * @return created segment @@ -143,6 +161,7 @@ public interface MailChimpClient { /** * Modify a segment in list. + * * @param listId id of the list * @param segmentId id of segment * @param segment segment to be modified @@ -150,10 +169,12 @@ public interface MailChimpClient { * @throws MailChimpErrorException when listId was not found */ @RequestLine("POST /3.0/lists/{list-id}/segments/{segment-id}") - SegmentModified modifySegment(@Param("list-id") String listId, @Param("segment-id") Integer segmentId, SegmentModify segment); + SegmentModified modifySegment(@Param("list-id") String listId, + @Param("segment-id") Integer segmentId, SegmentModify segment); /** * Get segments in list. + * * @param listId id of the list * @return segments of the list * @throws MailChimpErrorException when listId was not found @@ -163,6 +184,7 @@ public interface MailChimpClient { /** * Get a segment in the list. + * * @param listId id of the list * @param segmentId id of the segment * @return segment by id @@ -173,6 +195,7 @@ public interface MailChimpClient { /** * Removes segment. + * * @param listId id of the list * @param segmentId id of the segment * @throws MailChimpErrorException when listId or segmentId was not found @@ -182,6 +205,7 @@ public interface MailChimpClient { /** * Create batch. + * * @param batch to create * @return created batch */ @@ -190,6 +214,7 @@ public interface MailChimpClient { /** * Get batch. + * * @param batchId id of batch * @return found batch * @throws MailChimpErrorException when batchId was not found @@ -199,6 +224,7 @@ public interface MailChimpClient { /** * Get batches by filter. + * * @param query to filter * @return filtered batches */ @@ -207,6 +233,7 @@ public interface MailChimpClient { /** * Removes batch + * * @param batchId id of batch * @throws MailChimpErrorException when batchId was not found */ @@ -215,6 +242,7 @@ public interface MailChimpClient { /** * Search members by query. + * * @param query to search by * @return found members by query */ @@ -223,6 +251,7 @@ public interface MailChimpClient { /** * Search members by query and listId. + * * @param query to search by * @param listId id of list * @return found members by query and listId @@ -233,9 +262,27 @@ public interface MailChimpClient { /** * + */ + @RequestLine("GET /3.0/reports") + Reports getReports(@QueryMap ReportsQuery query); + + @RequestLine("GET /3.0/reports/{campaign_id}/click-details") + CampaignClickDetails getCampaignClickDetails(@Param("campaign_id") String campaignId); + + @RequestLine("GET /3.0/reports/{campaign_id}/click-details/{link_id}/members") + ClickReportsMembers getClickReportsMembers( + @Param("campaign_id") String campaignId, + @Param("link_id") String linkId + ); + + @RequestLine("GET /3.0/lists/{list_id}/members/{subscriber_hash}/activity") + MemberActivity getMemberActivity(@Param("list_id") String listId, + @Param("subscriber_hash") String subscriberHash); + + /** * @return builder to build the client */ - static MailChimpClientBuilder builder(){ + static MailChimpClientBuilder builder() { return new MailChimpClientBuilder(); } } diff --git a/src/main/java/com/mailchimp/MailChimpClientBuilder.java b/src/main/java/com/mailchimp/MailChimpClientBuilder.java index 1419391..c2b0e89 100644 --- a/src/main/java/com/mailchimp/MailChimpClientBuilder.java +++ b/src/main/java/com/mailchimp/MailChimpClientBuilder.java @@ -19,7 +19,7 @@ public class MailChimpClientBuilder { //feign specific options private Client client = new Client.Default(null, null); private Logger.Level logLevel = Logger.Level.NONE; - private Logger logger = new Logger.NoOpLogger(); + private Logger logger = new Logger.JavaLogger("HttpLogger"); //mailchimp specific options private RequestInterceptor authRequestInterceptor; diff --git a/src/main/java/com/mailchimp/domain/CampaignClickDetails.java b/src/main/java/com/mailchimp/domain/CampaignClickDetails.java new file mode 100644 index 0000000..9bb3ff3 --- /dev/null +++ b/src/main/java/com/mailchimp/domain/CampaignClickDetails.java @@ -0,0 +1,100 @@ +package com.mailchimp.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.mailchimp.domain.ClickReportsMembers.MergeField; +import com.mailchimp.domain.Link.Rel; +import com.mailchimp.jackson.MailChimpZonedDateTimeDeserializer; +import java.time.ZonedDateTime; +import java.util.List; +import lombok.Getter; + +/** + * @author YukiFujisawa + * @see /schema/3.0/Definitions/Reports/Response.jso + */ +@Getter +public class CampaignClickDetails { + + @JsonProperty("urls_clicked") + private List urlsClickeds; + + @JsonProperty("merge_fields") + private MergeField mergeField; + + @JsonProperty("vip") + private Boolean vip; + + @JsonProperty("clicks") + private Integer clicks; + + @JsonProperty("campaign_id") + private String campaignId; + + @JsonProperty("url_id") + private String urlId; + + @JsonProperty("list_id") + private String listId; + + @JsonProperty("list_is_active") + private Boolean listIsActive; + + @JsonProperty("contact_status") + private String contactStatus; + + @JsonProperty("_links") + private List links; + + @JsonIgnore + public Link getCampaign() { + return Link.getLink(links, Rel.CAMPAIGN); + } + + @Getter + public static class UrlsClicked { + + @JsonProperty("id") + private String id; + + @JsonProperty("url") + private String url; + + @JsonProperty("total_clicks") + private Integer totalClicks; + + @JsonProperty("click_percentage") + private Double click_percentage; + + @JsonProperty("unique_clicks") + private Integer uniqueClicks; + + @JsonProperty("unique_click_percentage") + private Double uniqueClickPercentage; + + @JsonProperty("last_click") + @JsonDeserialize(using = MailChimpZonedDateTimeDeserializer.class) + private ZonedDateTime lastClick; + + @JsonProperty("campaign_id") + private String campaignId; + + @JsonProperty("_links") + private List links; + + @JsonIgnore + public Link getMembersLink() { + return Link.getLink(links, Rel.MEMBERS); + } + + @JsonIgnore + public Link getCampaignLink() { + return Link.getLink(links, Rel.CAMPAIGN); + } + } + + + + +} diff --git a/src/main/java/com/mailchimp/domain/ClickReportsMembers.java b/src/main/java/com/mailchimp/domain/ClickReportsMembers.java new file mode 100644 index 0000000..05e61a8 --- /dev/null +++ b/src/main/java/com/mailchimp/domain/ClickReportsMembers.java @@ -0,0 +1,93 @@ +package com.mailchimp.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; +import lombok.Getter; + +@Getter +public class ClickReportsMembers { + + @JsonProperty("members") + private List members; + + @JsonProperty("campaign_id") + private String campaignId; + + @JsonProperty("total_items") + private Integer totalItems; + + @Getter + public static class ClickDetailMember { + + @JsonProperty("email_id") + private String emailId; + + @JsonProperty("email_address") + private String emailAddress; + + @JsonProperty("merge_fields") + private MergeField mergeFields; + + @JsonProperty("list_id") + private String listId; + + } + + @Getter + public static class MergeField { + + @JsonProperty("FNAME") + private String fName; + + @JsonProperty("LNAME") + private String lName; + + @JsonProperty("ADDRESS") + private String address; + + @JsonProperty("PHONE") + private String phone; + + @JsonProperty("BIRTHDAY") + private String birthday; + + @JsonProperty("MMERGE6") + private String mMerge6; + + @JsonProperty("MMERGE7") + private String mMerge7; + + @JsonProperty("MMERGE8") + private String mMerge8; + + @JsonProperty("MMERGE9") + private String mMerge9; + + @JsonProperty("MMERGE10") + private String mMerge10; + + @JsonProperty("MMERGE11") + private String mMerge11; + + @JsonProperty("MMERGE12") + private String mMerge12; + + @JsonProperty("MMERGE13") + private String mMerge13; + + @JsonProperty("MMERGE14") + private String mMerge14; + + @JsonProperty("MMERGE15") + private String mMerge15; + + @JsonProperty("MMERGE16") + private String mMerge16; + + @JsonProperty("MMERGE17") + private String mMerge17; + + @JsonProperty("MMERGE18") + private String mMerge18; + } +} diff --git a/src/main/java/com/mailchimp/domain/Condition.java b/src/main/java/com/mailchimp/domain/Condition.java index a6b7ec5..112d9a0 100644 --- a/src/main/java/com/mailchimp/domain/Condition.java +++ b/src/main/java/com/mailchimp/domain/Condition.java @@ -13,28 +13,4 @@ public class Condition { private String op; @JsonProperty("value") private String value; - - public String getField() { - return field; - } - - public void setField(String field) { - this.field = field; - } - - public String getOp() { - return op; - } - - public void setOp(String op) { - this.op = op; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } } \ No newline at end of file diff --git a/src/main/java/com/mailchimp/domain/ExactMatches.java b/src/main/java/com/mailchimp/domain/ExactMatches.java index 88fe2b8..c23f23e 100644 --- a/src/main/java/com/mailchimp/domain/ExactMatches.java +++ b/src/main/java/com/mailchimp/domain/ExactMatches.java @@ -17,19 +17,4 @@ public class ExactMatches { @JsonProperty("total_items") private Integer totalItems; - public List getMembers() { - return members; - } - - public void setMembers(List members) { - this.members = members; - } - - public Integer getTotalItems() { - return totalItems; - } - - public void setTotalItems(Integer totalItems) { - this.totalItems = totalItems; - } } diff --git a/src/main/java/com/mailchimp/domain/Link.java b/src/main/java/com/mailchimp/domain/Link.java new file mode 100644 index 0000000..34065b2 --- /dev/null +++ b/src/main/java/com/mailchimp/domain/Link.java @@ -0,0 +1,54 @@ +package com.mailchimp.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; +import lombok.Getter; + +@Getter +public class Link { + + @JsonProperty("rel") + private String rel; + + @JsonProperty("href") + private String href; + + @JsonProperty("method") + private String method; + + @JsonProperty("targetSchema") + private String targetSchema; + + @JsonProperty("schema") + private String schema; + + public enum Rel { + PARENT("parent"), + SELF("self"), + MEMBERS("members"), + CLICK_DETAILS("click-details"), + CAMPAIGN("campaign"); + + private String title; + + Rel(String title) { + this.title = title; + } + + public String getTitle() { + return this.title; + } + } + + public static Link getLink(List links, Rel targetLink) { + if (links == null || targetLink == null) { + return null; + } + for (Link link : links) { + if (link.getRel().equals(targetLink.getTitle())) { + return link; + } + } + return null; + } +} diff --git a/src/main/java/com/mailchimp/domain/Member.java b/src/main/java/com/mailchimp/domain/Member.java index dc65031..5484986 100644 --- a/src/main/java/com/mailchimp/domain/Member.java +++ b/src/main/java/com/mailchimp/domain/Member.java @@ -130,10 +130,6 @@ public static class SubscriberStats { @Setter private String emailClient; -// @JsonProperty -// @Getter -// @Setter -// private Location location; /** * When creating a subscriber that already exists this status will be used. */ diff --git a/src/main/java/com/mailchimp/domain/MemberActivity.java b/src/main/java/com/mailchimp/domain/MemberActivity.java new file mode 100644 index 0000000..a1898d9 --- /dev/null +++ b/src/main/java/com/mailchimp/domain/MemberActivity.java @@ -0,0 +1,50 @@ +package com.mailchimp.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.mailchimp.jackson.MailChimpZonedDateTimeDeserializer; +import java.time.ZonedDateTime; +import java.util.List; +import lombok.Getter; + +@Getter +public class MemberActivity { + + @JsonProperty("activity") + private List activities; + + @Getter + public static class Activity { + + @JsonProperty("action") + private Action action; + + @JsonProperty("timestamp") + @JsonDeserialize(using = MailChimpZonedDateTimeDeserializer.class) + private ZonedDateTime timestamp; + + @JsonProperty("url") + private String url; + + @JsonProperty("type") + private String type; + + @JsonProperty("campaign_id") + private String campaignId; + + @JsonProperty("title") + private String title; + + @JsonProperty("parent_campaign") + private String parentCampaign; + + public static enum Action { + sent, + open, + click, + unsub; + } + } +} + + diff --git a/src/main/java/com/mailchimp/domain/Members.java b/src/main/java/com/mailchimp/domain/Members.java index 4f3ae91..ae1f490 100644 --- a/src/main/java/com/mailchimp/domain/Members.java +++ b/src/main/java/com/mailchimp/domain/Members.java @@ -18,28 +18,4 @@ public class Members { @JsonProperty("total_items") private Integer totalItems; - - public List getMembers() { - return members; - } - - public void setMembers(List members) { - this.members = members; - } - - public String getListId() { - return listId; - } - - public void setListId(String listId) { - this.listId = listId; - } - - public Integer getTotalItems() { - return totalItems; - } - - public void setTotalItems(Integer totalItems) { - this.totalItems = totalItems; - } } diff --git a/src/main/java/com/mailchimp/domain/Report.java b/src/main/java/com/mailchimp/domain/Report.java new file mode 100644 index 0000000..0af0e0e --- /dev/null +++ b/src/main/java/com/mailchimp/domain/Report.java @@ -0,0 +1,210 @@ +package com.mailchimp.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.mailchimp.domain.Link.Rel; +import com.mailchimp.jackson.MailChimpZonedDateTimeDeserializer; +import java.time.ZonedDateTime; +import java.util.List; +import lombok.Getter; + +/** + * @author YukiFujisawa + * @see /schema/3.0/Definitions/Reports/Response.json + */ +@Getter +@JsonIgnoreProperties(ignoreUnknown = true) //TODO: need implementation. +public class Report { + + @JsonProperty("id") + private String id; + + @JsonProperty("campaign_title") + private String campaignTitle; + + @JsonProperty("type") + private String type; + + @JsonProperty("list_id") + private String listId; + + @JsonProperty("list_is_active") + private boolean listIsActive; + + @JsonProperty("list_name") + private String listName; + + @JsonProperty("subject_line") + private String subjectLine; + + @JsonProperty("preview_text") + private String previewText; + + @JsonProperty("emails_sent") + private Integer emailsSent; + + @JsonProperty("abuse_reports") + private Integer abuseReports; + + @JsonProperty("unsubscribed") + private Integer unsubscribed; + + @JsonProperty("send_time") + private String sendTime; + + @JsonDeserialize(using = MailChimpZonedDateTimeDeserializer.class) + @JsonProperty("rss_last_send") + private ZonedDateTime rssLastSend; + + @JsonProperty("bounces") + private Bounces bounces; + + @JsonProperty("forwards") + private Forward forward; + + @JsonProperty("opens") + private Open open; + + @JsonProperty("clicks") + private Click click; + + @JsonProperty("facebook_likes") + private FacebookLike facebookLike; + + @JsonProperty("industry_stats") + private IndustryStats industryStats; + + @JsonProperty("list_stats") + private ListStats listStats; + + @JsonProperty("_links") + private List links; + + @JsonIgnore + public Link getClickDetailsLink() { + return Link.getLink(links, Rel.CLICK_DETAILS); + } + + @JsonIgnore + public Link getCampaign() { + return Link.getLink(links, Rel.CAMPAIGN); + } + + /** + * @author YukiFujisawa + */ + @Getter + public static class Bounces { + + @JsonProperty("hard_bounces") + private Integer hardBounces; + + @JsonProperty("soft_bounces") + private Integer softBounces; + + @JsonProperty("syntax_errors") + private Integer syntaxErrors; + } + + @Getter + public static class Forward { + + @JsonProperty("forwards_count") + private Integer forwardsCount; + + @JsonProperty("forwards_opens") + private Integer forwardsOpens; + } + + @Getter + public static class FacebookLike { + + @JsonProperty("recipient_likes") + private Integer recipientLikes; + + @JsonProperty("unique_likes") + private Integer uniqueLikes; + + @JsonProperty("facebook_likes") + private Integer facebookLikes; + } + + @Getter + public static class Open { + + @JsonProperty("opens_total") + private Integer opensTotal; + + @JsonProperty("unique_opens") + private Integer uniqueOpens; + + @JsonProperty("open_rate") + private Double openRate; + + @JsonDeserialize(using = MailChimpZonedDateTimeDeserializer.class) + @JsonProperty("last_open") + private ZonedDateTime lastOpen; + } + + @Getter + public static class IndustryStats { + + @JsonProperty("type") + private String type; + + @JsonProperty("open_rate") + private Double openRate; + + @JsonProperty("click_rate") + private Double clickRate; + + @JsonProperty("bounce_rate") + private Double bounceRate; + + @JsonProperty("unopen_rate") + private Double unopenRate; + + @JsonProperty("unsub_rate") + private Double unsubRate; + + @JsonProperty("abuse_rate") + private Double abuseRate; + } + + @Getter + public static class ListStats { + + @JsonProperty("sub_rate") + private Double subRate; + + @JsonProperty("unsub_rate") + private Double unsubRate; + + @JsonProperty("open_rate") + private Double openRate; + + @JsonProperty("click_rate") + private Double clickRate; + } + + @Getter + public static class Click { + + @JsonProperty("clicks_total") + private Integer clicksTotal; + + @JsonProperty("unique_clicks") + private Integer uniqueClicks; + + @JsonProperty("unique_subscriber_clicks") + private Integer uniqueSubscriberClicks; + + @JsonProperty("click_rate") + private Double clickRate; + + @JsonProperty("last_click") + private String lastClick; + } +} diff --git a/src/main/java/com/mailchimp/domain/Reports.java b/src/main/java/com/mailchimp/domain/Reports.java new file mode 100644 index 0000000..85a634e --- /dev/null +++ b/src/main/java/com/mailchimp/domain/Reports.java @@ -0,0 +1,17 @@ +package com.mailchimp.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; +import lombok.Getter; + +/** + * @author YukiFujisawa + * @see /schema/3.0/Definitions/Reports/Response.json + */ +@Getter +public class Reports { + + @JsonProperty("reports") + private List reports; + +} diff --git a/src/main/java/com/mailchimp/domain/Root.java b/src/main/java/com/mailchimp/domain/Root.java index 177f4dc..80dc868 100644 --- a/src/main/java/com/mailchimp/domain/Root.java +++ b/src/main/java/com/mailchimp/domain/Root.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.mailchimp.domain.Report.IndustryStats; import com.mailchimp.jackson.MailChimpZonedDateTimeDeserializer; import java.time.ZonedDateTime; import lombok.Getter; @@ -15,33 +16,6 @@ */ public class Root { - /** - * The average campaign statistics for all campaigns in the account’s specified industry. - */ - public static class IndustryStats { - - /** - * The average unique open rate for all campaigns in the account’s specified industry. - */ - @JsonProperty("open_rate") - @Getter - private double openRate; - - /** - * The average bounce rate for all campaigns in the account’s specified industry. - */ - @JsonProperty("bounce_rate") - @Getter - private double bounceRate; - - /** - * The average unique click rate for all campaigns in the account’s specified industry. - */ - @JsonProperty("click_rate") - @Getter - private double clickRate; - } - /** * The MailChimp account id, used for features like list subscribe forms. */ diff --git a/src/main/java/com/mailchimp/query/ReportsQuery.java b/src/main/java/com/mailchimp/query/ReportsQuery.java new file mode 100644 index 0000000..8f7422f --- /dev/null +++ b/src/main/java/com/mailchimp/query/ReportsQuery.java @@ -0,0 +1,26 @@ +package com.mailchimp.query; + +import java.time.ZonedDateTime; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * @see https://mailchimp.com/developer/reference/reports/#get_/reports + */ +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +public class ReportsQuery { + + @Getter + private Integer count; + + @Getter + private Integer offset; + + @Getter + private ZonedDateTime since_send_time; +} From a3aef08119988b620b89e2ea142d9069483d5ad6 Mon Sep 17 00:00:00 2001 From: YukiFujisawa Date: Thu, 3 Oct 2019 16:55:02 +0900 Subject: [PATCH 7/7] Update gradle-5.6.2 --- gradle/wrapper/gradle-wrapper.properties | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 gradle/wrapper/gradle-wrapper.properties diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..31e94e3 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Tue Sep 24 13:01:32 JST 2019 +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME