gitextract_57vblqu2/ ├── .claude/ │ └── settings.local.json ├── .github/ │ ├── CODEOWNERS │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── BuildApiServer.yml │ ├── BuildBatchServer.yml │ ├── BuildSocketServer.yml │ └── ci.yml ├── .gitignore ├── CLAUDE.md ├── DuDoong-Admin/ │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ └── kotlin/ │ │ └── band/ │ │ └── gosrock/ │ │ └── admin/ │ │ ├── controller/ │ │ │ ├── AdminCommentController.kt │ │ │ ├── AdminDashboardController.kt │ │ │ ├── AdminEventController.kt │ │ │ ├── AdminHostController.kt │ │ │ ├── AdminOrderController.kt │ │ │ ├── AdminRefundController.kt │ │ │ └── AdminUserController.kt │ │ ├── exception/ │ │ │ ├── AdminErrorCode.kt │ │ │ └── AdminForbiddenException.kt │ │ ├── model/ │ │ │ └── dto/ │ │ │ ├── request/ │ │ │ │ ├── AdminAddHostMemberRequest.kt │ │ │ │ ├── AdminAdjustTicketStockRequest.kt │ │ │ │ ├── AdminCancelOrderRequest.kt │ │ │ │ ├── AdminChangeNameRequest.kt │ │ │ │ ├── AdminRefundStatusRequest.kt │ │ │ │ ├── AdminTransferMasterRequest.kt │ │ │ │ ├── AdminUpdateEventRequest.kt │ │ │ │ ├── AdminUpdateEventStatusRequest.kt │ │ │ │ ├── AdminUpdateHostMemberRoleRequest.kt │ │ │ │ ├── AdminUpdateHostPartnerRequest.kt │ │ │ │ ├── AdminUpdateHostProfileRequest.kt │ │ │ │ ├── AdminUpdateTicketItemRequest.kt │ │ │ │ ├── AdminUpdateUserRoleRequest.kt │ │ │ │ └── AdminUpdateUserStatusRequest.kt │ │ │ └── response/ │ │ │ ├── AdminCommentResponse.kt │ │ │ ├── AdminEventResponse.kt │ │ │ ├── AdminHostDetailResponse.kt │ │ │ ├── AdminHostMemberResponse.kt │ │ │ ├── AdminHostResponse.kt │ │ │ ├── AdminIssuedTicketResponse.kt │ │ │ ├── AdminOrderResponse.kt │ │ │ ├── AdminRefundResponse.kt │ │ │ ├── AdminTicketItemResponse.kt │ │ │ ├── AdminUserDetailResponse.kt │ │ │ ├── AdminUserResponse.kt │ │ │ └── DashboardResponse.kt │ │ └── service/ │ │ ├── AdminAddHostMemberUseCase.kt │ │ ├── AdminAdjustTicketStockUseCase.kt │ │ ├── AdminAuthValidator.kt │ │ ├── AdminCancelOrderUseCase.kt │ │ ├── AdminChangeNameUseCase.kt │ │ ├── AdminCompleteRefundUseCase.kt │ │ ├── AdminDeleteCommentUseCase.kt │ │ ├── AdminDeleteEventUseCase.kt │ │ ├── AdminExcelService.kt │ │ ├── AdminExportIssuedTicketsUseCase.kt │ │ ├── AdminGetCommentsUseCase.kt │ │ ├── AdminGetEventDetailUseCase.kt │ │ ├── AdminGetEventsUseCase.kt │ │ ├── AdminGetHostDetailUseCase.kt │ │ ├── AdminGetHostEventsUseCase.kt │ │ ├── AdminGetHostMembersUseCase.kt │ │ ├── AdminGetHostsUseCase.kt │ │ ├── AdminGetIssuedTicketsUseCase.kt │ │ ├── AdminGetMeUseCase.kt │ │ ├── AdminGetOrderDetailUseCase.kt │ │ ├── AdminGetOrdersUseCase.kt │ │ ├── AdminGetRefundDetailUseCase.kt │ │ ├── AdminGetRefundsUseCase.kt │ │ ├── AdminGetTicketItemsUseCase.kt │ │ ├── AdminGetUserDetailUseCase.kt │ │ ├── AdminGetUsersUseCase.kt │ │ ├── AdminRemoveHostMemberUseCase.kt │ │ ├── AdminTransferMasterUseCase.kt │ │ ├── AdminUpdateEventStatusUseCase.kt │ │ ├── AdminUpdateEventUseCase.kt │ │ ├── AdminUpdateHostMemberRoleUseCase.kt │ │ ├── AdminUpdateHostPartnerUseCase.kt │ │ ├── AdminUpdateHostProfileUseCase.kt │ │ ├── AdminUpdateRefundStatusUseCase.kt │ │ ├── AdminUpdateTicketItemUseCase.kt │ │ ├── AdminUpdateUserRoleUseCase.kt │ │ ├── AdminUpdateUserStatusUseCase.kt │ │ └── GetDashboardUseCase.kt │ └── test/ │ └── kotlin/ │ └── band/ │ └── gosrock/ │ └── admin/ │ └── service/ │ ├── AdminAuthValidatorTest.kt │ ├── AdminChangeNameUseCaseTest.kt │ ├── AdminCompleteRefundUseCaseTest.kt │ ├── AdminExcelServiceTest.kt │ └── AdminUpdateRefundStatusUseCaseTest.kt ├── DuDoong-Api/ │ ├── Dockerfile │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── kotlin/ │ │ │ └── band/ │ │ │ └── gosrock/ │ │ │ ├── DuDoongApiServerApplication.kt │ │ │ └── api/ │ │ │ ├── admin/ │ │ │ │ └── controller/ │ │ │ │ └── AdminAuthController.kt │ │ │ ├── alimTalk/ │ │ │ │ ├── dto/ │ │ │ │ │ └── OrderAlimTalkDto.kt │ │ │ │ ├── handler/ │ │ │ │ │ ├── DoneOrderEventAlimTalkHandler.kt │ │ │ │ │ ├── RegisterUserEventAlimTalkHandler.kt │ │ │ │ │ └── WithDrawOrderEventAlimTalkHandler.kt │ │ │ │ └── service/ │ │ │ │ ├── SendDoneOrderAlimTalkService.kt │ │ │ │ ├── SendRegisterAlimTalkService.kt │ │ │ │ ├── SendWithdrawOrderAlimTalkService.kt │ │ │ │ └── helper/ │ │ │ │ └── OrderAlimTalkInfoHelper.kt │ │ │ ├── auth/ │ │ │ │ ├── controller/ │ │ │ │ │ └── AuthController.kt │ │ │ │ ├── model/ │ │ │ │ │ └── dto/ │ │ │ │ │ ├── KakaoUserInfoDto.kt │ │ │ │ │ ├── request/ │ │ │ │ │ │ └── RegisterRequest.kt │ │ │ │ │ └── response/ │ │ │ │ │ ├── AvailableRegisterResponse.kt │ │ │ │ │ ├── OauthLoginLinkResponse.kt │ │ │ │ │ ├── OauthTokenResponse.kt │ │ │ │ │ ├── OauthUserInfoResponse.kt │ │ │ │ │ └── TokenAndUserResponse.kt │ │ │ │ └── service/ │ │ │ │ ├── LocalDevLoginUseCase.kt │ │ │ │ ├── LoginUseCase.kt │ │ │ │ ├── LogoutUseCase.kt │ │ │ │ ├── OauthUserInfoUseCase.kt │ │ │ │ ├── RefreshUseCase.kt │ │ │ │ ├── RegisterUseCase.kt │ │ │ │ ├── WithDrawUseCase.kt │ │ │ │ └── helper/ │ │ │ │ ├── CookieHelper.kt │ │ │ │ ├── KakaoOauthHelper.kt │ │ │ │ ├── OauthOIDCHelper.kt │ │ │ │ └── TokenGenerateHelper.kt │ │ │ ├── cart/ │ │ │ │ ├── controller/ │ │ │ │ │ └── CartController.kt │ │ │ │ ├── docs/ │ │ │ │ │ └── CreateCartExceptionDocs.kt │ │ │ │ ├── model/ │ │ │ │ │ ├── dto/ │ │ │ │ │ │ ├── request/ │ │ │ │ │ │ │ ├── AddCartLineDto.kt │ │ │ │ │ │ │ ├── AddCartOptionAnswerDto.kt │ │ │ │ │ │ │ └── AddCartRequest.kt │ │ │ │ │ │ └── response/ │ │ │ │ │ │ ├── CartItemResponse.kt │ │ │ │ │ │ └── CartResponse.kt │ │ │ │ │ └── mapper/ │ │ │ │ │ └── CartMapper.kt │ │ │ │ └── service/ │ │ │ │ ├── CheckOptionUseCase.kt │ │ │ │ ├── CreateCartUseCase.kt │ │ │ │ └── ReadCartUseCase.kt │ │ │ ├── comment/ │ │ │ │ ├── controller/ │ │ │ │ │ └── CommentController.kt │ │ │ │ ├── mapper/ │ │ │ │ │ └── CommentMapper.kt │ │ │ │ ├── model/ │ │ │ │ │ ├── request/ │ │ │ │ │ │ └── CreateCommentRequest.kt │ │ │ │ │ └── response/ │ │ │ │ │ ├── CreateCommentResponse.kt │ │ │ │ │ ├── RetrieveCommentCountResponse.kt │ │ │ │ │ ├── RetrieveCommentDTO.kt │ │ │ │ │ ├── RetrieveCommentListResponse.kt │ │ │ │ │ └── RetrieveRandomCommentResponse.kt │ │ │ │ └── service/ │ │ │ │ ├── CreateCommentUseCase.kt │ │ │ │ ├── DeleteCommentUseCase.kt │ │ │ │ ├── RetrieveCommentCountUseCase.kt │ │ │ │ ├── RetrieveCommentUseCase.kt │ │ │ │ └── RetrieveRandomCommentUseCase.kt │ │ │ ├── common/ │ │ │ │ ├── UserUtils.kt │ │ │ │ ├── aop/ │ │ │ │ │ ├── hostPartner/ │ │ │ │ │ │ ├── HostPartnerAllowed.kt │ │ │ │ │ │ ├── HostPartnerAop.kt │ │ │ │ │ │ ├── HostPartnerCallTransaction.kt │ │ │ │ │ │ ├── HostPartnerCallTransactionFactory.kt │ │ │ │ │ │ ├── HostPartnerEventTransaction.kt │ │ │ │ │ │ └── HostPartnerHostTransaction.kt │ │ │ │ │ └── hostRole/ │ │ │ │ │ ├── FindHostFrom.kt │ │ │ │ │ ├── HostCallTransactionFactory.kt │ │ │ │ │ ├── HostQualification.kt │ │ │ │ │ ├── HostRoleAop.kt │ │ │ │ │ ├── HostRoleCallTransaction.kt │ │ │ │ │ ├── HostRoleEventTransaction.kt │ │ │ │ │ ├── HostRoleHostTransaction.kt │ │ │ │ │ └── HostRolesAllowed.kt │ │ │ │ ├── customizer/ │ │ │ │ │ └── EnumValuePropertyCustomizer.kt │ │ │ │ ├── page/ │ │ │ │ │ └── PageResponse.kt │ │ │ │ └── slice/ │ │ │ │ ├── SliceParam.kt │ │ │ │ └── SliceResponse.kt │ │ │ ├── config/ │ │ │ │ ├── ExampleHolder.kt │ │ │ │ ├── HttpContentCacheFilter.kt │ │ │ │ ├── MdcFilter.kt │ │ │ │ ├── ServletFilterConfig.kt │ │ │ │ ├── SwaggerConfig.kt │ │ │ │ ├── WebMvcConfig.kt │ │ │ │ ├── rateLimit/ │ │ │ │ │ ├── IPRateLimiter.kt │ │ │ │ │ ├── ThrottlingInterceptor.kt │ │ │ │ │ ├── ThrottlingWebConfigure.kt │ │ │ │ │ └── UserRateLimiter.kt │ │ │ │ ├── response/ │ │ │ │ │ ├── GlobalExceptionHandler.kt │ │ │ │ │ └── SuccessResponseAdvice.kt │ │ │ │ └── security/ │ │ │ │ ├── AccessDeniedFilter.kt │ │ │ │ ├── AuthDetails.kt │ │ │ │ ├── CorsConfig.kt │ │ │ │ ├── CurrentUserIdResolver.kt │ │ │ │ ├── JwtExceptionFilter.kt │ │ │ │ ├── JwtTokenFilter.kt │ │ │ │ ├── SecurityConfig.kt │ │ │ │ └── SecurityUtils.kt │ │ │ ├── coupon/ │ │ │ │ ├── controller/ │ │ │ │ │ └── CouponController.kt │ │ │ │ ├── dto/ │ │ │ │ │ ├── reqeust/ │ │ │ │ │ │ └── CreateCouponCampaignRequest.kt │ │ │ │ │ └── response/ │ │ │ │ │ ├── CreateCouponCampaignResponse.kt │ │ │ │ │ ├── CreateUserCouponResponse.kt │ │ │ │ │ ├── ReadIssuedCouponOrderResponse.kt │ │ │ │ │ └── ReadIssuedCouponResponse.kt │ │ │ │ ├── mapper/ │ │ │ │ │ ├── CouponCampaignMapper.kt │ │ │ │ │ └── IssuedCouponMapper.kt │ │ │ │ └── service/ │ │ │ │ ├── CreateCouponUseCase.kt │ │ │ │ ├── CreateUserCouponUseCase.kt │ │ │ │ └── ReadIssuedCouponUseCase.kt │ │ │ ├── email/ │ │ │ │ ├── dto/ │ │ │ │ │ ├── IssuedTicketMailDTO.kt │ │ │ │ │ └── OrderMailDto.kt │ │ │ │ ├── handler/ │ │ │ │ │ ├── CreateOrderEventEmailHandler.kt │ │ │ │ │ ├── DoneOrderEventEmailHandler.kt │ │ │ │ │ ├── EntranceIssuedTicketEventEmailHandler.kt │ │ │ │ │ ├── RegisterUserEventEmailHandler.kt │ │ │ │ │ └── WithDrawOrderEventEmailHandler.kt │ │ │ │ └── service/ │ │ │ │ ├── EntranceIssuedTicketEmailService.kt │ │ │ │ ├── HostMasterChangeEmailService.kt │ │ │ │ ├── HostUserDisabledEmailService.kt │ │ │ │ ├── HostUserInvitationEmailService.kt │ │ │ │ ├── HostUserRoleChangeEmailService.kt │ │ │ │ ├── IssuedTicketMailInfoHelper.kt │ │ │ │ ├── OrderApproveConfirmEmailService.kt │ │ │ │ ├── OrderApproveRequestEmailService.kt │ │ │ │ ├── OrderMailInfoHelper.kt │ │ │ │ ├── OrderPaymentDoneEmailService.kt │ │ │ │ ├── OrderWithDrawCancelEmailService.kt │ │ │ │ ├── OrderWithDrawRefundEmailService.kt │ │ │ │ └── SendRegisterEmailService.kt │ │ │ ├── event/ │ │ │ │ ├── controller/ │ │ │ │ │ └── EventController.kt │ │ │ │ ├── model/ │ │ │ │ │ ├── dto/ │ │ │ │ │ │ ├── request/ │ │ │ │ │ │ │ ├── CreateEventRequest.kt │ │ │ │ │ │ │ ├── UpdateEventBasicRequest.kt │ │ │ │ │ │ │ ├── UpdateEventDetailRequest.kt │ │ │ │ │ │ │ └── UpdateEventStatusRequest.kt │ │ │ │ │ │ └── response/ │ │ │ │ │ │ ├── EventChecklistResponse.kt │ │ │ │ │ │ ├── EventDetailResponse.kt │ │ │ │ │ │ ├── EventProfileResponse.kt │ │ │ │ │ │ └── EventResponse.kt │ │ │ │ │ └── mapper/ │ │ │ │ │ └── EventMapper.kt │ │ │ │ └── service/ │ │ │ │ ├── CreateEventUseCase.kt │ │ │ │ ├── DeleteEventUseCase.kt │ │ │ │ ├── OpenEventUseCase.kt │ │ │ │ ├── ReadEventChecklistUseCase.kt │ │ │ │ ├── ReadEventDetailUseCase.kt │ │ │ │ ├── ReadUserEventProfilesUseCase.kt │ │ │ │ ├── SearchEventsUseCase.kt │ │ │ │ ├── UpdateEventBasicUseCase.kt │ │ │ │ ├── UpdateEventDetailUseCase.kt │ │ │ │ └── UpdateEventStatusUseCase.kt │ │ │ ├── example/ │ │ │ │ ├── controller/ │ │ │ │ │ └── ExampleController.kt │ │ │ │ ├── docs/ │ │ │ │ │ ├── ExampleException2Docs.kt │ │ │ │ │ └── ExampleExceptionDocs.kt │ │ │ │ ├── dto/ │ │ │ │ │ └── ExampleResponse.kt │ │ │ │ └── service/ │ │ │ │ └── ExampleApiService.kt │ │ │ ├── host/ │ │ │ │ ├── controller/ │ │ │ │ │ └── HostController.kt │ │ │ │ ├── model/ │ │ │ │ │ ├── dto/ │ │ │ │ │ │ ├── request/ │ │ │ │ │ │ │ ├── CreateHostRequest.kt │ │ │ │ │ │ │ ├── InviteHostRequest.kt │ │ │ │ │ │ │ ├── TransferMasterRequest.kt │ │ │ │ │ │ │ ├── UpdateHostRequest.kt │ │ │ │ │ │ │ ├── UpdateHostSlackRequest.kt │ │ │ │ │ │ │ └── UpdateHostUserRoleRequest.kt │ │ │ │ │ │ └── response/ │ │ │ │ │ │ ├── HostDetailResponse.kt │ │ │ │ │ │ ├── HostEventProfileResponse.kt │ │ │ │ │ │ ├── HostProfileResponse.kt │ │ │ │ │ │ └── HostResponse.kt │ │ │ │ │ └── mapper/ │ │ │ │ │ └── HostMapper.kt │ │ │ │ └── service/ │ │ │ │ ├── CreateHostUseCase.kt │ │ │ │ ├── InviteHostUseCase.kt │ │ │ │ ├── JoinHostUseCase.kt │ │ │ │ ├── ReadHostEventsUseCase.kt │ │ │ │ ├── ReadHostProfilesUseCase.kt │ │ │ │ ├── ReadHostUseCase.kt │ │ │ │ ├── ReadInviteUsersUseCase.kt │ │ │ │ ├── RejectHostUseCase.kt │ │ │ │ ├── TransferMasterUseCase.kt │ │ │ │ ├── UpdateHostProfileUseCase.kt │ │ │ │ ├── UpdateHostSlackUrlUseCase.kt │ │ │ │ └── UpdateHostUserRoleUseCase.kt │ │ │ ├── image/ │ │ │ │ ├── controller/ │ │ │ │ │ └── ImageController.kt │ │ │ │ ├── dto/ │ │ │ │ │ ├── ImageUrlRequest.kt │ │ │ │ │ └── ImageUrlResponse.kt │ │ │ │ └── service/ │ │ │ │ └── GetImageUploadUrlUseCase.kt │ │ │ ├── issuedTicket/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── AdminIssuedTicketController.kt │ │ │ │ │ └── IssuedTicketController.kt │ │ │ │ ├── dto/ │ │ │ │ │ ├── request/ │ │ │ │ │ │ └── AdminIssuedTicketTableQueryRequest.kt │ │ │ │ │ └── response/ │ │ │ │ │ ├── IssuedTicketAdminTableElement.kt │ │ │ │ │ ├── RetrieveIssuedTicketDTO.kt │ │ │ │ │ ├── RetrieveIssuedTicketDetailResponse.kt │ │ │ │ │ └── RetrieveIssuedTicketListResponse.kt │ │ │ │ ├── mapper/ │ │ │ │ │ └── IssuedTicketMapper.kt │ │ │ │ └── service/ │ │ │ │ ├── EntranceIssuedTicketUseCase.kt │ │ │ │ ├── ReadIssuedTicketUseCase.kt │ │ │ │ └── ReadIssuedTicketsUseCase.kt │ │ │ ├── order/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── OrderAdminController.kt │ │ │ │ │ └── OrderController.kt │ │ │ │ ├── docs/ │ │ │ │ │ ├── ApproveOrderExceptionDocs.kt │ │ │ │ │ ├── CancelOrderExceptionDocs.kt │ │ │ │ │ ├── ConfirmOrderExceptionDocs.kt │ │ │ │ │ ├── CreateOrderExceptionDocs.kt │ │ │ │ │ ├── FreeOrderExceptionDocs.kt │ │ │ │ │ └── RefundOrderExceptionDocs.kt │ │ │ │ ├── model/ │ │ │ │ │ ├── dto/ │ │ │ │ │ │ ├── request/ │ │ │ │ │ │ │ ├── AdminOrderTableQueryRequest.kt │ │ │ │ │ │ │ ├── CancelReasonRequest.kt │ │ │ │ │ │ │ ├── ConfirmOrderRequest.kt │ │ │ │ │ │ │ └── CreateOrderRequest.kt │ │ │ │ │ │ └── response/ │ │ │ │ │ │ ├── CreateOrderResponse.kt │ │ │ │ │ │ ├── OrderAdminTableElement.kt │ │ │ │ │ │ ├── OrderBriefElement.kt │ │ │ │ │ │ ├── OrderLineTicketResponse.kt │ │ │ │ │ │ ├── OrderPaymentResponse.kt │ │ │ │ │ │ ├── OrderResponse.kt │ │ │ │ │ │ └── OrderTicketResponse.kt │ │ │ │ │ └── mapper/ │ │ │ │ │ └── OrderMapper.kt │ │ │ │ └── service/ │ │ │ │ ├── ApproveOrderUseCase.kt │ │ │ │ ├── CancelOrderUseCase.kt │ │ │ │ ├── ConfirmOrderUseCase.kt │ │ │ │ ├── CreateOrderUseCase.kt │ │ │ │ ├── CreateTossOrderUseCase.kt │ │ │ │ ├── FreeOrderUseCase.kt │ │ │ │ ├── ReadOrderUseCase.kt │ │ │ │ ├── RefundOrderUseCase.kt │ │ │ │ └── RefuseOrderUseCase.kt │ │ │ ├── refund/ │ │ │ │ ├── controller/ │ │ │ │ │ └── RefundController.kt │ │ │ │ ├── dto/ │ │ │ │ │ └── response/ │ │ │ │ │ └── RefundResponse.kt │ │ │ │ └── service/ │ │ │ │ ├── CompleteRefundUseCase.kt │ │ │ │ └── GetRefundsUseCase.kt │ │ │ ├── slack/ │ │ │ │ ├── handler/ │ │ │ │ │ ├── event/ │ │ │ │ │ │ ├── EventContentChangeEventHandler.kt │ │ │ │ │ │ ├── EventCreationEventHandler.kt │ │ │ │ │ │ ├── EventDeletionEventHandler.kt │ │ │ │ │ │ └── EventStatusChangeEventHandler.kt │ │ │ │ │ ├── host/ │ │ │ │ │ │ ├── HostRegisterSlackEventHandler.kt │ │ │ │ │ │ ├── HostUserDisabledEventHandler.kt │ │ │ │ │ │ ├── HostUserInvitationEventHandler.kt │ │ │ │ │ │ ├── HostUserJoinEventHandler.kt │ │ │ │ │ │ └── HostUserRoleChangeEventHandler.kt │ │ │ │ │ └── order/ │ │ │ │ │ ├── DudoongTicketCancelOrderEventHandler.kt │ │ │ │ │ ├── DudoongTicketRefundOrderEventHandler.kt │ │ │ │ │ ├── NewApproveOrderAlarmEventHandler.kt │ │ │ │ │ ├── NewConfirmOrderAlarmEventHandler.kt │ │ │ │ │ ├── OrderApprovedAlarmEventHandler.kt │ │ │ │ │ └── WithDrawOrderEventHandler.kt │ │ │ │ └── sender/ │ │ │ │ ├── SlackBootNotificationSender.kt │ │ │ │ ├── SlackInternalErrorSender.kt │ │ │ │ └── SlackThrottleErrorSender.kt │ │ │ ├── statistic/ │ │ │ │ ├── controller/ │ │ │ │ │ └── AdminStatisticController.kt │ │ │ │ ├── dto/ │ │ │ │ │ └── DashBoardStatisticResponse.kt │ │ │ │ ├── query/ │ │ │ │ │ ├── IssuedTicketQueryRepository.kt │ │ │ │ │ ├── OrderQueryRepository.kt │ │ │ │ │ └── result/ │ │ │ │ │ ├── IssuedTicketStatistic.kt │ │ │ │ │ └── OrderStatistic.kt │ │ │ │ └── useCase/ │ │ │ │ └── StatisticUseCase.kt │ │ │ ├── ticketItem/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── TicketItemController.kt │ │ │ │ │ └── TicketOptionController.kt │ │ │ │ ├── dto/ │ │ │ │ │ ├── request/ │ │ │ │ │ │ ├── ApplyTicketOptionRequest.kt │ │ │ │ │ │ ├── CreateTicketItemRequest.kt │ │ │ │ │ │ ├── CreateTicketOptionRequest.kt │ │ │ │ │ │ └── UnapplyTicketOptionRequest.kt │ │ │ │ │ └── response/ │ │ │ │ │ ├── AppliedOptionGroupResponse.kt │ │ │ │ │ ├── ApplyTicketOptionResponse.kt │ │ │ │ │ ├── GetAppliedOptionGroupsResponse.kt │ │ │ │ │ ├── GetEventOptionsResponse.kt │ │ │ │ │ ├── GetEventTicketItemsResponse.kt │ │ │ │ │ ├── GetTicketItemOptionsResponse.kt │ │ │ │ │ ├── OptionGroupResponse.kt │ │ │ │ │ ├── OptionResponse.kt │ │ │ │ │ └── TicketItemResponse.kt │ │ │ │ ├── mapper/ │ │ │ │ │ ├── TicketItemMapper.kt │ │ │ │ │ └── TicketOptionMapper.kt │ │ │ │ └── service/ │ │ │ │ ├── ApplyTicketOptionUseCase.kt │ │ │ │ ├── CreateTicketItemUseCase.kt │ │ │ │ ├── CreateTicketOptionUseCase.kt │ │ │ │ ├── DeleteOptionGroupUseCase.kt │ │ │ │ ├── DeleteTicketItemUseCase.kt │ │ │ │ ├── GetAppliedOptionGroupsUseCase.kt │ │ │ │ ├── GetEventOptionsUseCase.kt │ │ │ │ ├── GetEventTicketItemsUseCase.kt │ │ │ │ ├── GetTicketOptionsUseCase.kt │ │ │ │ └── UnapplyTicketOptionUseCase.kt │ │ │ └── user/ │ │ │ ├── controller/ │ │ │ │ └── UserController.kt │ │ │ ├── model/ │ │ │ │ └── dto/ │ │ │ │ └── request/ │ │ │ │ └── ChangeNameRequest.kt │ │ │ └── service/ │ │ │ ├── ChangeNameUseCase.kt │ │ │ ├── MarketingUserUseCase.kt │ │ │ └── ReadUserUseCase.kt │ │ └── resources/ │ │ ├── application-local.yml │ │ └── application.yml │ └── test/ │ ├── java/ │ │ └── band/ │ │ └── gosrock/ │ │ ├── DuDoongApiServerApplication.java │ │ └── api/ │ │ ├── email/ │ │ │ └── RegisterUserEventHandlerTest.java │ │ └── supports/ │ │ ├── ApiIntegrateProfileResolver.java │ │ ├── ApiIntegrateSpringBootTest.java │ │ └── ApiIntegrateTestConfig.java │ ├── kotlin/ │ │ └── band/ │ │ └── gosrock/ │ │ └── api/ │ │ ├── auth/ │ │ │ └── service/ │ │ │ └── helper/ │ │ │ └── CookieHelperTest.kt │ │ ├── common/ │ │ │ └── aop/ │ │ │ └── hostRole/ │ │ │ └── HostRoleAopTest.kt │ │ ├── refund/ │ │ │ └── service/ │ │ │ └── CompleteRefundUseCaseTest.kt │ │ └── statistic/ │ │ └── query/ │ │ └── result/ │ │ ├── IssuedTicketStatisticTest.kt │ │ └── OrderStatisticTest.kt │ └── resources/ │ └── logback-test.xml ├── DuDoong-Batch/ │ ├── Dockerfile │ ├── build.gradle.kts │ └── src/ │ └── main/ │ ├── kotlin/ │ │ └── band/ │ │ └── gosrock/ │ │ ├── BatchApplication.kt │ │ ├── dto/ │ │ │ └── SettlementPDFDto.kt │ │ ├── helper/ │ │ │ ├── SettlementEmailHelper.kt │ │ │ ├── SettlementPdfHelper.kt │ │ │ ├── excel/ │ │ │ │ ├── ExcelOrderDto.kt │ │ │ │ └── ExcelOrderHelper.kt │ │ │ └── slack/ │ │ │ ├── SlackEventExpirationSender.kt │ │ │ └── SlackUserNotificationSender.kt │ │ ├── job/ │ │ │ ├── EventExpiration.kt │ │ │ ├── EventOrdersToExcel.kt │ │ │ ├── EventSettlementAlimTalkToHost.kt │ │ │ ├── EventSettlementEmailToAdmin.kt │ │ │ ├── EventSettlementEmailToHost.kt │ │ │ ├── EventSettlementPDF.kt │ │ │ ├── EventSummarySettlement.kt │ │ │ ├── EventTransactionSettlement.kt │ │ │ └── SlackUserStatistic.kt │ │ └── parameter/ │ │ ├── DateJobParameter.kt │ │ ├── DateTimeJobParameter.kt │ │ └── EventJobParameter.kt │ └── resources/ │ └── application.yml ├── DuDoong-Common/ │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── kotlin/ │ │ │ └── band/ │ │ │ └── gosrock/ │ │ │ └── common/ │ │ │ ├── DuDoongCommonApplication.kt │ │ │ ├── annotation/ │ │ │ │ ├── Adaptor.kt │ │ │ │ ├── ApiErrorCodeExample.kt │ │ │ │ ├── ApiErrorExceptionsExample.kt │ │ │ │ ├── CurrentUserId.kt │ │ │ │ ├── DateFormat.kt │ │ │ │ ├── DevelopOnlyApi.kt │ │ │ │ ├── DisableSwaggerSecurity.kt │ │ │ │ ├── DomainService.kt │ │ │ │ ├── Enum.kt │ │ │ │ ├── EnumClass.kt │ │ │ │ ├── ExceptionDoc.kt │ │ │ │ ├── ExplainError.kt │ │ │ │ ├── Helper.kt │ │ │ │ ├── Mapper.kt │ │ │ │ ├── Phone.kt │ │ │ │ ├── Policy.kt │ │ │ │ ├── Port.kt │ │ │ │ ├── UseCase.kt │ │ │ │ └── Validator.kt │ │ │ ├── aop/ │ │ │ │ └── ApiBlockingAspect.kt │ │ │ ├── config/ │ │ │ │ └── ConfigurationPropertiesConfig.kt │ │ │ ├── consts/ │ │ │ │ └── DuDoongStatic.kt │ │ │ ├── deserializer/ │ │ │ │ └── CustomEnumDeserializer.kt │ │ │ ├── dto/ │ │ │ │ ├── AccessTokenInfo.kt │ │ │ │ ├── ErrorReason.kt │ │ │ │ ├── ErrorResponse.kt │ │ │ │ ├── OIDCDecodePayload.kt │ │ │ │ └── SuccessResponse.kt │ │ │ ├── exception/ │ │ │ │ ├── BadFileExtensionException.kt │ │ │ │ ├── BadLockIdentifierException.kt │ │ │ │ ├── BaseErrorCode.kt │ │ │ │ ├── DuDoongCodeException.kt │ │ │ │ ├── DuDoongDynamicException.kt │ │ │ │ ├── ExpiredTokenException.kt │ │ │ │ ├── GlobalErrorCode.kt │ │ │ │ ├── InvalidTokenException.kt │ │ │ │ ├── NotAvailableRedissonLockException.kt │ │ │ │ ├── OtherServerBadRequestException.kt │ │ │ │ ├── OtherServerExpiredTokenException.kt │ │ │ │ ├── OtherServerForbiddenException.kt │ │ │ │ ├── OtherServerInternalSeverErrorException.kt │ │ │ │ ├── OtherServerNotFoundException.kt │ │ │ │ ├── OtherServerUnauthorizedException.kt │ │ │ │ ├── RefreshTokenExpiredException.kt │ │ │ │ ├── SecurityContextNotFoundException.kt │ │ │ │ └── TooManyRequestException.kt │ │ │ ├── helper/ │ │ │ │ └── SpringEnvironmentHelper.kt │ │ │ ├── interfaces/ │ │ │ │ └── SwaggerExampleExceptions.kt │ │ │ ├── jwt/ │ │ │ │ ├── JwtOIDCProvider.kt │ │ │ │ └── JwtTokenProvider.kt │ │ │ ├── properties/ │ │ │ │ ├── JwtProperties.kt │ │ │ │ ├── OauthProperties.kt │ │ │ │ └── TossPaymentsProperties.kt │ │ │ └── validator/ │ │ │ ├── EnumValidator.kt │ │ │ └── PhoneValidator.kt │ │ └── resources/ │ │ ├── application-common-local.yml │ │ └── application-common.yml │ └── test/ │ ├── kotlin/ │ │ └── band/ │ │ └── gosrock/ │ │ └── common/ │ │ ├── jwt/ │ │ │ └── JwtTokenProviderTest.kt │ │ └── properties/ │ │ ├── JwtPropertiesTest.kt │ │ └── TossPaymentsPropertiesTest.kt │ └── resources/ │ ├── application.yml │ └── logback-test.xml ├── DuDoong-Domain/ │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── kotlin/ │ │ │ └── band/ │ │ │ └── gosrock/ │ │ │ └── domain/ │ │ │ ├── DomainPackageLocation.kt │ │ │ ├── DuDoongDomainApplication.kt │ │ │ ├── common/ │ │ │ │ ├── alarm/ │ │ │ │ │ ├── EventSlackAlarm.kt │ │ │ │ │ ├── HostSlackAlarm.kt │ │ │ │ │ ├── OrderKakaoTalkAlarm.kt │ │ │ │ │ ├── SettlementKakaoTalkAlarm.kt │ │ │ │ │ └── UserKakaoTalkAlarm.kt │ │ │ │ ├── aop/ │ │ │ │ │ ├── domainEvent/ │ │ │ │ │ │ ├── DomainEvent.kt │ │ │ │ │ │ ├── EventPublisherAspect.kt │ │ │ │ │ │ └── Events.kt │ │ │ │ │ └── redissonLock/ │ │ │ │ │ ├── CallTransaction.kt │ │ │ │ │ ├── CallTransactionFactory.kt │ │ │ │ │ ├── RedissonCallNewTransaction.kt │ │ │ │ │ ├── RedissonCallSameTransaction.kt │ │ │ │ │ ├── RedissonLock.kt │ │ │ │ │ └── RedissonLockAop.kt │ │ │ │ ├── converter/ │ │ │ │ │ └── BigDecimalScale6WithBankersRoundingConverter.kt │ │ │ │ ├── dto/ │ │ │ │ │ └── ProfileViewDto.kt │ │ │ │ ├── events/ │ │ │ │ │ ├── event/ │ │ │ │ │ │ ├── EventContentChangeEvent.kt │ │ │ │ │ │ ├── EventCreationEvent.kt │ │ │ │ │ │ ├── EventDeletionEvent.kt │ │ │ │ │ │ └── EventStatusChangeEvent.kt │ │ │ │ │ ├── host/ │ │ │ │ │ │ ├── HostRegisterSlackEvent.kt │ │ │ │ │ │ ├── HostUserDisabledEvent.kt │ │ │ │ │ │ ├── HostUserInvitationEvent.kt │ │ │ │ │ │ ├── HostUserJoinEvent.kt │ │ │ │ │ │ └── HostUserRoleChangeEvent.kt │ │ │ │ │ ├── issuedTicket/ │ │ │ │ │ │ └── EntranceIssuedTicketEvent.kt │ │ │ │ │ ├── order/ │ │ │ │ │ │ ├── CreateOrderEvent.kt │ │ │ │ │ │ ├── DoneOrderEvent.kt │ │ │ │ │ │ └── WithDrawOrderEvent.kt │ │ │ │ │ └── user/ │ │ │ │ │ └── UserRegisterEvent.kt │ │ │ │ ├── model/ │ │ │ │ │ └── BaseTimeEntity.kt │ │ │ │ ├── util/ │ │ │ │ │ ├── PhoneNumberInstance.kt │ │ │ │ │ ├── QueryDslUtil.kt │ │ │ │ │ └── SliceUtil.kt │ │ │ │ └── vo/ │ │ │ │ ├── AccountInfoVo.kt │ │ │ │ ├── CommentInfoVo.kt │ │ │ │ ├── DateTimePeriod.kt │ │ │ │ ├── EventBasicVo.kt │ │ │ │ ├── EventDetailVo.kt │ │ │ │ ├── EventInfoVo.kt │ │ │ │ ├── EventPlaceVo.kt │ │ │ │ ├── EventProfileVo.kt │ │ │ │ ├── HostInfoVo.kt │ │ │ │ ├── HostProfileVo.kt │ │ │ │ ├── HostUserVo.kt │ │ │ │ ├── ImageVo.kt │ │ │ │ ├── IssuedCouponInfoVo.kt │ │ │ │ ├── IssuedTicketInfoVo.kt │ │ │ │ ├── IssuedTicketOptionAnswerVo.kt │ │ │ │ ├── Money.kt │ │ │ │ ├── OptionAnswerVo.kt │ │ │ │ ├── PhoneNumberVo.kt │ │ │ │ ├── RefundInfoVo.kt │ │ │ │ ├── UserInfoVo.kt │ │ │ │ └── UserProfileVo.kt │ │ │ ├── config/ │ │ │ │ ├── CustomAsyncExceptionHandler.kt │ │ │ │ ├── EnableAsyncConfig.kt │ │ │ │ ├── JpaConfig.kt │ │ │ │ ├── MdcTaskDecorator.kt │ │ │ │ └── QueryDslConfig.kt │ │ │ └── domains/ │ │ │ ├── cart/ │ │ │ │ ├── adaptor/ │ │ │ │ │ └── CartAdaptor.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── Cart.kt │ │ │ │ │ ├── CartLineItem.kt │ │ │ │ │ ├── CartOptionAnswer.kt │ │ │ │ │ └── CartValidator.kt │ │ │ │ ├── exception/ │ │ │ │ │ ├── CartErrorCode.kt │ │ │ │ │ ├── CartInvalidOptionAnswerException.kt │ │ │ │ │ ├── CartItemNotOneTypeException.kt │ │ │ │ │ ├── CartLineItemNotFoundException.kt │ │ │ │ │ ├── CartNotAnswerAllOptionGroupException.kt │ │ │ │ │ └── CartNotFoundException.kt │ │ │ │ ├── repository/ │ │ │ │ │ ├── CartCustomRepository.kt │ │ │ │ │ ├── CartCustomRepositoryImpl.kt │ │ │ │ │ └── CartRepository.kt │ │ │ │ └── service/ │ │ │ │ ├── CartDomainService.kt │ │ │ │ └── DoneOrderEventHandler.kt │ │ │ ├── comment/ │ │ │ │ ├── adaptor/ │ │ │ │ │ └── CommentAdaptor.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── Comment.kt │ │ │ │ │ └── CommentStatus.kt │ │ │ │ ├── dto/ │ │ │ │ │ └── condition/ │ │ │ │ │ └── CommentCondition.kt │ │ │ │ ├── exception/ │ │ │ │ │ ├── CommentAlreadyDeleteException.kt │ │ │ │ │ ├── CommentErrorCode.kt │ │ │ │ │ ├── CommentNotFoundException.kt │ │ │ │ │ ├── CommentNotMatchEventException.kt │ │ │ │ │ └── RetrieveRandomCommentNotFoundException.kt │ │ │ │ ├── repository/ │ │ │ │ │ ├── CommentCustomRepository.kt │ │ │ │ │ ├── CommentCustomRepositoryImpl.kt │ │ │ │ │ └── CommentRepository.kt │ │ │ │ └── service/ │ │ │ │ └── CommentDomainService.kt │ │ │ ├── coupon/ │ │ │ │ ├── adaptor/ │ │ │ │ │ ├── CouponCampaignAdaptor.kt │ │ │ │ │ └── IssuedCouponAdaptor.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── ApplyTarget.kt │ │ │ │ │ ├── CouponCampaign.kt │ │ │ │ │ ├── CouponStockInfo.kt │ │ │ │ │ ├── DiscountType.kt │ │ │ │ │ └── IssuedCoupon.kt │ │ │ │ ├── exception/ │ │ │ │ │ ├── AlreadyExistCouponCampaignException.kt │ │ │ │ │ ├── AlreadyIssuedCouponException.kt │ │ │ │ │ ├── AlreadyRecoveredCouponException.kt │ │ │ │ │ ├── AlreadyUsedCouponException.kt │ │ │ │ │ ├── CouponCampaignNotFoundException.kt │ │ │ │ │ ├── CouponErrorCode.kt │ │ │ │ │ ├── CouponNotFoundException.kt │ │ │ │ │ ├── NoCouponStockLeftException.kt │ │ │ │ │ ├── NotIssuingCouponPeriodException.kt │ │ │ │ │ ├── NotMyCouponException.kt │ │ │ │ │ ├── SupplyLessThenDiscountException.kt │ │ │ │ │ ├── SupplyLessThenMinimumException.kt │ │ │ │ │ └── WrongDiscountAmountException.kt │ │ │ │ ├── repository/ │ │ │ │ │ ├── CouponCampaignRepository.kt │ │ │ │ │ ├── IssuedCouponCustomRepository.kt │ │ │ │ │ ├── IssuedCouponCustomRepositoryImpl.kt │ │ │ │ │ └── IssuedCouponRepository.kt │ │ │ │ └── service/ │ │ │ │ ├── CreateCouponCampaignDomainService.kt │ │ │ │ ├── CreateIssuedCouponDomainService.kt │ │ │ │ ├── RecoveryCouponService.kt │ │ │ │ ├── UseCouponService.kt │ │ │ │ └── handler/ │ │ │ │ ├── CreateOrderCouponHandler.kt │ │ │ │ └── WithDrawOrderCouponHandler.kt │ │ │ ├── event/ │ │ │ │ ├── adaptor/ │ │ │ │ │ └── EventAdaptor.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── Event.kt │ │ │ │ │ ├── EventBasic.kt │ │ │ │ │ ├── EventDetail.kt │ │ │ │ │ ├── EventDetailImage.kt │ │ │ │ │ ├── EventPlace.kt │ │ │ │ │ └── EventStatus.kt │ │ │ │ ├── exception/ │ │ │ │ │ ├── AlreadyCalculatingStatusException.kt │ │ │ │ │ ├── AlreadyCloseStatusException.kt │ │ │ │ │ ├── AlreadyDeletedStatusException.kt │ │ │ │ │ ├── AlreadyExistEventUrlNameException.kt │ │ │ │ │ ├── AlreadyOpenStatusException.kt │ │ │ │ │ ├── AlreadyPreparingStatusException.kt │ │ │ │ │ ├── CannotDeleteByIssuedTicketException.kt │ │ │ │ │ ├── CannotDeleteByOpenEventException.kt │ │ │ │ │ ├── CannotModifyOpenEventException.kt │ │ │ │ │ ├── CannotOpenEventException.kt │ │ │ │ │ ├── EventCannotEndBeforeStartException.kt │ │ │ │ │ ├── EventErrorCode.kt │ │ │ │ │ ├── EventNotFoundException.kt │ │ │ │ │ ├── EventNotOpenException.kt │ │ │ │ │ ├── EventOpenTimeExpiredException.kt │ │ │ │ │ ├── EventTicketingTimeIsPassedException.kt │ │ │ │ │ ├── HostNotAuthEventException.kt │ │ │ │ │ ├── InvalidEventStatusTransitionException.kt │ │ │ │ │ └── UseOtherApiException.kt │ │ │ │ ├── repository/ │ │ │ │ │ ├── EventCustomRepository.kt │ │ │ │ │ ├── EventCustomRepositoryImpl.kt │ │ │ │ │ ├── EventDetailImageRepository.kt │ │ │ │ │ └── EventRepository.kt │ │ │ │ └── service/ │ │ │ │ └── EventService.kt │ │ │ ├── example/ │ │ │ │ ├── domain/ │ │ │ │ │ └── ExampleEntity.kt │ │ │ │ ├── repository/ │ │ │ │ │ └── ExampleRepository.kt │ │ │ │ └── service/ │ │ │ │ └── ExampleDomainService.kt │ │ │ ├── host/ │ │ │ │ ├── adaptor/ │ │ │ │ │ └── HostAdaptor.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── Host.kt │ │ │ │ │ ├── HostProfile.kt │ │ │ │ │ ├── HostRole.kt │ │ │ │ │ └── HostUser.kt │ │ │ │ ├── exception/ │ │ │ │ │ ├── AlreadyJoinedHostException.kt │ │ │ │ │ ├── CannotModifyMasterHostRoleException.kt │ │ │ │ │ ├── DuplicateSlackUrlException.kt │ │ │ │ │ ├── ForbiddenHostException.kt │ │ │ │ │ ├── HostErrorCode.kt │ │ │ │ │ ├── HostNotFoundException.kt │ │ │ │ │ ├── HostUserNotFoundException.kt │ │ │ │ │ ├── InvalidSlackUrlException.kt │ │ │ │ │ ├── NotAcceptedHostException.kt │ │ │ │ │ ├── NotManagerHostException.kt │ │ │ │ │ ├── NotMasterHostException.kt │ │ │ │ │ └── NotPartnerHostException.kt │ │ │ │ ├── repository/ │ │ │ │ │ ├── HostCustomRepository.kt │ │ │ │ │ ├── HostCustomRepositoryImpl.kt │ │ │ │ │ └── HostRepository.kt │ │ │ │ └── service/ │ │ │ │ └── HostService.kt │ │ │ ├── issuedTicket/ │ │ │ │ ├── adaptor/ │ │ │ │ │ ├── IssuedTicketAdaptor.kt │ │ │ │ │ └── IssuedTicketOptionAnswerAdaptor.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── IssuedTicket.kt │ │ │ │ │ ├── IssuedTicketCancelReason.kt │ │ │ │ │ ├── IssuedTicketItemInfoVo.kt │ │ │ │ │ ├── IssuedTicketOptionAnswer.kt │ │ │ │ │ ├── IssuedTicketStatus.kt │ │ │ │ │ ├── IssuedTicketUserInfoVo.kt │ │ │ │ │ ├── IssuedTickets.kt │ │ │ │ │ └── IssuedTicketsStage.kt │ │ │ │ ├── dto/ │ │ │ │ │ ├── condition/ │ │ │ │ │ │ └── IssuedTicketCondition.kt │ │ │ │ │ ├── request/ │ │ │ │ │ │ ├── CreateIssuedTicketDTO.kt │ │ │ │ │ │ ├── CreateIssuedTicketForDevDTO.kt │ │ │ │ │ │ ├── CreateIssuedTicketRequestDTOs.kt │ │ │ │ │ │ └── CreateIssuedTicketRequestForDev.kt │ │ │ │ │ └── response/ │ │ │ │ │ ├── CreateIssuedTicketResponse.kt │ │ │ │ │ ├── IssuedTicketDTO.kt │ │ │ │ │ └── IssuedTicketPageDTO.kt │ │ │ │ ├── exception/ │ │ │ │ │ ├── CanNotCancelEntranceException.kt │ │ │ │ │ ├── CanNotCancelException.kt │ │ │ │ │ ├── CanNotEntranceException.kt │ │ │ │ │ ├── IssuedTicketAlreadyEntranceException.kt │ │ │ │ │ ├── IssuedTicketErrorCode.kt │ │ │ │ │ ├── IssuedTicketNotFoundException.kt │ │ │ │ │ ├── IssuedTicketNotMatchedEventException.kt │ │ │ │ │ └── IssuedTicketUserNotMatchedException.kt │ │ │ │ ├── repository/ │ │ │ │ │ ├── IssuedTicketCustomRepository.kt │ │ │ │ │ ├── IssuedTicketCustomRepositoryImpl.kt │ │ │ │ │ ├── IssuedTicketOptionAnswerRepository.kt │ │ │ │ │ ├── IssuedTicketRepository.kt │ │ │ │ │ └── condition/ │ │ │ │ │ └── FindEventIssuedTicketsCondition.kt │ │ │ │ ├── service/ │ │ │ │ │ ├── IssuedTicketDomainService.kt │ │ │ │ │ ├── OrderToIssuedTicketService.kt │ │ │ │ │ └── handlers/ │ │ │ │ │ ├── OrderEventHandler.kt │ │ │ │ │ └── WithdrawOrderEventHandler.kt │ │ │ │ └── validator/ │ │ │ │ └── IssuedTicketValidator.kt │ │ │ ├── order/ │ │ │ │ ├── adaptor/ │ │ │ │ │ └── OrderAdaptor.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── Order.kt │ │ │ │ │ ├── OrderCouponVo.kt │ │ │ │ │ ├── OrderItemVo.kt │ │ │ │ │ ├── OrderLineItem.kt │ │ │ │ │ ├── OrderMethod.kt │ │ │ │ │ ├── OrderOptionAnswer.kt │ │ │ │ │ ├── OrderStatus.kt │ │ │ │ │ ├── PaymentInfo.kt │ │ │ │ │ ├── PaymentMethod.kt │ │ │ │ │ ├── PgPaymentInfo.kt │ │ │ │ │ ├── RefundStatus.kt │ │ │ │ │ └── validator/ │ │ │ │ │ └── OrderValidator.kt │ │ │ │ ├── exception/ │ │ │ │ │ ├── ApproveWaitingOrderPurchaseLimitException.kt │ │ │ │ │ ├── CanNotApproveDeletedUserOrderException.kt │ │ │ │ │ ├── CanNotCancelOrderException.kt │ │ │ │ │ ├── CanNotRefundOrderException.kt │ │ │ │ │ ├── CanNotRefuseOrderException.kt │ │ │ │ │ ├── InvalidOrderException.kt │ │ │ │ │ ├── LessThanMinmumPaymentOrderException.kt │ │ │ │ │ ├── NotApprovalOrderException.kt │ │ │ │ │ ├── NotFreeOrderException.kt │ │ │ │ │ ├── NotOwnerOrderException.kt │ │ │ │ │ ├── NotPaymentOrderException.kt │ │ │ │ │ ├── NotPendingOrderException.kt │ │ │ │ │ ├── NotRefundAvailableDateOrderException.kt │ │ │ │ │ ├── NotSupportedOrderMethodException.kt │ │ │ │ │ ├── OrdeItemNotOneTypeException.kt │ │ │ │ │ ├── OrderErrorCode.kt │ │ │ │ │ ├── OrderItemOptionChangedException.kt │ │ │ │ │ ├── OrderLineNotFountException.kt │ │ │ │ │ └── OrderNotFoundException.kt │ │ │ │ ├── repository/ │ │ │ │ │ ├── OrderCustomRepository.kt │ │ │ │ │ ├── OrderCustomRepositoryImpl.kt │ │ │ │ │ ├── OrderRepository.kt │ │ │ │ │ └── condition/ │ │ │ │ │ ├── AdminTableOrderFilterType.kt │ │ │ │ │ ├── AdminTableSearchType.kt │ │ │ │ │ ├── FindEventOrdersCondition.kt │ │ │ │ │ └── FindMyPageOrderCondition.kt │ │ │ │ └── service/ │ │ │ │ ├── CreateOrderService.kt │ │ │ │ ├── FreeOrderService.kt │ │ │ │ ├── OrderApproveService.kt │ │ │ │ ├── OrderConfirmService.kt │ │ │ │ ├── OrderFactory.kt │ │ │ │ ├── WithdrawOrderService.kt │ │ │ │ ├── WithdrawPaymentService.kt │ │ │ │ └── handler/ │ │ │ │ ├── ConfirmOrderFailHandler.kt │ │ │ │ └── WithDrawOrderHandler.kt │ │ │ ├── settlement/ │ │ │ │ ├── adaptor/ │ │ │ │ │ ├── EventSettlementAdaptor.kt │ │ │ │ │ └── TransactionSettlementAdaptor.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── EventSettlement.kt │ │ │ │ │ ├── EventSettlementStatus.kt │ │ │ │ │ ├── SettlementFeeVo.kt │ │ │ │ │ └── TransactionSettlement.kt │ │ │ │ ├── repository/ │ │ │ │ │ ├── EventSettlementRepository.kt │ │ │ │ │ └── TransactionSettlementRepository.kt │ │ │ │ └── service/ │ │ │ │ └── EventSettlementDomainService.kt │ │ │ ├── ticket_item/ │ │ │ │ ├── adaptor/ │ │ │ │ │ ├── OptionAdaptor.kt │ │ │ │ │ ├── OptionGroupAdaptor.kt │ │ │ │ │ └── TicketItemAdaptor.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── ItemOptionGroup.kt │ │ │ │ │ ├── Option.kt │ │ │ │ │ ├── OptionGroup.kt │ │ │ │ │ ├── OptionGroupStatus.kt │ │ │ │ │ ├── OptionGroupType.kt │ │ │ │ │ ├── TicketItem.kt │ │ │ │ │ ├── TicketItemStatus.kt │ │ │ │ │ ├── TicketPayType.kt │ │ │ │ │ └── TicketType.kt │ │ │ │ ├── exception/ │ │ │ │ │ ├── DuplicatedItemOptionGroupException.kt │ │ │ │ │ ├── EmptyAccountInfoException.kt │ │ │ │ │ ├── ForbiddenOptionChangeException.kt │ │ │ │ │ ├── ForbiddenOptionGroupDeleteException.kt │ │ │ │ │ ├── ForbiddenOptionPriceException.kt │ │ │ │ │ ├── ForbiddenTicketItemDeleteException.kt │ │ │ │ │ ├── InvalidOptionGroupException.kt │ │ │ │ │ ├── InvalidOptionPriceException.kt │ │ │ │ │ ├── InvalidPartnerException.kt │ │ │ │ │ ├── InvalidTicketItemException.kt │ │ │ │ │ ├── InvalidTicketPriceException.kt │ │ │ │ │ ├── InvalidTicketTypeException.kt │ │ │ │ │ ├── NotAppliedItemOptionGroupException.kt │ │ │ │ │ ├── NotCorrectOptionAnswerException.kt │ │ │ │ │ ├── OptionGroupNotFoundException.kt │ │ │ │ │ ├── OptionNotFoundException.kt │ │ │ │ │ ├── TicketItemErrorCode.kt │ │ │ │ │ ├── TicketItemNotFoundException.kt │ │ │ │ │ ├── TicketItemQuantityException.kt │ │ │ │ │ ├── TicketItemQuantityLackException.kt │ │ │ │ │ ├── TicketItemQuantityLargeException.kt │ │ │ │ │ └── TicketPurchaseLimitException.kt │ │ │ │ ├── repository/ │ │ │ │ │ ├── OptionGroupRepository.kt │ │ │ │ │ ├── OptionRepository.kt │ │ │ │ │ └── TicketItemRepository.kt │ │ │ │ └── service/ │ │ │ │ ├── ItemOptionGroupService.kt │ │ │ │ ├── TicketItemService.kt │ │ │ │ └── TicketOptionService.kt │ │ │ └── user/ │ │ │ ├── adaptor/ │ │ │ │ ├── RefreshTokenAdaptor.kt │ │ │ │ └── UserAdaptor.kt │ │ │ ├── domain/ │ │ │ │ ├── AccountRole.kt │ │ │ │ ├── AccountState.kt │ │ │ │ ├── OauthInfo.kt │ │ │ │ ├── OauthProvider.kt │ │ │ │ ├── Profile.kt │ │ │ │ ├── RefreshTokenEntity.kt │ │ │ │ └── User.kt │ │ │ ├── exception/ │ │ │ │ ├── AlreadyDeletedUserException.kt │ │ │ │ ├── AlreadySignUpUserException.kt │ │ │ │ ├── EmptyPhoneNumException.kt │ │ │ │ ├── ForbiddenUserException.kt │ │ │ │ ├── UserErrorCode.kt │ │ │ │ ├── UserNotFoundException.kt │ │ │ │ └── UserPhoneNumberInvalidException.kt │ │ │ ├── repository/ │ │ │ │ ├── RefreshTokenRepository.kt │ │ │ │ └── UserRepository.kt │ │ │ └── service/ │ │ │ └── UserDomainService.kt │ │ └── resources/ │ │ ├── application-domain-local.yml │ │ └── application-domain.yml │ └── test/ │ ├── java/ │ │ └── band/ │ │ └── gosrock/ │ │ ├── domain/ │ │ │ ├── CunCurrencyExecutorService.java │ │ │ ├── DisableDomainEvent.java │ │ │ ├── DisableRedissonLock.java │ │ │ ├── DomainIntegrateProfileResolver.java │ │ │ ├── DomainIntegrateSpringBootTest.java │ │ │ ├── DomainIntegrateTestConfig.java │ │ │ ├── common/ │ │ │ │ ├── aop/ │ │ │ │ │ └── redissonLock/ │ │ │ │ │ └── RedissonLockAopTest.java │ │ │ │ └── vo/ │ │ │ │ └── RefundInfoVoTest.java │ │ │ └── domains/ │ │ │ ├── cart/ │ │ │ │ └── domain/ │ │ │ │ ├── CartLineItemTest.java │ │ │ │ ├── CartOptionAnswerTest.java │ │ │ │ ├── CartTest.java │ │ │ │ └── CartValidatorTest.java │ │ │ ├── coupon/ │ │ │ │ └── domain/ │ │ │ │ ├── CouponCampaignTest.java │ │ │ │ ├── CouponStockInfoTest.java │ │ │ │ └── IssuedCouponTest.java │ │ │ ├── event/ │ │ │ │ └── EventTest.java │ │ │ ├── host/ │ │ │ │ ├── domain/ │ │ │ │ │ ├── HostProfileTest.java │ │ │ │ │ ├── HostRoleTest.java │ │ │ │ │ ├── HostTest.java │ │ │ │ │ └── HostUserTest.java │ │ │ │ └── service/ │ │ │ │ ├── HostServiceConcurrencyFailureTest.java │ │ │ │ └── HostServiceConcurrencyTest.java │ │ │ ├── issuedTicket/ │ │ │ │ ├── adaptor/ │ │ │ │ │ └── IssuedTicketAdaptorTest.java │ │ │ │ ├── domain/ │ │ │ │ │ ├── IssuedTicketItemInfoVoTest.java │ │ │ │ │ ├── IssuedTicketOptionAnswerTest.java │ │ │ │ │ ├── IssuedTicketTest.java │ │ │ │ │ ├── IssuedTicketUserInfoVoTest.java │ │ │ │ │ └── validator/ │ │ │ │ │ └── IssuedTicketValidatorTest.java │ │ │ │ └── service/ │ │ │ │ ├── IssuedTicketDomainServiceTest.java │ │ │ │ └── handlers/ │ │ │ │ ├── OrderEventHandlerTest.java │ │ │ │ └── WithdrawOrderEventHandlerTest.java │ │ │ └── order/ │ │ │ ├── domain/ │ │ │ │ ├── OrderLineItemTest.java │ │ │ │ ├── OrderOptionAnswerTest.java │ │ │ │ ├── OrderTest.java │ │ │ │ └── validator/ │ │ │ │ └── OrderValidatorTest.java │ │ │ └── service/ │ │ │ ├── OrderApproveServiceConcurrencyFailTest.java │ │ │ ├── OrderApproveServiceConcurrencyTest.java │ │ │ ├── OrderApproveServiceTest.java │ │ │ ├── WithdrawOrderServiceTest.java │ │ │ └── handler/ │ │ │ └── WithDrawOrderHandlerTest.java │ │ └── domains/ │ │ └── user/ │ │ └── domain/ │ │ ├── OauthInfoTest.java │ │ └── UserTest.java │ ├── kotlin/ │ │ └── band/ │ │ └── gosrock/ │ │ └── domain/ │ │ ├── common/ │ │ │ └── vo/ │ │ │ ├── DateTimePeriodTest.kt │ │ │ └── MoneyTest.kt │ │ └── domains/ │ │ ├── cart/ │ │ │ └── service/ │ │ │ └── DoneOrderEventHandlerTest.kt │ │ ├── event/ │ │ │ └── EventStatusTransitionTest.kt │ │ ├── host/ │ │ │ └── HostTransferMasterTest.kt │ │ ├── issuedTicket/ │ │ │ ├── IssuedTicketStatusTransitionTest.kt │ │ │ ├── adaptor/ │ │ │ │ └── IssuedTicketAdaptorTest.kt │ │ │ └── domain/ │ │ │ └── IssuedTicketItemInfoVoTest.kt │ │ ├── order/ │ │ │ ├── OrderPaymentCalculationTest.kt │ │ │ ├── OrderRefundTest.kt │ │ │ └── service/ │ │ │ └── handler/ │ │ │ └── ConfirmOrderFailHandlerTest.kt │ │ └── user/ │ │ └── domain/ │ │ └── ProfileTest.kt │ └── resources/ │ ├── application-test.yml │ ├── logback-test.xml │ └── mockito-extensions/ │ └── org.mockito.plugins.MockMaker ├── DuDoong-Infrastructure/ │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── kotlin/ │ │ │ └── band/ │ │ │ └── gosrock/ │ │ │ └── infrastructure/ │ │ │ ├── DuDoongInfraApplication.kt │ │ │ ├── config/ │ │ │ │ ├── alilmTalk/ │ │ │ │ │ ├── NcpHelper.kt │ │ │ │ │ └── dto/ │ │ │ │ │ ├── AlimTalkEventInfo.kt │ │ │ │ │ ├── AlimTalkOrderInfo.kt │ │ │ │ │ ├── AlimTalkUserInfo.kt │ │ │ │ │ └── MessageDto.kt │ │ │ │ ├── feign/ │ │ │ │ │ └── FeignCommonConfig.kt │ │ │ │ ├── mail/ │ │ │ │ │ └── dto/ │ │ │ │ │ ├── EmailEventInfo.kt │ │ │ │ │ ├── EmailIssuedTicketInfo.kt │ │ │ │ │ ├── EmailOrderInfo.kt │ │ │ │ │ └── EmailUserInfo.kt │ │ │ │ ├── pdf/ │ │ │ │ │ ├── B64ImgReplacedElementFactory.kt │ │ │ │ │ └── PdfRender.kt │ │ │ │ ├── redis/ │ │ │ │ │ ├── RedisCacheConfig.kt │ │ │ │ │ ├── RedisConfig.kt │ │ │ │ │ └── RedissonConfig.kt │ │ │ │ ├── s3/ │ │ │ │ │ ├── ImageFileExtension.kt │ │ │ │ │ ├── ImageUrlDto.kt │ │ │ │ │ ├── S3Config.kt │ │ │ │ │ ├── S3PrivateFileService.kt │ │ │ │ │ └── S3UploadPresignedUrlService.kt │ │ │ │ ├── ses/ │ │ │ │ │ ├── AwsSesConfig.kt │ │ │ │ │ ├── AwsSesUtils.kt │ │ │ │ │ ├── RawEmailAttachmentDto.kt │ │ │ │ │ └── SendRawEmailDto.kt │ │ │ │ └── slack/ │ │ │ │ ├── SlackAsyncErrorSender.kt │ │ │ │ ├── SlackErrorNotificationProvider.kt │ │ │ │ ├── SlackHelper.kt │ │ │ │ ├── SlackMessageProvider.kt │ │ │ │ ├── SlackServiceNotificationProvider.kt │ │ │ │ └── config/ │ │ │ │ └── SlackApiConfig.kt │ │ │ └── outer/ │ │ │ └── api/ │ │ │ ├── BaseFeignClientPackage.kt │ │ │ ├── alimTalk/ │ │ │ │ ├── client/ │ │ │ │ │ └── NcpClient.kt │ │ │ │ └── config/ │ │ │ │ ├── NcpConfig.kt │ │ │ │ └── NcpErrorDecoder.kt │ │ │ ├── oauth/ │ │ │ │ ├── client/ │ │ │ │ │ ├── KakaoInfoClient.kt │ │ │ │ │ └── KakaoOauthClient.kt │ │ │ │ ├── config/ │ │ │ │ │ ├── KakaoInfoConfig.kt │ │ │ │ │ ├── KakaoInfoErrorDecoder.kt │ │ │ │ │ ├── KakaoKauthConfig.kt │ │ │ │ │ └── KauthErrorDecoder.kt │ │ │ │ ├── dto/ │ │ │ │ │ ├── KakaoInformationResponse.kt │ │ │ │ │ ├── KakaoKauthErrorResponse.kt │ │ │ │ │ ├── KakaoTokenResponse.kt │ │ │ │ │ ├── OIDCPublicKeyDto.kt │ │ │ │ │ ├── OIDCPublicKeysResponse.kt │ │ │ │ │ └── UnlinkKaKaoTarget.kt │ │ │ │ └── exception/ │ │ │ │ └── KakaoKauthErrorCode.kt │ │ │ └── tossPayments/ │ │ │ ├── client/ │ │ │ │ ├── PaymentsCancelClient.kt │ │ │ │ ├── PaymentsConfirmClient.kt │ │ │ │ ├── PaymentsCreateClient.kt │ │ │ │ ├── SettlementClient.kt │ │ │ │ └── TransactionGetClient.kt │ │ │ ├── config/ │ │ │ │ ├── FeignTossConfig.kt │ │ │ │ ├── PaymentCancelErrorDecoder.kt │ │ │ │ ├── PaymentConfirmErrorDecoder.kt │ │ │ │ ├── PaymentCreateErrorDecoder.kt │ │ │ │ ├── PaymentsCancelConfig.kt │ │ │ │ ├── PaymentsConfirmConfig.kt │ │ │ │ ├── PaymentsCreateConfig.kt │ │ │ │ ├── TossErrorDecoder.kt │ │ │ │ ├── TossHeaderConfig.kt │ │ │ │ ├── TransactionGetConfig.kt │ │ │ │ └── TransactionGetErrorDecoder.kt │ │ │ ├── dto/ │ │ │ │ ├── request/ │ │ │ │ │ ├── CancelPaymentsRequest.kt │ │ │ │ │ ├── ConfirmPaymentsRequest.kt │ │ │ │ │ └── CreatePaymentsRequest.kt │ │ │ │ └── response/ │ │ │ │ ├── CardAcquireStatus.kt │ │ │ │ ├── CardCode.kt │ │ │ │ ├── EasyPayCode.kt │ │ │ │ ├── FeeCode.kt │ │ │ │ ├── PaymentCheckout.kt │ │ │ │ ├── PaymentEasyPay.kt │ │ │ │ ├── PaymentReceipt.kt │ │ │ │ ├── PaymentStatus.kt │ │ │ │ ├── PaymentsCancels.kt │ │ │ │ ├── PaymentsCard.kt │ │ │ │ ├── PaymentsCardPromotion.kt │ │ │ │ ├── PaymentsCashReceipt.kt │ │ │ │ ├── PaymentsFailure.kt │ │ │ │ ├── PaymentsResponse.kt │ │ │ │ ├── SettlementFeeDto.kt │ │ │ │ ├── SettlementResponse.kt │ │ │ │ └── TossPaymentMethod.kt │ │ │ └── exception/ │ │ │ ├── PaymentsCancelErrorCode.kt │ │ │ ├── PaymentsConfirmErrorCode.kt │ │ │ ├── PaymentsCreateErrorCode.kt │ │ │ ├── PaymentsEnumNotMatchException.kt │ │ │ ├── PaymentsUnHandleException.kt │ │ │ ├── TossPaymentsErrorDto.kt │ │ │ └── TransactionGetErrorCode.kt │ │ └── resources/ │ │ ├── application-infrastructure.yml │ │ └── templates/ │ │ ├── entranceIssuedTicket.html │ │ ├── eventSettlement.html │ │ ├── fragments/ │ │ │ ├── button.html │ │ │ ├── divider.html │ │ │ ├── footer.html │ │ │ ├── header.html │ │ │ ├── issuedTicketInfo.html │ │ │ ├── orderInfo.html │ │ │ ├── subTilte.html │ │ │ └── title.html │ │ ├── hostInvite.html │ │ ├── layouts/ │ │ │ └── mailFormat.html │ │ ├── orderApproveConfirm.html │ │ ├── orderApproveRequest.html │ │ ├── orderPaymentDone.html │ │ ├── orderWithdrawCancel.html │ │ ├── orderWithdrawRefund.html │ │ ├── settlement.html │ │ └── signUp.html │ └── test/ │ ├── java/ │ │ └── band/ │ │ └── gosrock/ │ │ └── infrastructure/ │ │ ├── InfraIntegrateProfileResolver.java │ │ ├── InfraIntegrateSpringBootTest.java │ │ ├── InfraIntegrateTestConfig.java │ │ ├── config/ │ │ │ ├── redis/ │ │ │ │ └── AutoConfigureTestFeign.java │ │ │ └── s3/ │ │ │ └── S3UploadPresignedUrlServiceTest.java │ │ └── outer/ │ │ └── api/ │ │ └── tossPayments/ │ │ ├── client/ │ │ │ ├── PaymentsCancelClientTest.java │ │ │ ├── TossPaymentsClientTest.java │ │ │ └── TossSettlementClientTest.java │ │ └── config/ │ │ └── PaymentConfirmErrorDecoderTest.java │ └── resources/ │ ├── application.yml │ ├── logback-test.xml │ └── payload/ │ └── settlement-response.json ├── LICENSE ├── README.md ├── build.gradle.kts ├── docker-compose.yml ├── e2e-tests/ │ ├── .gitignore │ ├── README.md │ ├── conftest.py │ ├── requirements.txt │ ├── test_01_auth.py │ ├── test_02_host.py │ ├── test_03_event.py │ ├── test_04_ticket_item.py │ ├── test_05_order_flow.py │ ├── test_06_issued_ticket.py │ ├── test_07_comment.py │ ├── test_08_refund.py │ ├── test_09_error_cases.py │ ├── test_10_event_lifecycle.py │ ├── test_11_multi_user.py │ ├── test_12_host_management.py │ ├── test_13_user_profile.py │ ├── test_14_ticket_stock.py │ ├── test_15_event_crud.py │ ├── test_16_event_open_conditions.py │ ├── test_17_event_modification_rules.py │ ├── test_18_event_status_matrix.py │ ├── test_19_host_invite.py │ ├── test_20_ticket_options.py │ ├── test_21_dudoong_ticket.py │ ├── test_22_order_detail_verification.py │ ├── test_23_refund_edge_cases.py │ ├── test_24_admin_features.py │ ├── test_25_coupon_flow.py │ ├── test_26_order_edge_cases.py │ ├── test_27_host_role_change.py │ ├── test_28_ticket_quantity_public.py │ ├── test_29_order_cancel.py │ ├── test_30_order_before_open.py │ ├── test_31_admin_auth_role.py │ ├── test_32_admin_token_separation.py │ ├── test_33_host_role_authorization.py │ ├── test_34_admin_usecase_authorization.py │ ├── test_35_user_nickname.py │ ├── test_36_host_master_transfer.py │ ├── test_37_order_cancel_reason.py │ └── test_38_refund_api.py ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── lombok.config ├── scripts/ │ └── local-start.sh └── settings.gradle.kts