diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/alimTalk/service/SendDoneOrderAlimTalkService.java b/DuDoong-Api/src/main/java/band/gosrock/api/alimTalk/service/SendDoneOrderAlimTalkService.java index 52726001..5fcb89c3 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/alimTalk/service/SendDoneOrderAlimTalkService.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/alimTalk/service/SendDoneOrderAlimTalkService.java @@ -25,7 +25,7 @@ public void execute(OrderAlimTalkDto orderAlimTalkDto) { userInfo.getUserName(), eventInfo.getHostName(), eventInfo.getEventName()); String headerContent = OrderKakaoTalkAlarm.creationHeaderOf(); - ncpHelper.sendItemNcpAlimTalk( + ncpHelper.sendDoneOrderAlimTalk( userInfo.getPhoneNum(), OrderKakaoTalkAlarm.creationTemplateCode(), content, diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/alimTalk/service/SendWithdrawOrderAlimTalkService.java b/DuDoong-Api/src/main/java/band/gosrock/api/alimTalk/service/SendWithdrawOrderAlimTalkService.java index b8a01c48..57f6faf2 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/alimTalk/service/SendWithdrawOrderAlimTalkService.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/alimTalk/service/SendWithdrawOrderAlimTalkService.java @@ -25,7 +25,7 @@ public void execute(OrderAlimTalkDto orderAlimTalkDto) { userInfo.getUserName(), eventInfo.getHostName(), eventInfo.getEventName()); String headerContent = OrderKakaoTalkAlarm.deletionHeaderOf(); - ncpHelper.sendItemButtonNcpAlimTalk( + ncpHelper.sendCancelOrderAlimTalk( userInfo.getPhoneNum(), OrderKakaoTalkAlarm.deletionTemplateCode(), content, diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/config/rateLimit/ThrottlingInterceptor.java b/DuDoong-Api/src/main/java/band/gosrock/api/config/rateLimit/ThrottlingInterceptor.java index 3fe79590..632e7b54 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/config/rateLimit/ThrottlingInterceptor.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/config/rateLimit/ThrottlingInterceptor.java @@ -8,10 +8,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.github.bucket4j.Bucket; import java.io.IOException; +import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; @@ -26,6 +28,9 @@ public class ThrottlingInterceptor implements HandlerInterceptor { private final IPRateLimiter ipRateLimiter; private final ObjectMapper objectMapper; + @Value("${acl.whiteList}") + private List aclWhiteList; + private final SlackThrottleErrorSender slackThrottleErrorSender; @Override @@ -33,10 +38,18 @@ public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { Long userId = SecurityUtils.getCurrentUserId(); + String remoteAddr = request.getRemoteAddr(); + log.info("remoteAddr : " + remoteAddr); + + // next js ssr 대응 + if (aclWhiteList.contains(remoteAddr)) { + log.info("white List pass" + remoteAddr); + return true; + } + Bucket bucket; if (userId == 0L) { // 익명 유저 ip 기반처리 - String remoteAddr = request.getRemoteAddr(); bucket = ipRateLimiter.resolveBucket(remoteAddr); } else { // 비 익명 유저 유저 아이디 기반 처리 diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/order/controller/OrderAdminController.java b/DuDoong-Api/src/main/java/band/gosrock/api/order/controller/OrderAdminController.java index 232db197..5aa59054 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/order/controller/OrderAdminController.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/order/controller/OrderAdminController.java @@ -3,10 +3,12 @@ import band.gosrock.api.common.page.PageResponse; import band.gosrock.api.order.docs.ApproveOrderExceptionDocs; +import band.gosrock.api.order.docs.CancelOrderExceptionDocs; import band.gosrock.api.order.model.dto.request.AdminOrderTableQueryRequest; import band.gosrock.api.order.model.dto.response.OrderAdminTableElement; import band.gosrock.api.order.model.dto.response.OrderResponse; import band.gosrock.api.order.service.ApproveOrderUseCase; +import band.gosrock.api.order.service.CancelOrderUseCase; import band.gosrock.api.order.service.ReadOrderUseCase; import band.gosrock.common.annotation.ApiErrorExceptionsExample; import io.swagger.v3.oas.annotations.Operation; @@ -31,6 +33,7 @@ public class OrderAdminController { private final ApproveOrderUseCase approveOrderUseCase; private final ReadOrderUseCase readOrderUseCase; + private final CancelOrderUseCase cancelOrderUseCase; @Operation(summary = "어드민 목록 내 테이블 조회 OrderStage 는 꼭 보내주삼!") @GetMapping @@ -41,6 +44,14 @@ public PageResponse getEventOrders( return readOrderUseCase.getEventOrders(eventId, adminOrderTableQueryRequest, pageable); } + @Operation(summary = "결제 취소요청. 호스트 관리자가 결제를 취소 시킵니다.! (호스트 관리자용(관리자쪽에서 사용))") + @ApiErrorExceptionsExample(CancelOrderExceptionDocs.class) + @PostMapping("/{order_uuid}/cancel") + public OrderResponse cancelOrder( + @PathVariable("eventId") Long eventId, @PathVariable("order_uuid") String orderUuid) { + return cancelOrderUseCase.execute(eventId, orderUuid); + } + @Operation(summary = "주문 승인하기 . 호스트 관리자가 티켓 주문을 승인합니다. ( 어드민 이벤트쪽으로 이동예정 )") @ApiErrorExceptionsExample(ApproveOrderExceptionDocs.class) @PostMapping("/{order_uuid}/approve") diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/order/controller/OrderController.java b/DuDoong-Api/src/main/java/band/gosrock/api/order/controller/OrderController.java index f2cdbaec..251743ad 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/order/controller/OrderController.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/order/controller/OrderController.java @@ -2,7 +2,6 @@ import band.gosrock.api.common.slice.SliceResponse; -import band.gosrock.api.order.docs.CancelOrderExceptionDocs; import band.gosrock.api.order.docs.ConfirmOrderExceptionDocs; import band.gosrock.api.order.docs.CreateOrderExceptionDocs; import band.gosrock.api.order.docs.FreeOrderExceptionDocs; @@ -13,7 +12,6 @@ import band.gosrock.api.order.model.dto.response.OrderBriefElement; import band.gosrock.api.order.model.dto.response.OrderResponse; import band.gosrock.api.order.model.dto.response.OrderTicketResponse; -import band.gosrock.api.order.service.CancelOrderUseCase; import band.gosrock.api.order.service.ConfirmOrderUseCase; import band.gosrock.api.order.service.CreateOrderUseCase; import band.gosrock.api.order.service.CreateTossOrderUseCase; @@ -49,7 +47,6 @@ public class OrderController { private final CreateOrderUseCase createOrderUseCase; private final ConfirmOrderUseCase confirmOrderUseCase; private final FreeOrderUseCase freeOrderUseCase; - private final CancelOrderUseCase cancelOrderUseCase; private final RefundOrderUseCase refundOrderUseCase; private final ReadOrderUseCase readOrderUseCase; @@ -87,13 +84,6 @@ public OrderResponse freeOrder(@PathVariable("order_uuid") String orderUuid) { return freeOrderUseCase.execute(orderUuid); } - @Operation(summary = "결제 취소요청. 호스트 관리자가 결제를 취소 시킵니다.! (호스트 관리자용(관리자쪽에서 사용))") - @ApiErrorExceptionsExample(CancelOrderExceptionDocs.class) - @PostMapping("/{order_uuid}/cancel") - public OrderResponse cancelOrder(@PathVariable("order_uuid") String orderUuid) { - return cancelOrderUseCase.execute(orderUuid); - } - @Operation(summary = "결제 환불요청. 본인이 구매한 오더를 환불 시킵니다.! (본인 용)") @ApiErrorExceptionsExample(RefundOrderExceptionDocs.class) @PostMapping("/{order_uuid}/refund") diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/order/model/dto/response/OrderBriefElement.java b/DuDoong-Api/src/main/java/band/gosrock/api/order/model/dto/response/OrderBriefElement.java index 1c7bb20d..f4c492b0 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/order/model/dto/response/OrderBriefElement.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/order/model/dto/response/OrderBriefElement.java @@ -42,7 +42,7 @@ public class OrderBriefElement { public static OrderBriefElement of(Order order, Event event, IssuedTickets issuedTickets) { return OrderBriefElement.builder() .refundInfo(event.toRefundInfoVoWithOrderStatus(order.getOrderStatus())) - .stage(issuedTickets.getIssuedTicketsStage()) + .stage(issuedTickets.getIssuedTicketsStage(event)) .orderUuid(order.getUuid()) .orderNo(order.getOrderNo()) .orderStatus(order.getOrderStatus()) diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/order/service/CancelOrderUseCase.java b/DuDoong-Api/src/main/java/band/gosrock/api/order/service/CancelOrderUseCase.java index eaa0bd77..2cd43e61 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/order/service/CancelOrderUseCase.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/order/service/CancelOrderUseCase.java @@ -1,7 +1,9 @@ package band.gosrock.api.order.service; +import static band.gosrock.api.common.aop.hostRole.FindHostFrom.EVENT_ID; +import static band.gosrock.api.common.aop.hostRole.HostQualification.MANAGER; -import band.gosrock.api.config.security.SecurityUtils; +import band.gosrock.api.common.aop.hostRole.HostRolesAllowed; import band.gosrock.api.order.model.dto.response.OrderResponse; import band.gosrock.api.order.model.mapper.OrderMapper; import band.gosrock.common.annotation.UseCase; @@ -16,9 +18,9 @@ public class CancelOrderUseCase { private final OrderMapper orderMapper; - public OrderResponse execute(String orderUuid) { - Long currentUserId = SecurityUtils.getCurrentUserId(); - withdrawOrderService.cancelOrder(orderUuid, currentUserId); + @HostRolesAllowed(role = MANAGER, findHostFrom = EVENT_ID, applyTransaction = false) + public OrderResponse execute(Long eventId, String orderUuid) { + withdrawOrderService.cancelOrder(orderUuid); return orderMapper.toOrderResponse(orderUuid); } } diff --git a/DuDoong-Api/src/main/resources/application.yml b/DuDoong-Api/src/main/resources/application.yml index 0c5115e2..e53da179 100644 --- a/DuDoong-Api/src/main/resources/application.yml +++ b/DuDoong-Api/src/main/resources/application.yml @@ -27,6 +27,8 @@ swagger: throttle: overdraft: ${RATE_LIMIT_OVERDRAFT:60} greedyRefill: ${RATE_LIMIT_REFILL:60} + +acl.whiteList : ${ACL_WHITELIST:127.0.0.1,127.0.0.2} --- spring: config: diff --git a/DuDoong-Batch/Dockerfile b/DuDoong-Batch/Dockerfile index 78f7ec77..46caf865 100644 --- a/DuDoong-Batch/Dockerfile +++ b/DuDoong-Batch/Dockerfile @@ -6,4 +6,4 @@ COPY ./build/libs/*.jar app.jar ARG PROFILE=dev ENV PROFILE=${PROFILE} -ENTRYPOINT ["java","-Dspring.profiles.active=${PROFILE}", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] \ No newline at end of file +ENTRYPOINT ["java","-Dspring.profiles.active=${PROFILE}", "-Djava.security.egd=file:/dev/./urandom","-jar","-Duser.timezone=Asia/Seoul","/app.jar"] \ No newline at end of file diff --git a/DuDoong-Batch/src/main/resources/application.yml b/DuDoong-Batch/src/main/resources/application.yml index 5d8a5c46..32a13741 100644 --- a/DuDoong-Batch/src/main/resources/application.yml +++ b/DuDoong-Batch/src/main/resources/application.yml @@ -7,7 +7,6 @@ spring: - common batch.job.names: ${job.name:NONE} - --- spring: config: diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/common/alarm/OrderKakaoTalkAlarm.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/common/alarm/OrderKakaoTalkAlarm.java index 9a3905de..5a5641ab 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/common/alarm/OrderKakaoTalkAlarm.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/common/alarm/OrderKakaoTalkAlarm.java @@ -25,7 +25,7 @@ public static String creationHeaderOf() { } public static String creationTemplateCode() { - return "doneorder"; + return "doneorderv2"; } public static String deletionOf(String userName, String hostName, String eventName) { diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/common/aop/redissonLock/RedissonLockAop.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/common/aop/redissonLock/RedissonLockAop.java index b6207399..714be3e6 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/common/aop/redissonLock/RedissonLockAop.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/common/aop/redissonLock/RedissonLockAop.java @@ -73,7 +73,8 @@ public Object lock(final ProceedingJoinPoint joinPoint) throws Throwable { try { rLock.unlock(); } catch (IllegalMonitorStateException e) { - rLock.forceUnlock(); + log.error(e + baseKey + dynamicKey); + throw e; } } } diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/event/domain/Event.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/event/domain/Event.java index fa3bc13d..9935516b 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/event/domain/Event.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/event/domain/Event.java @@ -69,6 +69,10 @@ public Boolean isPreparing() { return this.status == PREPARING; } + public Boolean isClosed() { + return this.status == CLOSED; + } + public void setEventBasic(EventBasic eventBasic) { this.validateOpenStatus(); this.eventBasic = eventBasic; diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTickets.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTickets.java index e6e236ce..ea423906 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTickets.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTickets.java @@ -2,6 +2,7 @@ import band.gosrock.domain.common.vo.IssuedTicketInfoVo; +import band.gosrock.domain.domains.event.domain.Event; import java.util.List; import lombok.Getter; @@ -35,12 +36,17 @@ public String getTicketNoName() { else return String.format("%s ~ %s (%d매)", nos.get(0), nos.get(size - 1), size); } - public IssuedTicketsStage getIssuedTicketsStage() { + public IssuedTicketsStage getIssuedTicketsStage(Event event) { if (getTotalQuantity() == 0) return IssuedTicketsStage.APPROVE_WAITING; List issuedTicketStatuses = getIssuedTicketStatuses(); if (isCanceled(issuedTicketStatuses)) { return IssuedTicketsStage.CANCELED; } + // 정상 발급된 티켓이 . 지난 공연이라면 지난 공연으로 통일. + if (event.isClosed()) { + return IssuedTicketsStage.PASSED_EVENT; + } + if (isBeforeEntrance(issuedTicketStatuses)) return IssuedTicketsStage.BEFORE_ENTRANCE; if (isAfterEntrance(issuedTicketStatuses)) return IssuedTicketsStage.AFTER_ENTRANCE; return IssuedTicketsStage.ENTERING; diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicketsStage.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicketsStage.java index 2fad0cee..835d12f1 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicketsStage.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicketsStage.java @@ -16,7 +16,9 @@ public enum IssuedTicketsStage { // 입장중 ENTERING("ENTERING", "입장중"), // 취소됨 - CANCELED("CANCELED", "취소됨"); + CANCELED("CANCELED", "취소됨"), + + PASSED_EVENT("PASSED_EVENT", "지난공연"); private final String value; @JsonValue private final String kr; diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/order/service/WithdrawOrderService.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/order/service/WithdrawOrderService.java index 8b1b1c23..c7aac782 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/order/service/WithdrawOrderService.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/order/service/WithdrawOrderService.java @@ -21,10 +21,8 @@ public class WithdrawOrderService { private final OrderValidator orderValidator; @RedissonLock(LockName = "주문", identifier = "orderUuid") - public String cancelOrder(String orderUuid, Long userId) { + public String cancelOrder(String orderUuid) { Order order = orderAdaptor.findByOrderUuid(orderUuid); - // TODO : 관리자 권환으로 치환. - orderValidator.validOwner(order, userId); order.cancel(orderValidator); return orderUuid; } diff --git a/DuDoong-Domain/src/test/java/band/gosrock/domain/domains/order/service/WithdrawOrderServiceTest.java b/DuDoong-Domain/src/test/java/band/gosrock/domain/domains/order/service/WithdrawOrderServiceTest.java index da7cef9a..eb118ce6 100644 --- a/DuDoong-Domain/src/test/java/band/gosrock/domain/domains/order/service/WithdrawOrderServiceTest.java +++ b/DuDoong-Domain/src/test/java/band/gosrock/domain/domains/order/service/WithdrawOrderServiceTest.java @@ -57,7 +57,7 @@ void setUp() { AtomicLong successCount = new AtomicLong(); // when CunCurrencyExecutorService.execute( - () -> withdrawOrderService.cancelOrder(order.getUuid(), userId), successCount); + () -> withdrawOrderService.cancelOrder(order.getUuid()), successCount); assertThat(successCount.get()).isGreaterThanOrEqualTo(1); } diff --git a/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/config/alilmTalk/NcpHelper.java b/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/config/alilmTalk/NcpHelper.java index 183497f6..a7715e5f 100644 --- a/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/config/alilmTalk/NcpHelper.java +++ b/DuDoong-Infrastructure/src/main/java/band/gosrock/infrastructure/config/alilmTalk/NcpHelper.java @@ -45,7 +45,7 @@ public NcpHelper( } // 주문 취소 알림톡 (아이템리스트+버튼) - public void sendItemButtonNcpAlimTalk( + public void sendCancelOrderAlimTalk( String to, String templateCode, String content, @@ -64,7 +64,7 @@ public void sendItemButtonNcpAlimTalk( ncpAccessKey, ncpSecretKey, alimTalkSignatureRequestUrl, timeStamp); // 바디 생성 MessageDto.AlimTalkItemButtonBody alimTalkItemButtonBody = - makeItemButtonBody(templateCode, to, content, headerContent, orderInfo); + makeCancelOrderBody(templateCode, to, content, headerContent, orderInfo); ncpClient.sendItemButtonAlimTalk( serviceID, ncpAccessKey, timeStamp, signature, alimTalkItemButtonBody); } @@ -87,8 +87,8 @@ public void sendButtonNcpAlimTalk(String to, String templateCode, String content ncpClient.sendButtonAlimTalk(serviceID, ncpAccessKey, timeStamp, signature, body); } - // 주문 성공 알림톡 (아이템리스트) - public void sendItemNcpAlimTalk( + // 주문 성공 알림톡 (아이템리스트+버튼) + public void sendDoneOrderAlimTalk( String to, String templateCode, String content, @@ -106,9 +106,10 @@ public void sendItemNcpAlimTalk( makePostSignature( ncpAccessKey, ncpSecretKey, alimTalkSignatureRequestUrl, timeStamp); // 바디 생성 - MessageDto.AlimTalkItemBody alimTalkItemBody = - makeItemBody(templateCode, to, content, headerContent, orderInfo); - ncpClient.sendItemAlimTalk(serviceID, ncpAccessKey, timeStamp, signature, alimTalkItemBody); + MessageDto.AlimTalkItemButtonBody alimTalkItemButtonBody = + makeDoneOrderBody(templateCode, to, content, headerContent, orderInfo); + ncpClient.sendItemButtonAlimTalk( + serviceID, ncpAccessKey, timeStamp, signature, alimTalkItemButtonBody); } // 주문서 전송 알림톡 (아이템리스트) @@ -136,14 +137,42 @@ public void sendSettlementNcpAlimTalk( ncpClient.sendItemAlimTalk(serviceID, ncpAccessKey, timeStamp, signature, alimTalkItemBody); } - public MessageDto.AlimTalkItemButtonBody makeItemButtonBody( + public MessageDto.AlimTalkItemButtonBody makeDoneOrderBody( String templateCode, String to, String content, String headerContent, AlimTalkOrderInfo orderInfo) { MessageDto.AlimTalkItem alimTalkItem = makeOrderItem(orderInfo); - List alimTalkButtons = makeWithdrawButtons(); + List alimTalkButtons = makeDoneOrderButtons(); + + MessageDto.AlimTalkItemButtonMessage alimTalkItemButtonMessage = + MessageDto.AlimTalkItemButtonMessage.builder() + .to(to) + .content(content) + .headerContent(headerContent) + .item(alimTalkItem) + .buttons(alimTalkButtons) + .build(); + + List alimTalkItemButtonMessages = new ArrayList<>(); + alimTalkItemButtonMessages.add(alimTalkItemButtonMessage); + + return MessageDto.AlimTalkItemButtonBody.builder() + .plusFriendId(plusFriendId) + .templateCode(templateCode) + .messages(alimTalkItemButtonMessages) + .build(); + } + + public MessageDto.AlimTalkItemButtonBody makeCancelOrderBody( + String templateCode, + String to, + String content, + String headerContent, + AlimTalkOrderInfo orderInfo) { + MessageDto.AlimTalkItem alimTalkItem = makeOrderItem(orderInfo); + List alimTalkButtons = makeCancelOrderButtons(); MessageDto.AlimTalkItemButtonMessage alimTalkItemButtonMessage = MessageDto.AlimTalkItemButtonMessage.builder() @@ -282,6 +311,15 @@ public MessageDto.AlimTalkButton makeAddChannelButton() { return MessageDto.AlimTalkButton.builder().type("AC").name("채널 추가").build(); } + public MessageDto.AlimTalkButton makeMyPageButton() { + return MessageDto.AlimTalkButton.builder() + .type("WL") + .name("마이페이지 바로가기") + .linkMobile("https://dudoong.com/mypage") + .linkPc("https://dudoong.com/mypage") + .build(); + } + public List makeSignUpButtons() { MessageDto.AlimTalkButton alimTalkButton1 = makeAddChannelButton(); MessageDto.AlimTalkButton alimTalkButton2 = makeHomePageButton(); @@ -291,7 +329,14 @@ public List makeSignUpButtons() { return alimTalkButtons; } - public List makeWithdrawButtons() { + public List makeDoneOrderButtons() { + MessageDto.AlimTalkButton alimTalkButton = makeMyPageButton(); + List alimTalkButtons = new ArrayList<>(); + alimTalkButtons.add(alimTalkButton); + return alimTalkButtons; + } + + public List makeCancelOrderButtons() { MessageDto.AlimTalkButton alimTalkButton = makeHomePageButton(); List alimTalkButtons = new ArrayList<>(); alimTalkButtons.add(alimTalkButton); diff --git a/README.md b/README.md index 212f469e..93c875f8 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,7 @@ - [찬진 : spring feign client wiremock test](https://devnm.tistory.com/34) - [찬진 : spring oauth Open ID Connect with kakao](https://devnm.tistory.com/35) - [찬진 : 멀티모듈 jacoco , sonarqube (cloud) 세팅](https://devnm.tistory.com/36) +- [찬진 : spring redisson 분산락 Aop 적용기](https://devnm.tistory.com/37) - [찬진 : 도커 로그 ec2환경에서 클라우드 와치로 전송하기](https://devnm.tistory.com/8) - [경민 : Custom Enum Validator 구현하기](https://gengminy.tistory.com/47) - [경민 : Reflection 을 이용하여 Enum Validator 개선하기](https://gengminy.tistory.com/48)