Spaces:
Running
Running
Merged in release/dev (pull request #20)
Browse files- src/main/java/com/artandscience/webbff/webbff/api/model/response/GetHomepageResponse.java +4 -0
- src/main/java/com/artandscience/webbff/webbff/common/base/model/RequestHeader.java +3 -0
- src/main/java/com/artandscience/webbff/webbff/common/base/response/MessageBox.java +1 -0
- src/main/java/com/artandscience/webbff/webbff/common/base/response/enums/MessageBoxActionUiStyle.java +3 -1
- src/main/java/com/artandscience/webbff/webbff/common/base/response/enums/MessageType.java +1 -1
- src/main/java/com/artandscience/webbff/webbff/common/constants/HeaderConstant.java +3 -1
- src/main/java/com/artandscience/webbff/webbff/common/constants/MessageBoxActionUiConstants.java +2 -0
- src/main/java/com/artandscience/webbff/webbff/common/constants/MessageTypeConstants.java +1 -0
- src/main/java/com/artandscience/webbff/webbff/common/helper/DateUtil.java +31 -0
- src/main/java/com/artandscience/webbff/webbff/common/helper/RequestScopeHelper.java +33 -0
- src/main/java/com/artandscience/webbff/webbff/common/interceptor/TransactionFilter.java +6 -0
- src/main/java/com/artandscience/webbff/webbff/common/service/impl/MessageBoxServiceImpl.java +2 -0
- src/main/java/com/artandscience/webbff/webbff/dao/entity/ErrorMessageBox.java +4 -1
- src/main/java/com/artandscience/webbff/webbff/dao/entity/ErrorMessageBoxAction.java +2 -0
- src/main/java/com/artandscience/webbff/webbff/dao/entity/LoginCampaignRule.java +35 -0
- src/main/java/com/artandscience/webbff/webbff/dao/repository/LoginCampaignRuleRepository.java +18 -0
- src/main/java/com/artandscience/webbff/webbff/domain/assembler/CampaignMessageBoxesAssembler.java +69 -0
- src/main/java/com/artandscience/webbff/webbff/domain/assembler/LeftHeroAssembler.java +33 -7
- src/main/java/com/artandscience/webbff/webbff/domain/assembler/SpotlightAssembler.java +31 -10
- src/main/java/com/artandscience/webbff/webbff/domain/helper/SpotlightHelper.java +29 -0
- src/main/java/com/artandscience/webbff/webbff/domain/model/CampaignRuleDto.java +17 -0
- src/main/java/com/artandscience/webbff/webbff/domain/model/RuleDto.java +18 -0
- src/main/java/com/artandscience/webbff/webbff/domain/model/contentModel/SpotlightModel.java +2 -1
- src/main/java/com/artandscience/webbff/webbff/domain/model/heroModel/LeftHeroModel.java +2 -1
- src/main/java/com/artandscience/webbff/webbff/domain/model/heroModel/TitleModel.java +2 -1
- src/main/java/com/artandscience/webbff/webbff/domain/model/output/GetHomepageOutput.java +5 -0
- src/main/java/com/artandscience/webbff/webbff/domain/model/state/LeftHeroState.java +16 -0
- src/main/java/com/artandscience/webbff/webbff/domain/model/state/SpotlightState.java +18 -0
- src/main/java/com/artandscience/webbff/webbff/domain/service/LoginCampaignService.java +11 -0
- src/main/java/com/artandscience/webbff/webbff/domain/service/impl/HomepageServiceImpl.java +3 -0
- src/main/java/com/artandscience/webbff/webbff/domain/service/impl/LoginCampaignServiceImpl.java +43 -0
- src/main/java/com/artandscience/webbff/webbff/integration/interceptor/FeignClientInterceptor.java +0 -5
- src/main/resources/application.yml +1 -1
src/main/java/com/artandscience/webbff/webbff/api/model/response/GetHomepageResponse.java
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
package com.artandscience.webbff.webbff.api.model.response;
|
| 2 |
|
|
|
|
| 3 |
import com.artandscience.webbff.webbff.domain.model.contentModel.ContentModel;
|
| 4 |
import com.artandscience.webbff.webbff.domain.model.heroModel.HeroModel;
|
| 5 |
import lombok.AllArgsConstructor;
|
|
@@ -7,6 +8,8 @@ import lombok.Builder;
|
|
| 7 |
import lombok.Data;
|
| 8 |
import lombok.NoArgsConstructor;
|
| 9 |
|
|
|
|
|
|
|
| 10 |
@Data
|
| 11 |
@Builder
|
| 12 |
@AllArgsConstructor
|
|
@@ -14,4 +17,5 @@ import lombok.NoArgsConstructor;
|
|
| 14 |
public class GetHomepageResponse {
|
| 15 |
private HeroModel heroBanner;
|
| 16 |
private ContentModel contentModel;
|
|
|
|
| 17 |
}
|
|
|
|
| 1 |
package com.artandscience.webbff.webbff.api.model.response;
|
| 2 |
|
| 3 |
+
import com.artandscience.webbff.webbff.common.base.response.MessageBox;
|
| 4 |
import com.artandscience.webbff.webbff.domain.model.contentModel.ContentModel;
|
| 5 |
import com.artandscience.webbff.webbff.domain.model.heroModel.HeroModel;
|
| 6 |
import lombok.AllArgsConstructor;
|
|
|
|
| 8 |
import lombok.Data;
|
| 9 |
import lombok.NoArgsConstructor;
|
| 10 |
|
| 11 |
+
import java.util.List;
|
| 12 |
+
|
| 13 |
@Data
|
| 14 |
@Builder
|
| 15 |
@AllArgsConstructor
|
|
|
|
| 17 |
public class GetHomepageResponse {
|
| 18 |
private HeroModel heroBanner;
|
| 19 |
private ContentModel contentModel;
|
| 20 |
+
private List<MessageBox> campaignMessageBoxes;
|
| 21 |
}
|
src/main/java/com/artandscience/webbff/webbff/common/base/model/RequestHeader.java
CHANGED
|
@@ -20,5 +20,8 @@ public class RequestHeader {
|
|
| 20 |
private String customerNumber;
|
| 21 |
private String requestFlowId;
|
| 22 |
private String deviceAppId;
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
}
|
|
|
|
| 20 |
private String customerNumber;
|
| 21 |
private String requestFlowId;
|
| 22 |
private String deviceAppId;
|
| 23 |
+
private String birthday;
|
| 24 |
+
private String isFirstLogin;
|
| 25 |
+
private String isOnline;
|
| 26 |
|
| 27 |
}
|
src/main/java/com/artandscience/webbff/webbff/common/base/response/MessageBox.java
CHANGED
|
@@ -21,6 +21,7 @@ public class MessageBox implements Serializable {
|
|
| 21 |
private MessageType messageType;
|
| 22 |
private String message;
|
| 23 |
private String messageCode;
|
|
|
|
| 24 |
private List<MessageBoxAction> messageBoxAction;
|
| 25 |
|
| 26 |
}
|
|
|
|
| 21 |
private MessageType messageType;
|
| 22 |
private String message;
|
| 23 |
private String messageCode;
|
| 24 |
+
private String imageUrl;
|
| 25 |
private List<MessageBoxAction> messageBoxAction;
|
| 26 |
|
| 27 |
}
|
src/main/java/com/artandscience/webbff/webbff/common/base/response/enums/MessageBoxActionUiStyle.java
CHANGED
|
@@ -5,6 +5,8 @@ import java.io.Serializable;
|
|
| 5 |
public enum MessageBoxActionUiStyle implements Serializable {
|
| 6 |
|
| 7 |
BUTTON,
|
| 8 |
-
TEXT
|
|
|
|
|
|
|
| 9 |
|
| 10 |
}
|
|
|
|
| 5 |
public enum MessageBoxActionUiStyle implements Serializable {
|
| 6 |
|
| 7 |
BUTTON,
|
| 8 |
+
TEXT,
|
| 9 |
+
PRIMARY,
|
| 10 |
+
SECONDARY
|
| 11 |
|
| 12 |
}
|
src/main/java/com/artandscience/webbff/webbff/common/base/response/enums/MessageType.java
CHANGED
|
@@ -3,5 +3,5 @@ package com.artandscience.webbff.webbff.common.base.response.enums;
|
|
| 3 |
import java.io.Serializable;
|
| 4 |
|
| 5 |
public enum MessageType implements Serializable {
|
| 6 |
-
INFORMATION,WARNING,ERROR,NONE
|
| 7 |
}
|
|
|
|
| 3 |
import java.io.Serializable;
|
| 4 |
|
| 5 |
public enum MessageType implements Serializable {
|
| 6 |
+
INFORMATION,WARNING,ERROR,POPUP,NONE
|
| 7 |
}
|
src/main/java/com/artandscience/webbff/webbff/common/constants/HeaderConstant.java
CHANGED
|
@@ -12,6 +12,8 @@ public class HeaderConstant {
|
|
| 12 |
public static String HEADER_CUSTOMER_NUMBER = "x-customer-number";
|
| 13 |
public static String HEADER_DEVICE_APP_ID = "x-device-app-id";
|
| 14 |
public static String HEADER_REQUEST_FLOW_ID = "x-request-flow-id";
|
| 15 |
-
|
|
|
|
|
|
|
| 16 |
|
| 17 |
}
|
|
|
|
| 12 |
public static String HEADER_CUSTOMER_NUMBER = "x-customer-number";
|
| 13 |
public static String HEADER_DEVICE_APP_ID = "x-device-app-id";
|
| 14 |
public static String HEADER_REQUEST_FLOW_ID = "x-request-flow-id";
|
| 15 |
+
public static String HEADER_BIRTHDATE = "x-customer-birthdate";
|
| 16 |
+
public static String HEADER_FIRST_LOGIN = "x-customer-first-login";
|
| 17 |
+
public static String HEADER_IS_ONLINE = "x-customer-is-online";
|
| 18 |
|
| 19 |
}
|
src/main/java/com/artandscience/webbff/webbff/common/constants/MessageBoxActionUiConstants.java
CHANGED
|
@@ -7,6 +7,8 @@ public class MessageBoxActionUiConstants {
|
|
| 7 |
|
| 8 |
public static final String BUTTON = "B";
|
| 9 |
public static final String TEXT = "T";
|
|
|
|
|
|
|
| 10 |
|
| 11 |
private MessageBoxActionUiConstants() {
|
| 12 |
log.error("MessageBoxActionUiConstants case create instance");
|
|
|
|
| 7 |
|
| 8 |
public static final String BUTTON = "B";
|
| 9 |
public static final String TEXT = "T";
|
| 10 |
+
public static final String PRIMARY = "P";
|
| 11 |
+
public static final String SECONDARY = "S";
|
| 12 |
|
| 13 |
private MessageBoxActionUiConstants() {
|
| 14 |
log.error("MessageBoxActionUiConstants case create instance");
|
src/main/java/com/artandscience/webbff/webbff/common/constants/MessageTypeConstants.java
CHANGED
|
@@ -5,5 +5,6 @@ public abstract class MessageTypeConstants {
|
|
| 5 |
public static final String INFORMATION = "I";
|
| 6 |
public static final String WARNING = "W";
|
| 7 |
public static final String ERROR = "E";
|
|
|
|
| 8 |
|
| 9 |
}
|
|
|
|
| 5 |
public static final String INFORMATION = "I";
|
| 6 |
public static final String WARNING = "W";
|
| 7 |
public static final String ERROR = "E";
|
| 8 |
+
public static final String POPUP = "P";
|
| 9 |
|
| 10 |
}
|
src/main/java/com/artandscience/webbff/webbff/common/helper/DateUtil.java
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.common.helper;
|
| 2 |
+
|
| 3 |
+
import java.time.LocalDate;
|
| 4 |
+
import java.time.MonthDay;
|
| 5 |
+
import java.time.format.DateTimeFormatter;
|
| 6 |
+
|
| 7 |
+
public abstract class DateUtil {
|
| 8 |
+
|
| 9 |
+
private static final DateTimeFormatter FORMATTER = DateTimeFormatter
|
| 10 |
+
.ofPattern("dd.MM.yyyy");
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
public static LocalDate stringToLocalDate(String date) {
|
| 14 |
+
if (date == null || date.isBlank()) {
|
| 15 |
+
return null;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
return LocalDate.parse(date, FORMATTER);
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
public static boolean isTodayByDayAndMonth(String dateText) {
|
| 22 |
+
if (dateText == null || dateText.isBlank()) {
|
| 23 |
+
return false;
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
LocalDate date = LocalDate.parse(dateText, FORMATTER);
|
| 27 |
+
|
| 28 |
+
return MonthDay.from(date).equals(MonthDay.from(LocalDate.now()));
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/common/helper/RequestScopeHelper.java
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.common.helper;
|
| 2 |
+
|
| 3 |
+
import com.artandscience.webbff.webbff.common.base.model.RequestHeader;
|
| 4 |
+
import com.artandscience.webbff.webbff.common.scope.RequestHeaderScope;
|
| 5 |
+
import lombok.AllArgsConstructor;
|
| 6 |
+
import org.springframework.stereotype.Component;
|
| 7 |
+
|
| 8 |
+
import java.util.Optional;
|
| 9 |
+
|
| 10 |
+
@Component
|
| 11 |
+
@AllArgsConstructor
|
| 12 |
+
public class RequestScopeHelper {
|
| 13 |
+
|
| 14 |
+
public static String getCustomerNumber(RequestHeaderScope requestHeaderScope) {
|
| 15 |
+
RequestHeader requestHeader = requestHeaderScope.getRequestHeader();
|
| 16 |
+
return Optional.ofNullable(requestHeader.getCustomerNumber()).orElse("");
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
public static String getIsFirstLogin(RequestHeaderScope requestHeaderScope) {
|
| 20 |
+
RequestHeader requestHeader = requestHeaderScope.getRequestHeader();
|
| 21 |
+
return Optional.ofNullable(requestHeader.getIsFirstLogin()).orElse("0");
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
public static String getBirthday(RequestHeaderScope requestHeaderScope) {
|
| 25 |
+
RequestHeader requestHeader = requestHeaderScope.getRequestHeader();
|
| 26 |
+
return Optional.ofNullable(requestHeader.getBirthday()).orElse("");
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
public static String getIsOnline(RequestHeaderScope requestHeaderScope) {
|
| 30 |
+
RequestHeader requestHeader = requestHeaderScope.getRequestHeader();
|
| 31 |
+
return Optional.ofNullable(requestHeader.getIsOnline()).orElse("0");
|
| 32 |
+
}
|
| 33 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/common/interceptor/TransactionFilter.java
CHANGED
|
@@ -25,6 +25,9 @@ import static com.artandscience.webbff.webbff.common.constants.HeaderConstant.HE
|
|
| 25 |
import static com.artandscience.webbff.webbff.common.constants.HeaderConstant.HEADER_CUSTOMER_NUMBER;
|
| 26 |
import static com.artandscience.webbff.webbff.common.constants.HeaderConstant.HEADER_REQUEST_FLOW_ID;
|
| 27 |
import static com.artandscience.webbff.webbff.common.constants.HeaderConstant.HEADER_DEVICE_APP_ID;
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
|
| 30 |
|
|
@@ -66,6 +69,9 @@ public class TransactionFilter extends OncePerRequestFilter {
|
|
| 66 |
.customerNumber(request.getHeader(HEADER_CUSTOMER_NUMBER))
|
| 67 |
.requestFlowId(request.getHeader(HEADER_REQUEST_FLOW_ID))
|
| 68 |
.deviceAppId(request.getHeader(HEADER_DEVICE_APP_ID))
|
|
|
|
|
|
|
|
|
|
| 69 |
.build();
|
| 70 |
}
|
| 71 |
|
|
|
|
| 25 |
import static com.artandscience.webbff.webbff.common.constants.HeaderConstant.HEADER_CUSTOMER_NUMBER;
|
| 26 |
import static com.artandscience.webbff.webbff.common.constants.HeaderConstant.HEADER_REQUEST_FLOW_ID;
|
| 27 |
import static com.artandscience.webbff.webbff.common.constants.HeaderConstant.HEADER_DEVICE_APP_ID;
|
| 28 |
+
import static com.artandscience.webbff.webbff.common.constants.HeaderConstant.HEADER_BIRTHDATE;
|
| 29 |
+
import static com.artandscience.webbff.webbff.common.constants.HeaderConstant.HEADER_FIRST_LOGIN;
|
| 30 |
+
import static com.artandscience.webbff.webbff.common.constants.HeaderConstant.HEADER_IS_ONLINE;
|
| 31 |
|
| 32 |
|
| 33 |
|
|
|
|
| 69 |
.customerNumber(request.getHeader(HEADER_CUSTOMER_NUMBER))
|
| 70 |
.requestFlowId(request.getHeader(HEADER_REQUEST_FLOW_ID))
|
| 71 |
.deviceAppId(request.getHeader(HEADER_DEVICE_APP_ID))
|
| 72 |
+
.birthday(request.getHeader(HEADER_BIRTHDATE))
|
| 73 |
+
.isFirstLogin(request.getHeader(HEADER_FIRST_LOGIN))
|
| 74 |
+
.isOnline(request.getHeader(HEADER_IS_ONLINE))
|
| 75 |
.build();
|
| 76 |
}
|
| 77 |
|
src/main/java/com/artandscience/webbff/webbff/common/service/impl/MessageBoxServiceImpl.java
CHANGED
|
@@ -41,6 +41,7 @@ public class MessageBoxServiceImpl implements MessageBoxService {
|
|
| 41 |
.messageType(getMessageType(errorMessageBox.getMessageType()))
|
| 42 |
.message(errorMessageBox.getMessage())
|
| 43 |
.title(errorMessageBox.getTitle())
|
|
|
|
| 44 |
.messageBoxAction(errorMessageBox.getErrorMessageBoxActions().stream()
|
| 45 |
.map(ErrorMessageBoxAction::toMessageBoxAction)
|
| 46 |
.sorted(Comparator.comparing(MessageBoxAction::getOrderNo)).toList())
|
|
@@ -85,6 +86,7 @@ public class MessageBoxServiceImpl implements MessageBoxService {
|
|
| 85 |
case (MessageTypeConstants.WARNING) -> MessageType.WARNING;
|
| 86 |
case (MessageTypeConstants.ERROR) -> MessageType.ERROR;
|
| 87 |
case (MessageTypeConstants.INFORMATION) -> MessageType.INFORMATION;
|
|
|
|
| 88 |
default -> MessageType.NONE;
|
| 89 |
};
|
| 90 |
}
|
|
|
|
| 41 |
.messageType(getMessageType(errorMessageBox.getMessageType()))
|
| 42 |
.message(errorMessageBox.getMessage())
|
| 43 |
.title(errorMessageBox.getTitle())
|
| 44 |
+
.imageUrl(errorMessageBox.getImageUrl())
|
| 45 |
.messageBoxAction(errorMessageBox.getErrorMessageBoxActions().stream()
|
| 46 |
.map(ErrorMessageBoxAction::toMessageBoxAction)
|
| 47 |
.sorted(Comparator.comparing(MessageBoxAction::getOrderNo)).toList())
|
|
|
|
| 86 |
case (MessageTypeConstants.WARNING) -> MessageType.WARNING;
|
| 87 |
case (MessageTypeConstants.ERROR) -> MessageType.ERROR;
|
| 88 |
case (MessageTypeConstants.INFORMATION) -> MessageType.INFORMATION;
|
| 89 |
+
case (MessageTypeConstants.POPUP) -> MessageType.POPUP;
|
| 90 |
default -> MessageType.NONE;
|
| 91 |
};
|
| 92 |
}
|
src/main/java/com/artandscience/webbff/webbff/dao/entity/ErrorMessageBox.java
CHANGED
|
@@ -30,6 +30,9 @@ public class ErrorMessageBox {
|
|
| 30 |
@Column(name = "message_code")
|
| 31 |
private String messageCode;
|
| 32 |
|
|
|
|
|
|
|
|
|
|
| 33 |
@OneToMany(
|
| 34 |
cascade = CascadeType.ALL, // <-- çocukları da persist/merge et
|
| 35 |
orphanRemoval = true, // <-- listeden çıkarılan çocuk için join kaydını siler
|
|
@@ -37,7 +40,7 @@ public class ErrorMessageBox {
|
|
| 37 |
)
|
| 38 |
@JoinTable(
|
| 39 |
name = "error_message_box_error_message_box_actions",
|
| 40 |
-
schema = "
|
| 41 |
joinColumns = @JoinColumn(
|
| 42 |
name = "error_message_box_key", // join tablodaki FK kolonu
|
| 43 |
referencedColumnName = "\"key\"" // ebeveyn PK kolonu (quoted!)
|
|
|
|
| 30 |
@Column(name = "message_code")
|
| 31 |
private String messageCode;
|
| 32 |
|
| 33 |
+
@Column(name = "image_url")
|
| 34 |
+
private String imageUrl;
|
| 35 |
+
|
| 36 |
@OneToMany(
|
| 37 |
cascade = CascadeType.ALL, // <-- çocukları da persist/merge et
|
| 38 |
orphanRemoval = true, // <-- listeden çıkarılan çocuk için join kaydını siler
|
|
|
|
| 40 |
)
|
| 41 |
@JoinTable(
|
| 42 |
name = "error_message_box_error_message_box_actions",
|
| 43 |
+
schema = "artandscience",
|
| 44 |
joinColumns = @JoinColumn(
|
| 45 |
name = "error_message_box_key", // join tablodaki FK kolonu
|
| 46 |
referencedColumnName = "\"key\"" // ebeveyn PK kolonu (quoted!)
|
src/main/java/com/artandscience/webbff/webbff/dao/entity/ErrorMessageBoxAction.java
CHANGED
|
@@ -62,6 +62,8 @@ public class ErrorMessageBoxAction {
|
|
| 62 |
return switch (messageBoxUiStyle) {
|
| 63 |
case (MessageBoxActionUiConstants.BUTTON) -> MessageBoxActionUiStyle.BUTTON;
|
| 64 |
case (MessageBoxActionUiConstants.TEXT) -> MessageBoxActionUiStyle.TEXT;
|
|
|
|
|
|
|
| 65 |
default -> MessageBoxActionUiStyle.BUTTON;
|
| 66 |
};
|
| 67 |
}
|
|
|
|
| 62 |
return switch (messageBoxUiStyle) {
|
| 63 |
case (MessageBoxActionUiConstants.BUTTON) -> MessageBoxActionUiStyle.BUTTON;
|
| 64 |
case (MessageBoxActionUiConstants.TEXT) -> MessageBoxActionUiStyle.TEXT;
|
| 65 |
+
case (MessageBoxActionUiConstants.PRIMARY) -> MessageBoxActionUiStyle.PRIMARY;
|
| 66 |
+
case (MessageBoxActionUiConstants.SECONDARY) -> MessageBoxActionUiStyle.SECONDARY;
|
| 67 |
default -> MessageBoxActionUiStyle.BUTTON;
|
| 68 |
};
|
| 69 |
}
|
src/main/java/com/artandscience/webbff/webbff/dao/entity/LoginCampaignRule.java
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.dao.entity;
|
| 2 |
+
|
| 3 |
+
import jakarta.persistence.*;
|
| 4 |
+
import lombok.AllArgsConstructor;
|
| 5 |
+
import lombok.Data;
|
| 6 |
+
import lombok.NoArgsConstructor;
|
| 7 |
+
import org.hibernate.annotations.GenericGenerator;
|
| 8 |
+
|
| 9 |
+
import java.time.LocalDate;
|
| 10 |
+
|
| 11 |
+
@AllArgsConstructor
|
| 12 |
+
@NoArgsConstructor
|
| 13 |
+
@Data
|
| 14 |
+
@Entity
|
| 15 |
+
@Table(name = "login_campaign_rule", schema = "artandscience")
|
| 16 |
+
public class LoginCampaignRule {
|
| 17 |
+
|
| 18 |
+
@Id
|
| 19 |
+
@GeneratedValue(generator = "UUID")
|
| 20 |
+
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
|
| 21 |
+
private String uid;
|
| 22 |
+
|
| 23 |
+
@Column(name = "campaign_key")
|
| 24 |
+
private String campaignKey;
|
| 25 |
+
|
| 26 |
+
@Column(name = "start_date")
|
| 27 |
+
private LocalDate startDate;
|
| 28 |
+
|
| 29 |
+
@Column(name = "end_date")
|
| 30 |
+
private LocalDate endDate;
|
| 31 |
+
|
| 32 |
+
@Column(name = "rule")
|
| 33 |
+
private String rule;
|
| 34 |
+
|
| 35 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/dao/repository/LoginCampaignRuleRepository.java
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.dao.repository;
|
| 2 |
+
|
| 3 |
+
import com.artandscience.webbff.webbff.dao.entity.LoginCampaignRule;
|
| 4 |
+
import org.springframework.data.jpa.repository.JpaRepository;
|
| 5 |
+
import org.springframework.data.jpa.repository.Query;
|
| 6 |
+
import org.springframework.data.repository.query.Param;
|
| 7 |
+
import org.springframework.stereotype.Repository;
|
| 8 |
+
|
| 9 |
+
import java.time.LocalDate;
|
| 10 |
+
import java.util.List;
|
| 11 |
+
|
| 12 |
+
@Repository
|
| 13 |
+
public interface LoginCampaignRuleRepository extends JpaRepository<LoginCampaignRule,String> {
|
| 14 |
+
|
| 15 |
+
@Query("select r from LoginCampaignRule r where :now between r.startDate and r.endDate")
|
| 16 |
+
List<LoginCampaignRule> getLoginCampaignRule(@Param("now") LocalDate now);
|
| 17 |
+
|
| 18 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/domain/assembler/CampaignMessageBoxesAssembler.java
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.domain.assembler;
|
| 2 |
+
|
| 3 |
+
import com.artandscience.webbff.webbff.common.base.model.MessageModel;
|
| 4 |
+
import com.artandscience.webbff.webbff.common.base.response.MessageBox;
|
| 5 |
+
import com.artandscience.webbff.webbff.common.helper.DateUtil;
|
| 6 |
+
import com.artandscience.webbff.webbff.common.helper.RequestScopeHelper;
|
| 7 |
+
import com.artandscience.webbff.webbff.common.scope.RequestHeaderScope;
|
| 8 |
+
import com.artandscience.webbff.webbff.common.service.ExternalAttributeService;
|
| 9 |
+
import com.artandscience.webbff.webbff.domain.service.LoginCampaignService;
|
| 10 |
+
import lombok.RequiredArgsConstructor;
|
| 11 |
+
import lombok.extern.slf4j.Slf4j;
|
| 12 |
+
import org.springframework.stereotype.Component;
|
| 13 |
+
|
| 14 |
+
import java.util.ArrayList;
|
| 15 |
+
import java.util.List;
|
| 16 |
+
import java.util.Objects;
|
| 17 |
+
|
| 18 |
+
@Component
|
| 19 |
+
@RequiredArgsConstructor
|
| 20 |
+
@Slf4j
|
| 21 |
+
public class CampaignMessageBoxesAssembler {
|
| 22 |
+
|
| 23 |
+
private final ExternalAttributeService externalAttributeService;
|
| 24 |
+
private final LoginCampaignService loginCampaignService;
|
| 25 |
+
private final RequestHeaderScope requestHeaderScope;
|
| 26 |
+
|
| 27 |
+
public List<MessageBox> assemble() {
|
| 28 |
+
List<MessageBox> campaignMessageBoxes = new ArrayList<>();
|
| 29 |
+
if (RequestScopeHelper.getIsOnline(requestHeaderScope).equals("1")) {
|
| 30 |
+
loginCampaignService.getCampaignRules().forEach(campaignRuleDto -> {
|
| 31 |
+
if (campaignRuleDto.getRuleDto().getIsBirthday()) {
|
| 32 |
+
var birthdayCampaign = getBirthdayCampaignMessage(campaignRuleDto.getCampaignKey());
|
| 33 |
+
if (!Objects.isNull(birthdayCampaign))
|
| 34 |
+
campaignMessageBoxes.add(birthdayCampaign);
|
| 35 |
+
} else if (campaignRuleDto.getRuleDto().getFirstLogin()) {
|
| 36 |
+
var firstLoginCampaign = getFirstLoginCampaignMessage(campaignRuleDto.getCampaignKey());
|
| 37 |
+
if (!Objects.isNull(firstLoginCampaign))
|
| 38 |
+
campaignMessageBoxes.add(firstLoginCampaign);
|
| 39 |
+
} else {
|
| 40 |
+
var otherCampaign = getCampaignMessageBox(campaignRuleDto.getCampaignKey());
|
| 41 |
+
if (!Objects.isNull(otherCampaign))
|
| 42 |
+
campaignMessageBoxes.add(otherCampaign);
|
| 43 |
+
}
|
| 44 |
+
});
|
| 45 |
+
}
|
| 46 |
+
return campaignMessageBoxes;
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
private MessageBox getBirthdayCampaignMessage(String campaignKey) {
|
| 50 |
+
if (DateUtil.isTodayByDayAndMonth(RequestScopeHelper.getBirthday(requestHeaderScope))) {
|
| 51 |
+
return getCampaignMessageBox(campaignKey);
|
| 52 |
+
}
|
| 53 |
+
return null;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
private MessageBox getFirstLoginCampaignMessage(String campaignKey) {
|
| 57 |
+
if (RequestScopeHelper.getIsFirstLogin(requestHeaderScope).equals("1")) {
|
| 58 |
+
getCampaignMessageBox(campaignKey);
|
| 59 |
+
}
|
| 60 |
+
return null;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
private MessageBox getCampaignMessageBox(String campaignKey) {
|
| 64 |
+
return externalAttributeService.getMessageBox(MessageModel.builder()
|
| 65 |
+
.code(campaignKey)
|
| 66 |
+
.build());
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/domain/assembler/LeftHeroAssembler.java
CHANGED
|
@@ -1,12 +1,17 @@
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.assembler;
|
| 2 |
|
|
|
|
| 3 |
import com.artandscience.webbff.webbff.common.service.ExternalAttributeService;
|
|
|
|
| 4 |
import com.artandscience.webbff.webbff.domain.model.heroModel.LeftHeroModel;
|
| 5 |
import com.artandscience.webbff.webbff.domain.model.heroModel.TitleModel;
|
|
|
|
| 6 |
import lombok.RequiredArgsConstructor;
|
| 7 |
import lombok.extern.slf4j.Slf4j;
|
| 8 |
import org.springframework.stereotype.Component;
|
| 9 |
|
|
|
|
|
|
|
| 10 |
import static com.artandscience.webbff.webbff.domain.constants.HomepageConstants.LeftHeroButtonsKey;
|
| 11 |
import static com.artandscience.webbff.webbff.domain.constants.HomepageConstants.LeftTitleKey;
|
| 12 |
import static com.artandscience.webbff.webbff.domain.constants.HomepageConstants.RightTitleKey;
|
|
@@ -18,15 +23,36 @@ import static com.artandscience.webbff.webbff.domain.constants.HomepageConstants
|
|
| 18 |
public class LeftHeroAssembler {
|
| 19 |
|
| 20 |
private final ExternalAttributeService externalAttributeService;
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
public LeftHeroModel assemble() {
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
}
|
| 31 |
|
| 32 |
}
|
|
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.assembler;
|
| 2 |
|
| 3 |
+
import com.artandscience.webbff.webbff.common.scope.RequestHeaderScope;
|
| 4 |
import com.artandscience.webbff.webbff.common.service.ExternalAttributeService;
|
| 5 |
+
import com.artandscience.webbff.webbff.common.service.StateManagementService;
|
| 6 |
import com.artandscience.webbff.webbff.domain.model.heroModel.LeftHeroModel;
|
| 7 |
import com.artandscience.webbff.webbff.domain.model.heroModel.TitleModel;
|
| 8 |
+
import com.artandscience.webbff.webbff.domain.model.state.LeftHeroState;
|
| 9 |
import lombok.RequiredArgsConstructor;
|
| 10 |
import lombok.extern.slf4j.Slf4j;
|
| 11 |
import org.springframework.stereotype.Component;
|
| 12 |
|
| 13 |
+
import java.util.Objects;
|
| 14 |
+
|
| 15 |
import static com.artandscience.webbff.webbff.domain.constants.HomepageConstants.LeftHeroButtonsKey;
|
| 16 |
import static com.artandscience.webbff.webbff.domain.constants.HomepageConstants.LeftTitleKey;
|
| 17 |
import static com.artandscience.webbff.webbff.domain.constants.HomepageConstants.RightTitleKey;
|
|
|
|
| 23 |
public class LeftHeroAssembler {
|
| 24 |
|
| 25 |
private final ExternalAttributeService externalAttributeService;
|
| 26 |
+
private final StateManagementService stateManagementService;
|
| 27 |
+
private final RequestHeaderScope requestHeaderScope;
|
| 28 |
+
private static final String LEFT_HERO_MODEL = "left-hero-model.";
|
| 29 |
|
| 30 |
public LeftHeroModel assemble() {
|
| 31 |
+
|
| 32 |
+
var state = stateManagementService.getState(LEFT_HERO_MODEL +
|
| 33 |
+
requestHeaderScope.getRequestHeader().getLanguage(), LeftHeroState.class,true);
|
| 34 |
+
|
| 35 |
+
LeftHeroModel leftHeroModel = null;
|
| 36 |
+
|
| 37 |
+
if (Objects.isNull(state) || Objects.isNull(state.getLeftHeroModel())) {
|
| 38 |
+
|
| 39 |
+
leftHeroModel = LeftHeroModel.builder()
|
| 40 |
+
.title(TitleModel.builder()
|
| 41 |
+
.leftTitle(externalAttributeService.getResource(LeftTitleKey))
|
| 42 |
+
.rightTitle(externalAttributeService.getResource(RightTitleKey)).build())
|
| 43 |
+
.description(externalAttributeService.getResource(DescriptionKey))
|
| 44 |
+
.buttons(externalAttributeService.getButtonModelList(LeftHeroButtonsKey)
|
| 45 |
+
.getButtonModels()).build();
|
| 46 |
+
|
| 47 |
+
state = LeftHeroState.builder()
|
| 48 |
+
.leftHeroModel(leftHeroModel)
|
| 49 |
+
.build();
|
| 50 |
+
stateManagementService.setState(LEFT_HERO_MODEL +
|
| 51 |
+
requestHeaderScope.getRequestHeader().getLanguage(), null, state);
|
| 52 |
+
} else {
|
| 53 |
+
leftHeroModel = state.getLeftHeroModel();
|
| 54 |
+
}
|
| 55 |
+
return leftHeroModel;
|
| 56 |
}
|
| 57 |
|
| 58 |
}
|
src/main/java/com/artandscience/webbff/webbff/domain/assembler/SpotlightAssembler.java
CHANGED
|
@@ -1,8 +1,12 @@
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.assembler;
|
| 2 |
|
|
|
|
| 3 |
import com.artandscience.webbff.webbff.common.service.ExternalAttributeService;
|
|
|
|
|
|
|
| 4 |
import com.artandscience.webbff.webbff.domain.model.SpotlightDto;
|
| 5 |
import com.artandscience.webbff.webbff.domain.model.contentModel.SpotlightModel;
|
|
|
|
| 6 |
import com.fasterxml.jackson.core.JsonProcessingException;
|
| 7 |
import com.fasterxml.jackson.databind.ObjectMapper;
|
| 8 |
import lombok.RequiredArgsConstructor;
|
|
@@ -11,7 +15,7 @@ import org.springframework.stereotype.Component;
|
|
| 11 |
|
| 12 |
import java.util.ArrayList;
|
| 13 |
import java.util.List;
|
| 14 |
-
import java.util.
|
| 15 |
|
| 16 |
import static com.artandscience.webbff.webbff.domain.constants.HomepageConstants.SpotlightsKey;
|
| 17 |
|
|
@@ -22,18 +26,35 @@ public class SpotlightAssembler {
|
|
| 22 |
|
| 23 |
private final ExternalAttributeService externalAttributeService;
|
| 24 |
private final ObjectMapper objectMapper;
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
public List<SpotlightModel> assemble() {
|
| 27 |
try {
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
.
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
|
| 38 |
} catch (JsonProcessingException e) {
|
| 39 |
log.error("An error is occurrence: Error: {}",e.getMessage());
|
|
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.assembler;
|
| 2 |
|
| 3 |
+
import com.artandscience.webbff.webbff.common.scope.RequestHeaderScope;
|
| 4 |
import com.artandscience.webbff.webbff.common.service.ExternalAttributeService;
|
| 5 |
+
import com.artandscience.webbff.webbff.common.service.StateManagementService;
|
| 6 |
+
import com.artandscience.webbff.webbff.domain.helper.SpotlightHelper;
|
| 7 |
import com.artandscience.webbff.webbff.domain.model.SpotlightDto;
|
| 8 |
import com.artandscience.webbff.webbff.domain.model.contentModel.SpotlightModel;
|
| 9 |
+
import com.artandscience.webbff.webbff.domain.model.state.SpotlightState;
|
| 10 |
import com.fasterxml.jackson.core.JsonProcessingException;
|
| 11 |
import com.fasterxml.jackson.databind.ObjectMapper;
|
| 12 |
import lombok.RequiredArgsConstructor;
|
|
|
|
| 15 |
|
| 16 |
import java.util.ArrayList;
|
| 17 |
import java.util.List;
|
| 18 |
+
import java.util.Objects;
|
| 19 |
|
| 20 |
import static com.artandscience.webbff.webbff.domain.constants.HomepageConstants.SpotlightsKey;
|
| 21 |
|
|
|
|
| 26 |
|
| 27 |
private final ExternalAttributeService externalAttributeService;
|
| 28 |
private final ObjectMapper objectMapper;
|
| 29 |
+
private final StateManagementService stateManagementService;
|
| 30 |
+
private final RequestHeaderScope requestHeaderScope;
|
| 31 |
+
private static final String SPOTLIGHT_STATE_KEY = "spotlight-model.";
|
| 32 |
|
| 33 |
public List<SpotlightModel> assemble() {
|
| 34 |
try {
|
| 35 |
+
SpotlightState spotlightState = stateManagementService.getState(SPOTLIGHT_STATE_KEY +
|
| 36 |
+
requestHeaderScope.getRequestHeader().getLanguage(), SpotlightState.class, true);
|
| 37 |
+
List<SpotlightModel> spotlightModels = null;
|
| 38 |
+
|
| 39 |
+
if (Objects.isNull(spotlightState) || Objects.isNull(spotlightState.getSpotlightModels())) {
|
| 40 |
+
spotlightModels = objectMapper.readValue(externalAttributeService.getConfigModel(SpotlightsKey),
|
| 41 |
+
SpotlightDto.class).getSpotlight().stream()
|
| 42 |
+
.map(spotlightModel ->
|
| 43 |
+
SpotlightHelper.resolveSpotlightModel(spotlightModel,externalAttributeService)
|
| 44 |
+
)
|
| 45 |
+
.toList();
|
| 46 |
+
|
| 47 |
+
spotlightState = SpotlightState.builder()
|
| 48 |
+
.spotlightModels(spotlightModels)
|
| 49 |
+
.build();
|
| 50 |
+
|
| 51 |
+
stateManagementService.setState(SPOTLIGHT_STATE_KEY +
|
| 52 |
+
requestHeaderScope.getRequestHeader().getLanguage(),
|
| 53 |
+
null,spotlightState);
|
| 54 |
+
} else {
|
| 55 |
+
spotlightModels = spotlightState.getSpotlightModels().stream().map(SpotlightHelper::copyWithNewUid).toList();
|
| 56 |
+
}
|
| 57 |
+
return spotlightModels;
|
| 58 |
|
| 59 |
} catch (JsonProcessingException e) {
|
| 60 |
log.error("An error is occurrence: Error: {}",e.getMessage());
|
src/main/java/com/artandscience/webbff/webbff/domain/helper/SpotlightHelper.java
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.domain.helper;
|
| 2 |
+
|
| 3 |
+
import com.artandscience.webbff.webbff.common.service.ExternalAttributeService;
|
| 4 |
+
import com.artandscience.webbff.webbff.domain.model.contentModel.SpotlightModel;
|
| 5 |
+
|
| 6 |
+
import java.util.UUID;
|
| 7 |
+
|
| 8 |
+
public abstract class SpotlightHelper {
|
| 9 |
+
|
| 10 |
+
public static SpotlightModel resolveSpotlightModel(SpotlightModel spotlightModel, ExternalAttributeService externalAttributeService) {
|
| 11 |
+
return SpotlightModel.builder()
|
| 12 |
+
.modelUid(UUID.randomUUID().toString())
|
| 13 |
+
.title(externalAttributeService.getResource(spotlightModel.getTitle()))
|
| 14 |
+
.desc(externalAttributeService.getResource(spotlightModel.getDesc()))
|
| 15 |
+
.buttonModel(externalAttributeService
|
| 16 |
+
.getButtonModelList(spotlightModel.getButtonModel().getText()).getButtonModels().get(0))
|
| 17 |
+
.build();
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
public static SpotlightModel copyWithNewUid(SpotlightModel source) {
|
| 21 |
+
return SpotlightModel.builder()
|
| 22 |
+
.modelUid(UUID.randomUUID().toString())
|
| 23 |
+
.title(source.getTitle())
|
| 24 |
+
.desc(source.getDesc())
|
| 25 |
+
.buttonModel(source.getButtonModel())
|
| 26 |
+
.build();
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/domain/model/CampaignRuleDto.java
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.domain.model;
|
| 2 |
+
|
| 3 |
+
import lombok.AllArgsConstructor;
|
| 4 |
+
import lombok.Builder;
|
| 5 |
+
import lombok.Data;
|
| 6 |
+
import lombok.NoArgsConstructor;
|
| 7 |
+
|
| 8 |
+
@Data
|
| 9 |
+
@AllArgsConstructor
|
| 10 |
+
@NoArgsConstructor
|
| 11 |
+
@Builder
|
| 12 |
+
public class CampaignRuleDto {
|
| 13 |
+
|
| 14 |
+
private String campaignKey;
|
| 15 |
+
private RuleDto ruleDto;
|
| 16 |
+
|
| 17 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/domain/model/RuleDto.java
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.domain.model;
|
| 2 |
+
|
| 3 |
+
import lombok.AllArgsConstructor;
|
| 4 |
+
import lombok.Builder;
|
| 5 |
+
import lombok.Data;
|
| 6 |
+
import lombok.NoArgsConstructor;
|
| 7 |
+
|
| 8 |
+
@Data
|
| 9 |
+
@AllArgsConstructor
|
| 10 |
+
@NoArgsConstructor
|
| 11 |
+
@Builder
|
| 12 |
+
public class RuleDto {
|
| 13 |
+
|
| 14 |
+
private Boolean firstLogin;
|
| 15 |
+
private Boolean isBirthday;
|
| 16 |
+
private String userStatus;
|
| 17 |
+
|
| 18 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/domain/model/contentModel/SpotlightModel.java
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.model.contentModel;
|
| 2 |
|
|
|
|
| 3 |
import com.artandscience.webbff.webbff.domain.model.buttonModel.ButtonModel;
|
| 4 |
import lombok.AllArgsConstructor;
|
| 5 |
import lombok.Builder;
|
|
@@ -10,7 +11,7 @@ import lombok.NoArgsConstructor;
|
|
| 10 |
@AllArgsConstructor
|
| 11 |
@NoArgsConstructor
|
| 12 |
@Builder
|
| 13 |
-
public class SpotlightModel {
|
| 14 |
private String modelUid;
|
| 15 |
private String title;
|
| 16 |
private String desc;
|
|
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.model.contentModel;
|
| 2 |
|
| 3 |
+
import com.artandscience.webbff.webbff.common.base.model.BaseModel;
|
| 4 |
import com.artandscience.webbff.webbff.domain.model.buttonModel.ButtonModel;
|
| 5 |
import lombok.AllArgsConstructor;
|
| 6 |
import lombok.Builder;
|
|
|
|
| 11 |
@AllArgsConstructor
|
| 12 |
@NoArgsConstructor
|
| 13 |
@Builder
|
| 14 |
+
public class SpotlightModel extends BaseModel {
|
| 15 |
private String modelUid;
|
| 16 |
private String title;
|
| 17 |
private String desc;
|
src/main/java/com/artandscience/webbff/webbff/domain/model/heroModel/LeftHeroModel.java
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.model.heroModel;
|
| 2 |
|
|
|
|
| 3 |
import com.artandscience.webbff.webbff.domain.model.buttonModel.ButtonModel;
|
| 4 |
import lombok.AllArgsConstructor;
|
| 5 |
import lombok.Builder;
|
|
@@ -12,7 +13,7 @@ import java.util.List;
|
|
| 12 |
@Builder
|
| 13 |
@AllArgsConstructor
|
| 14 |
@NoArgsConstructor
|
| 15 |
-
public class LeftHeroModel {
|
| 16 |
private TitleModel title;
|
| 17 |
private String description;
|
| 18 |
private List<ButtonModel> buttons;
|
|
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.model.heroModel;
|
| 2 |
|
| 3 |
+
import com.artandscience.webbff.webbff.common.base.model.BaseModel;
|
| 4 |
import com.artandscience.webbff.webbff.domain.model.buttonModel.ButtonModel;
|
| 5 |
import lombok.AllArgsConstructor;
|
| 6 |
import lombok.Builder;
|
|
|
|
| 13 |
@Builder
|
| 14 |
@AllArgsConstructor
|
| 15 |
@NoArgsConstructor
|
| 16 |
+
public class LeftHeroModel extends BaseModel {
|
| 17 |
private TitleModel title;
|
| 18 |
private String description;
|
| 19 |
private List<ButtonModel> buttons;
|
src/main/java/com/artandscience/webbff/webbff/domain/model/heroModel/TitleModel.java
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.model.heroModel;
|
| 2 |
|
|
|
|
| 3 |
import lombok.AllArgsConstructor;
|
| 4 |
import lombok.Builder;
|
| 5 |
import lombok.Data;
|
|
@@ -9,7 +10,7 @@ import lombok.NoArgsConstructor;
|
|
| 9 |
@Builder
|
| 10 |
@AllArgsConstructor
|
| 11 |
@NoArgsConstructor
|
| 12 |
-
public class TitleModel {
|
| 13 |
private String leftTitle;
|
| 14 |
private String rightTitle;
|
| 15 |
}
|
|
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.model.heroModel;
|
| 2 |
|
| 3 |
+
import com.artandscience.webbff.webbff.common.base.model.BaseModel;
|
| 4 |
import lombok.AllArgsConstructor;
|
| 5 |
import lombok.Builder;
|
| 6 |
import lombok.Data;
|
|
|
|
| 10 |
@Builder
|
| 11 |
@AllArgsConstructor
|
| 12 |
@NoArgsConstructor
|
| 13 |
+
public class TitleModel extends BaseModel {
|
| 14 |
private String leftTitle;
|
| 15 |
private String rightTitle;
|
| 16 |
}
|
src/main/java/com/artandscience/webbff/webbff/domain/model/output/GetHomepageOutput.java
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.model.output;
|
| 2 |
|
| 3 |
import com.artandscience.webbff.webbff.api.model.response.GetHomepageResponse;
|
|
|
|
| 4 |
import com.artandscience.webbff.webbff.domain.model.contentModel.ContentModel;
|
| 5 |
import com.artandscience.webbff.webbff.domain.model.heroModel.HeroModel;
|
| 6 |
import lombok.AllArgsConstructor;
|
|
@@ -8,6 +9,8 @@ import lombok.Builder;
|
|
| 8 |
import lombok.Data;
|
| 9 |
import lombok.NoArgsConstructor;
|
| 10 |
|
|
|
|
|
|
|
| 11 |
@Data
|
| 12 |
@Builder
|
| 13 |
@AllArgsConstructor
|
|
@@ -15,11 +18,13 @@ import lombok.NoArgsConstructor;
|
|
| 15 |
public class GetHomepageOutput {
|
| 16 |
private HeroModel heroBanner;
|
| 17 |
private ContentModel contentModel;
|
|
|
|
| 18 |
|
| 19 |
public GetHomepageResponse toResponse() {
|
| 20 |
return GetHomepageResponse.builder()
|
| 21 |
.heroBanner(heroBanner)
|
| 22 |
.contentModel(contentModel)
|
|
|
|
| 23 |
.build();
|
| 24 |
}
|
| 25 |
|
|
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.model.output;
|
| 2 |
|
| 3 |
import com.artandscience.webbff.webbff.api.model.response.GetHomepageResponse;
|
| 4 |
+
import com.artandscience.webbff.webbff.common.base.response.MessageBox;
|
| 5 |
import com.artandscience.webbff.webbff.domain.model.contentModel.ContentModel;
|
| 6 |
import com.artandscience.webbff.webbff.domain.model.heroModel.HeroModel;
|
| 7 |
import lombok.AllArgsConstructor;
|
|
|
|
| 9 |
import lombok.Data;
|
| 10 |
import lombok.NoArgsConstructor;
|
| 11 |
|
| 12 |
+
import java.util.List;
|
| 13 |
+
|
| 14 |
@Data
|
| 15 |
@Builder
|
| 16 |
@AllArgsConstructor
|
|
|
|
| 18 |
public class GetHomepageOutput {
|
| 19 |
private HeroModel heroBanner;
|
| 20 |
private ContentModel contentModel;
|
| 21 |
+
private List<MessageBox> campaignMessageBoxes;
|
| 22 |
|
| 23 |
public GetHomepageResponse toResponse() {
|
| 24 |
return GetHomepageResponse.builder()
|
| 25 |
.heroBanner(heroBanner)
|
| 26 |
.contentModel(contentModel)
|
| 27 |
+
.campaignMessageBoxes(campaignMessageBoxes)
|
| 28 |
.build();
|
| 29 |
}
|
| 30 |
|
src/main/java/com/artandscience/webbff/webbff/domain/model/state/LeftHeroState.java
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.domain.model.state;
|
| 2 |
+
|
| 3 |
+
import com.artandscience.webbff.webbff.common.base.model.BaseModel;
|
| 4 |
+
import com.artandscience.webbff.webbff.domain.model.heroModel.LeftHeroModel;
|
| 5 |
+
import lombok.AllArgsConstructor;
|
| 6 |
+
import lombok.Builder;
|
| 7 |
+
import lombok.Data;
|
| 8 |
+
import lombok.NoArgsConstructor;
|
| 9 |
+
|
| 10 |
+
@Data
|
| 11 |
+
@AllArgsConstructor
|
| 12 |
+
@NoArgsConstructor
|
| 13 |
+
@Builder
|
| 14 |
+
public class LeftHeroState extends BaseModel {
|
| 15 |
+
private LeftHeroModel leftHeroModel;
|
| 16 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/domain/model/state/SpotlightState.java
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.domain.model.state;
|
| 2 |
+
|
| 3 |
+
import com.artandscience.webbff.webbff.common.base.model.BaseModel;
|
| 4 |
+
import com.artandscience.webbff.webbff.domain.model.contentModel.SpotlightModel;
|
| 5 |
+
import lombok.AllArgsConstructor;
|
| 6 |
+
import lombok.Builder;
|
| 7 |
+
import lombok.Data;
|
| 8 |
+
import lombok.NoArgsConstructor;
|
| 9 |
+
|
| 10 |
+
import java.util.List;
|
| 11 |
+
|
| 12 |
+
@Data
|
| 13 |
+
@Builder
|
| 14 |
+
@AllArgsConstructor
|
| 15 |
+
@NoArgsConstructor
|
| 16 |
+
public class SpotlightState extends BaseModel {
|
| 17 |
+
private List<SpotlightModel> spotlightModels;
|
| 18 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/domain/service/LoginCampaignService.java
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.domain.service;
|
| 2 |
+
|
| 3 |
+
import com.artandscience.webbff.webbff.domain.model.CampaignRuleDto;
|
| 4 |
+
|
| 5 |
+
import java.util.List;
|
| 6 |
+
|
| 7 |
+
public interface LoginCampaignService {
|
| 8 |
+
|
| 9 |
+
List<CampaignRuleDto> getCampaignRules();
|
| 10 |
+
|
| 11 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/domain/service/impl/HomepageServiceImpl.java
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.service.impl;
|
| 2 |
|
|
|
|
| 3 |
import com.artandscience.webbff.webbff.domain.assembler.ContentModelAssemble;
|
| 4 |
import com.artandscience.webbff.webbff.domain.assembler.LeftHeroAssembler;
|
| 5 |
import com.artandscience.webbff.webbff.domain.assembler.RightHeroAssembler;
|
|
@@ -18,6 +19,7 @@ public class HomepageServiceImpl implements HomepageService {
|
|
| 18 |
private final LeftHeroAssembler leftHeroAssembler;
|
| 19 |
private final RightHeroAssembler rightHeroAssembler;
|
| 20 |
private final ContentModelAssemble contentModelAssemble;
|
|
|
|
| 21 |
|
| 22 |
@Override
|
| 23 |
public GetHomepageOutput getHomepage() {
|
|
@@ -28,6 +30,7 @@ public class HomepageServiceImpl implements HomepageService {
|
|
| 28 |
.rightHero(rightHeroAssembler.assemble())
|
| 29 |
.build())
|
| 30 |
.contentModel(contentModelAssemble.assemble())
|
|
|
|
| 31 |
.build();
|
| 32 |
}
|
| 33 |
|
|
|
|
| 1 |
package com.artandscience.webbff.webbff.domain.service.impl;
|
| 2 |
|
| 3 |
+
import com.artandscience.webbff.webbff.domain.assembler.CampaignMessageBoxesAssembler;
|
| 4 |
import com.artandscience.webbff.webbff.domain.assembler.ContentModelAssemble;
|
| 5 |
import com.artandscience.webbff.webbff.domain.assembler.LeftHeroAssembler;
|
| 6 |
import com.artandscience.webbff.webbff.domain.assembler.RightHeroAssembler;
|
|
|
|
| 19 |
private final LeftHeroAssembler leftHeroAssembler;
|
| 20 |
private final RightHeroAssembler rightHeroAssembler;
|
| 21 |
private final ContentModelAssemble contentModelAssemble;
|
| 22 |
+
private final CampaignMessageBoxesAssembler campaignMessagesAssembler;
|
| 23 |
|
| 24 |
@Override
|
| 25 |
public GetHomepageOutput getHomepage() {
|
|
|
|
| 30 |
.rightHero(rightHeroAssembler.assemble())
|
| 31 |
.build())
|
| 32 |
.contentModel(contentModelAssemble.assemble())
|
| 33 |
+
.campaignMessageBoxes(campaignMessagesAssembler.assemble())
|
| 34 |
.build();
|
| 35 |
}
|
| 36 |
|
src/main/java/com/artandscience/webbff/webbff/domain/service/impl/LoginCampaignServiceImpl.java
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package com.artandscience.webbff.webbff.domain.service.impl;
|
| 2 |
+
|
| 3 |
+
import com.artandscience.webbff.webbff.common.helper.JsonMapper;
|
| 4 |
+
import com.artandscience.webbff.webbff.dao.entity.LoginCampaignRule;
|
| 5 |
+
import com.artandscience.webbff.webbff.dao.repository.LoginCampaignRuleRepository;
|
| 6 |
+
import com.artandscience.webbff.webbff.domain.model.CampaignRuleDto;
|
| 7 |
+
import com.artandscience.webbff.webbff.domain.model.RuleDto;
|
| 8 |
+
import com.artandscience.webbff.webbff.domain.service.LoginCampaignService;
|
| 9 |
+
import lombok.RequiredArgsConstructor;
|
| 10 |
+
import org.springframework.stereotype.Service;
|
| 11 |
+
import org.springframework.util.StringUtils;
|
| 12 |
+
|
| 13 |
+
import java.time.LocalDate;
|
| 14 |
+
import java.util.List;
|
| 15 |
+
import java.util.stream.Collectors;
|
| 16 |
+
|
| 17 |
+
@Service
|
| 18 |
+
@RequiredArgsConstructor
|
| 19 |
+
public class LoginCampaignServiceImpl implements LoginCampaignService {
|
| 20 |
+
|
| 21 |
+
private final LoginCampaignRuleRepository loginCampaignRuleRepository;
|
| 22 |
+
|
| 23 |
+
@Override
|
| 24 |
+
public List<CampaignRuleDto> getCampaignRules() {
|
| 25 |
+
var entityList = loginCampaignRuleRepository.getLoginCampaignRule(LocalDate.now());
|
| 26 |
+
return entityList.stream()
|
| 27 |
+
.map(this::getDto)
|
| 28 |
+
.collect(Collectors.toList());
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
private CampaignRuleDto getDto(LoginCampaignRule loginCampaignRule) {
|
| 32 |
+
String jsonBody = loginCampaignRule.getRule();
|
| 33 |
+
RuleDto dto = new RuleDto();
|
| 34 |
+
if (StringUtils.hasText(jsonBody)) {
|
| 35 |
+
dto = JsonMapper.convertToData(jsonBody, RuleDto.class);
|
| 36 |
+
}
|
| 37 |
+
return CampaignRuleDto.builder()
|
| 38 |
+
.campaignKey(loginCampaignRule.getCampaignKey())
|
| 39 |
+
.ruleDto(dto)
|
| 40 |
+
.build();
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
}
|
src/main/java/com/artandscience/webbff/webbff/integration/interceptor/FeignClientInterceptor.java
CHANGED
|
@@ -25,11 +25,6 @@ public class FeignClientInterceptor extends Client.Default {
|
|
| 25 |
public Response execute(Request request, Request.Options options) throws IOException {
|
| 26 |
Response response = super.execute(request, options);
|
| 27 |
|
| 28 |
-
log.error("Feign raw response status: {}", response.status());
|
| 29 |
-
log.error("Feign raw response reason: {}", response.reason());
|
| 30 |
-
log.error("Feign raw response headers: {}", response.headers());
|
| 31 |
-
log.error("Feign raw response body null: {}", response.body() == null);
|
| 32 |
-
|
| 33 |
if (response.body() == null) {
|
| 34 |
log.warn("Feign response body is null. status: {}, reason: {}, url: {}, headers: {}",
|
| 35 |
response.status(),
|
|
|
|
| 25 |
public Response execute(Request request, Request.Options options) throws IOException {
|
| 26 |
Response response = super.execute(request, options);
|
| 27 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
if (response.body() == null) {
|
| 29 |
log.warn("Feign response body is null. status: {}, reason: {}, url: {}, headers: {}",
|
| 30 |
response.status(),
|
src/main/resources/application.yml
CHANGED
|
@@ -18,7 +18,7 @@ spring:
|
|
| 18 |
ddl-auto: update
|
| 19 |
properties:
|
| 20 |
hibernate:
|
| 21 |
-
default_schema:
|
| 22 |
show-sql: true
|
| 23 |
data:
|
| 24 |
redis:
|
|
|
|
| 18 |
ddl-auto: update
|
| 19 |
properties:
|
| 20 |
hibernate:
|
| 21 |
+
default_schema: artandscience
|
| 22 |
show-sql: true
|
| 23 |
data:
|
| 24 |
redis:
|