diff --git a/src/main/java/org/myteam/server/admin/dto/request/ContentRequestDto.java b/src/main/java/org/myteam/server/admin/dto/request/ContentRequestDto.java index 3b5078a7..f342d22c 100644 --- a/src/main/java/org/myteam/server/admin/dto/request/ContentRequestDto.java +++ b/src/main/java/org/myteam/server/admin/dto/request/ContentRequestDto.java @@ -78,10 +78,16 @@ public static class RequestDetail { @NotNull(message ="contentid는 비면안됩니다.") @Schema(description = "필수값입니다.") private Long contentId; + @Schema(description = "관리자단 대시보드의 최신데이터 알람에서 신고목록을 클릭해서 넘어올떄만 넣어주세요") + private Long reportId; + @Schema(description = "관리자단 대시보드의 최신데이터 알람에서 넘어올경우에만 넣어주세요") + private String alarmCheck; @Builder - public RequestDetail(StaticDataType staticDataType, Long contentId) { + public RequestDetail(StaticDataType staticDataType, Long contentId,Long reportId,String alarmCheck) { this.staticDataType = staticDataType; this.contentId = contentId; + this.reportId=reportId; + this.alarmCheck=alarmCheck; } } diff --git a/src/main/java/org/myteam/server/admin/dto/request/ImproveRequestDto.java b/src/main/java/org/myteam/server/admin/dto/request/ImproveRequestDto.java index bcf98d48..d3a60416 100644 --- a/src/main/java/org/myteam/server/admin/dto/request/ImproveRequestDto.java +++ b/src/main/java/org/myteam/server/admin/dto/request/ImproveRequestDto.java @@ -80,10 +80,13 @@ public final static class RequestImprovementDetail { @NotNull(message = "contentid는 비면안됩니다.") @Schema(description = "필수값 입니다.") private Long contentId; - + @Schema(description = "관리자단 대시보드의 최신데이터 알림에서 넘어올경우에만 넘겨주시면됩니다." + + "그외엔 null로 주시면됩니다.") + private String alarmCheck; @Builder - public RequestImprovementDetail(Long contentId) { + public RequestImprovementDetail(Long contentId,String alarmCheck) { this.contentId = contentId; + this.alarmCheck=alarmCheck; } } diff --git a/src/main/java/org/myteam/server/admin/dto/request/InquiryRequestDto.java b/src/main/java/org/myteam/server/admin/dto/request/InquiryRequestDto.java index 56767561..c735162b 100644 --- a/src/main/java/org/myteam/server/admin/dto/request/InquiryRequestDto.java +++ b/src/main/java/org/myteam/server/admin/dto/request/InquiryRequestDto.java @@ -98,10 +98,14 @@ public final static class RequestInquiryDetail { @NotNull(message = "contentid 는 비면안됩니다.") @Schema(description = "inquiry id값입니다. 필수입니다.") private Long contentId; + @Schema(description = "관리자단 대시보드의 최신데이터 알림에서 넘어올경우에만 넘겨주시면됩니다." + + "그외엔 null로 주시면됩니다.") + private String alarmCheck; @Builder - public RequestInquiryDetail(Long id) { + public RequestInquiryDetail(Long id,String alarmCheck) { this.contentId = id; + this.alarmCheck=alarmCheck; } } diff --git a/src/main/java/org/myteam/server/admin/dto/response/AdminDashBoardResponseDto.java b/src/main/java/org/myteam/server/admin/dto/response/AdminDashBoardResponseDto.java index 2fcff253..ff1c14ac 100644 --- a/src/main/java/org/myteam/server/admin/dto/response/AdminDashBoardResponseDto.java +++ b/src/main/java/org/myteam/server/admin/dto/response/AdminDashBoardResponseDto.java @@ -29,7 +29,7 @@ public static class ResponseStatic { @Getter public static class ResponseLatestData { - @Schema(description = "불러온 데이터 타입이 신고일때 어떤 콘텐츠에대한 신고인지를 나타냅니다.") + @Schema(description = "불러온 최신 데이터 타입이 신고일때 어떤 콘텐츠에대한 신고인지를 나타냅니다.") private String reportType; @Schema(description = "최신 데이터를 관리자단의 우측 하단에서 표시할때 가장 왼쪽에오는 상태값입니다.") private String mainStatus; @@ -43,12 +43,14 @@ public static class ResponseLatestData { @Schema(description = "어떤 종류의 최신데이터인지 보여줍니다") private StaticDataType staticDataType; @Schema(description = "이값이 true이면 이미 읽은것,아니면은 읽지않은것입니다.") - private boolean checkRead; + private Boolean checkRead; + @Schema(description = "신고 관련 최신 리스트일떄 참조하는 값으로 다른 관련 최신 리스트라면 무시해주세요") + private Long reportId; public ResponseLatestData(String reportType, String mainStatus, String subStatus, Long contentId, - String name, String content, String createAt, - StaticDataType staticDateType) { + String name, String content, String createAt,Long reportId + ,StaticDataType staticDataType) { this.reportType = reportType; this.mainStatus = mainStatus; this.subStatus = subStatus; @@ -56,7 +58,8 @@ public ResponseLatestData(String reportType, this.name = name; this.content = content; this.createAt = createAt; - this.staticDataType=staticDateType; + this.reportId=reportId; + this.staticDataType=staticDataType; } public void updateCreateAt(String createAt) { diff --git a/src/main/java/org/myteam/server/admin/repository/AdminDashBoardRepository.java b/src/main/java/org/myteam/server/admin/repository/AdminDashBoardRepository.java index 907d3a80..a05a60a9 100644 --- a/src/main/java/org/myteam/server/admin/repository/AdminDashBoardRepository.java +++ b/src/main/java/org/myteam/server/admin/repository/AdminDashBoardRepository.java @@ -166,6 +166,7 @@ public Map> getLatestData() { .from(board) .where(board.id.eq(report.reportedContentId))), report.createDate.stringValue(), + report.id, Expressions.constant(StaticDataType.Report) )) .from(report) @@ -177,8 +178,8 @@ public Map> getLatestData() { .fetch(); reportLatest.stream() .forEach(x -> { - boolean readCheck = redisService.AdminReadCheck("ADMIN_ALARM", admin.getPublicId().toString() - , StaticDataType.Report, x.getContentId()); + boolean readCheck = redisService.AdminReadCheck(admin.getPublicId().toString() + ,StaticDataType.Report, x.getContentId()); x.mappingCheckRead(readCheck); x.updateCreateAt( DateFormatUtil.formatByDot.format( @@ -213,6 +214,7 @@ public Map> getLatestData() { .otherwise(member.nickname), inquiry.content.substring(0, 20), inquiry.createdAt.stringValue(), + Expressions.constant(0L), Expressions.constant(StaticDataType.Inquiry) )) .from(inquiry) @@ -229,8 +231,8 @@ public Map> getLatestData() { DateFormatUtil.formatByDot.format( LocalDateTime.parse(x.getCreateAt(), DateFormatUtil.FLEXIBLE_NANO_FORMATTER))); - boolean readCheck = redisService.AdminReadCheck("ADMIN_ALARM", admin.getPublicId().toString() - , StaticDataType.Inquiry, x.getContentId()); + boolean readCheck = redisService.AdminReadCheck(admin.getPublicId().toString() + , x.getStaticDataType(), x.getContentId()); x.mappingCheckRead(readCheck); }); List improveLatest=queryFactory.select( @@ -248,6 +250,7 @@ public Map> getLatestData() { member.nickname, improvement.content, improvement.createDate.stringValue(), + Expressions.constant(0L), Expressions.constant(StaticDataType.Improvement) )) @@ -263,7 +266,7 @@ public Map> getLatestData() { x.updateCreateAt( DateFormatUtil.formatByDot.format( LocalDateTime.parse(x.getCreateAt(), DateFormatUtil.FLEXIBLE_NANO_FORMATTER))); - boolean readCheck = redisService.AdminReadCheck("ADMIN_ALARM", admin.getPublicId().toString() + boolean readCheck = redisService.AdminReadCheck(admin.getPublicId().toString() , StaticDataType.Improvement, x.getContentId()); x.mappingCheckRead(readCheck); }); @@ -314,7 +317,4 @@ private ResponseStatic makeInquiryImprovementStatic(DateType dateType,List getImproveListCond(RequestImprovementList requestImprovementList) { @@ -28,8 +34,14 @@ public Page getImproveListMember(RequestMemberImprove } public ResponseImprovementDetail getImproveDetail(RequestImprovementDetail requestImprovementList) { - - return adminImprovementSearchRepo.getImprovementDetail(requestImprovementList); + ResponseImprovementDetail responseImprovementDetail + =adminImprovementSearchRepo.getImprovementDetail(requestImprovementList);; + if(requestImprovementList.getAlarmCheck()!=null) { + Member admin = securityReadService.getMember(); + redisService.adminReadCheckUpdate(admin.getPublicId().toString() + , StaticDataType.Improvement, requestImprovementList.getContentId()); + } + return responseImprovementDetail; } public void addAdminMemo(AdminMemoImprovementRequest adminMemoRequest) { diff --git a/src/main/java/org/myteam/server/admin/service/AdminInquiryService.java b/src/main/java/org/myteam/server/admin/service/AdminInquiryService.java index e649eed5..850505e2 100644 --- a/src/main/java/org/myteam/server/admin/service/AdminInquiryService.java +++ b/src/main/java/org/myteam/server/admin/service/AdminInquiryService.java @@ -3,8 +3,12 @@ import lombok.RequiredArgsConstructor; import org.myteam.server.admin.entity.AdminContentMemo; import org.myteam.server.admin.repository.InquirySearchRepo; +import org.myteam.server.admin.utill.StaticDataType; import org.myteam.server.common.certification.service.InquiryAnsSendService; +import org.myteam.server.global.util.redis.service.RedisService; +import org.myteam.server.member.entity.Member; import org.myteam.server.member.service.MemberReadService; +import org.myteam.server.member.service.SecurityReadService; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import static org.myteam.server.admin.dto.request.AdminMemoRequestDto.AdminMemoInquiryRequest; @@ -21,6 +25,8 @@ public class AdminInquiryService { private final InquirySearchRepo inquirySearchRepo; private final InquiryAnsSendService inquiryAnsSendStrategy; private final MemberReadService memberReadService; + private final SecurityReadService securityReadService; + private final RedisService redisService; public Page getInquiryListCond(RequestInquiryListCond requestInquiryListCond) { @@ -28,8 +34,14 @@ public Page getInquiryListCond(RequestInquiryListCond r } public ResponseInquiryDetail getInquiryDetail(RequestInquiryDetail requestInquiryDetail) { - - return inquirySearchRepo.getInquiryDetail(requestInquiryDetail); + ResponseInquiryDetail responseInquiryDetail= + inquirySearchRepo.getInquiryDetail(requestInquiryDetail); + if(requestInquiryDetail.getAlarmCheck()!=null) { + Member admin = securityReadService.getMember(); + redisService.adminReadCheckUpdate(admin.getPublicId().toString() + , StaticDataType.Inquiry, requestInquiryDetail.getContentId()); + } + return responseInquiryDetail; } public Page getInquiryListMember(RequestInquiryList requestInquiryDetail) { diff --git a/src/main/java/org/myteam/server/admin/service/ContentSearchService.java b/src/main/java/org/myteam/server/admin/service/ContentSearchService.java index 182e8232..fddf047f 100644 --- a/src/main/java/org/myteam/server/admin/service/ContentSearchService.java +++ b/src/main/java/org/myteam/server/admin/service/ContentSearchService.java @@ -3,6 +3,10 @@ import lombok.RequiredArgsConstructor; import org.myteam.server.admin.repository.ContentSearchRepository; +import org.myteam.server.admin.utill.StaticDataType; +import org.myteam.server.global.util.redis.service.RedisService; +import org.myteam.server.member.entity.Member; +import org.myteam.server.member.service.SecurityReadService; import org.springframework.data.domain.Page; import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; @@ -17,6 +21,8 @@ public class ContentSearchService { private final ContentSearchRepository contentSearchRepository; + private final SecurityReadService securityReadService; + private final RedisService redisService; public Page getReportList(RequestReportList requestReportList){ @@ -27,8 +33,13 @@ public Page getContentList(RequestContentData requestRepo return contentSearchRepository.getDataList(requestReportList); } public ResponseDetail getContentDetail(RequestDetail requestDetail){ - - return contentSearchRepository.getDetail(requestDetail); + ResponseDetail responseDetail=contentSearchRepository.getDetail(requestDetail); + if(requestDetail.getAlarmCheck()!=null&&requestDetail.getReportId()!=null) { + Member admin = securityReadService.getMember(); + redisService.adminReadCheckUpdate(admin.getPublicId().toString() + , StaticDataType.Report, requestDetail.getReportId()); + } + return responseDetail; } public void addAdminMemo(AdminMemoContentRequest adminMemoContentRequest){ contentSearchRepository.addAdminMemo(adminMemoContentRequest); diff --git a/src/main/java/org/myteam/server/common/certification/service/InquiryAnsSendService.java b/src/main/java/org/myteam/server/common/certification/service/InquiryAnsSendService.java index 79f395e0..d934519a 100644 --- a/src/main/java/org/myteam/server/common/certification/service/InquiryAnsSendService.java +++ b/src/main/java/org/myteam/server/common/certification/service/InquiryAnsSendService.java @@ -8,6 +8,8 @@ import org.myteam.server.global.exception.ErrorCode; import org.myteam.server.global.exception.PlayHiveException; import org.myteam.server.global.util.date.DateFormatUtil; +import org.myteam.server.inquiry.domain.Inquiry; +import org.myteam.server.inquiry.repository.InquiryRepository; import org.myteam.server.member.controller.response.MemberResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.MailException; @@ -28,19 +30,23 @@ public class InquiryAnsSendService { private final JavaMailSender javaMailSender; private final SpringTemplateEngine templateEngine; + private final InquiryRepository inquiryRepository; @Value("${SENDER_EMAIL}") private String senderEmail; private String getSubject() { return "문의 답변 메일입니다."; } - private String getBody(String content,String email) { - LocalDateTime now=LocalDateTime.now(); + private String getBody(AdminContentMemo adminContentMemo,MemberResponse memberResponse) { + Long inquiryId=adminContentMemo.getContentId(); + Inquiry inquiry=inquiryRepository.findById(inquiryId).get(); Context context = new Context(); - context.setVariable("email",email); - context.setVariable("content",content); - context.setVariable("setTime", DateFormatUtil.formatByDot.format(now)); - return templateEngine.process("mail/signup-complete-template", context); + context.setVariable("content",inquiry.getContent()); + context.setVariable("answer",adminContentMemo.getContent()); + context.setVariable("inquiryMeta.meta.ip",inquiry.getClientIp()); + context.setVariable(" inquiryMeta.meta.created_at", + DateFormatUtil.formatByDot.format(inquiry.getCreatedAt())); + return templateEngine.process("mail/admin-to-user-reply", context); } @Async public CompletableFuture send(AdminContentMemo adminMemo, MemberResponse memberResponse) { @@ -49,7 +55,7 @@ public CompletableFuture send(AdminContentMemo adminMemo, MemberResponse m try { String subject = getSubject(); - String body = getBody(adminMemo.getContent(),memberResponse.getEmail()); + String body = getBody(adminMemo,memberResponse); MimeMessage message = createMail(memberResponse.getEmail(), subject, body); javaMailSender.send(message); diff --git a/src/main/java/org/myteam/server/global/util/redis/service/RedisService.java b/src/main/java/org/myteam/server/global/util/redis/service/RedisService.java index 0eee2452..74c6ad98 100644 --- a/src/main/java/org/myteam/server/global/util/redis/service/RedisService.java +++ b/src/main/java/org/myteam/server/global/util/redis/service/RedisService.java @@ -73,28 +73,8 @@ public boolean isAdminLoginAllowed(String category,String identifier){ return true; } - public boolean AdminReadCheck(String category, String adminIdentifier, StaticDataType staticDataType, Long contentId){ - - String redisKey=getRateLimitKey(category,adminIdentifier+staticDataType.name()+String.valueOf(contentId)); - String requestCountStr=redisTemplate.opsForValue().get(redisKey); - int requestCount = requestCountStr == null ? 0 : Integer.parseInt(requestCountStr); - if(requestCount==0){ - return false; - } - return true; - } - - public void adminReadCheckUpdate(String category, String adminIdentifier, StaticDataType staticDataType, Long contentId){ - String redisKey=getRateLimitKey(category,adminIdentifier+staticDataType.name()+String.valueOf(contentId)); - String requestCountStr=redisTemplate.opsForValue().get(redisKey); - int requestCount = requestCountStr == null ? 0 : Integer.parseInt(requestCountStr); - if(requestCount==0) { - redisTemplate.opsForValue().increment(redisKey); - redisTemplate.expire(redisKey, Duration.ofMinutes(ADMIN_ALARM_READ_EXPIRE_TIME)); - } - } - /*public boolean AdminReadCheck(String adminIdentifier, StaticDataType staticDataType, Long contentId){ - String redisKey=ADMIN_ALARM_KEY+adminIdentifier+staticDataType.name()+String.valueOf(contentId); + public boolean AdminReadCheck(String adminIdentifier, StaticDataType staticDataType, Long contentId){ + String redisKey=ADMIN_ALARM_KEY+adminIdentifier+staticDataType.name()+contentId; String requestCountStr=redisTemplate.opsForValue().get(redisKey); int requestCount = requestCountStr == null ? 0 : Integer.parseInt(requestCountStr); if(requestCount==0){ @@ -103,14 +83,14 @@ public void adminReadCheckUpdate(String category, String adminIdentifier, Static return true; } public void adminReadCheckUpdate(String adminIdentifier, StaticDataType staticDataType, Long contentId){ - String redisKey=ADMIN_ALARM_KEY+adminIdentifier+staticDataType.name()+String.valueOf(contentId); + String redisKey=ADMIN_ALARM_KEY+adminIdentifier+staticDataType.name()+contentId; String requestCountStr=redisTemplate.opsForValue().get(redisKey); int requestCount = requestCountStr == null ? 0 : Integer.parseInt(requestCountStr); if(requestCount==0) { redisTemplate.opsForValue().increment(redisKey); redisTemplate.expire(redisKey, Duration.ofDays(30L)); } - }*/ + } /** * 요청 제한을 적용할 Redis Key 생성 * diff --git a/src/main/resources/templates/mail/admin-to-user-reply.html b/src/main/resources/templates/mail/admin-to-user-reply.html new file mode 100644 index 00000000..0594f149 --- /dev/null +++ b/src/main/resources/templates/mail/admin-to-user-reply.html @@ -0,0 +1,180 @@ + + + + + + + + + PlayHive 문의하기 답변 + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ PlayHive 로고 이미지 + +

+ 모두 함께 즐기는 클린 스포츠 커뮤니티, 플레이 하이브! +

+
+
+
+ 문의하기 고객센터 발송메일 +
+
+ + + + + + + + + +
+ 작성날짜 + 2025.05.05 / 18:24:32 (IP + 106.101.44.321)
+ 내용 + 문의하려고하는데요 로그인이 안돼요
+
+
+ 문의하기 답변
+

+ 안녕하세요. 플레이 하이브 입니다. +
+ 문의에 대해 답변드립니다. 해당부분은 빠른시일 내에 조치하겠습니다. +

+
+ + 플레이하이브 보러가기 + + + 플레이하이브 고객센터 문의하기 + +
+ 본 메일은 발신전용으로 회신하실 경우 답변이 되지 않습니다. 자세한 사항은 + + 플레이하이브 고객센터 + + 를 이용하세요. +
+
+ + +
+ + + + +
+ + + + + + + + + + + + +
+
+ PlayHive +
+
+

+ 열정적으로 응원하고 서로를 존중하며
+ + 모두 함께 즐기는 클린 스포츠 커뮤니티, 플레이 하이브! + +

+
+

+ 서비스명: PlayHive · 대표: 홍길표 · 개인정보 보호책임자: 홍길표
+ 콘텐츠 내용에 대한 저작권 및 법적 책임은 자료제공자 또는 글쓴이에 있으며 PlayHive의 입장과 다를 수 있습니다. +

+
+ + + + +
+

+ Copyright © PlayHive Co., Ltd All rights reserved. +

+
+
+
+ + + \ No newline at end of file diff --git a/src/test/java/org/myteam/server/admin/AdminReadCheckTest.java b/src/test/java/org/myteam/server/admin/AdminReadCheckTest.java new file mode 100644 index 00000000..c69d4cc2 --- /dev/null +++ b/src/test/java/org/myteam/server/admin/AdminReadCheckTest.java @@ -0,0 +1,199 @@ +package org.myteam.server.admin; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.myteam.server.admin.dto.request.ImproveRequestDto.RequestImprovementDetail; +import org.myteam.server.admin.repository.AdminDashBoardRepository; +import org.myteam.server.admin.service.AdminImprovementService; +import org.myteam.server.admin.service.AdminInquiryService; +import org.myteam.server.admin.service.ContentSearchService; +import org.myteam.server.admin.utill.StaticDataType; +import org.myteam.server.board.domain.Board; +import org.myteam.server.board.domain.CategoryType; +import org.myteam.server.chat.block.domain.BanReason; +import org.myteam.server.global.domain.Category; +import org.myteam.server.improvement.domain.Improvement; +import org.myteam.server.inquiry.domain.Inquiry; +import org.myteam.server.member.entity.Member; +import org.myteam.server.report.domain.Report; +import org.myteam.server.report.domain.ReportType; +import org.myteam.server.support.IntegrationTestSupport; +import org.springframework.beans.factory.annotation.Autowired; +import java.util.List; +import java.util.Map; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; +import static org.myteam.server.admin.dto.request.ContentRequestDto.*; +import static org.myteam.server.admin.dto.request.InquiryRequestDto.*; +import static org.myteam.server.admin.dto.response.AdminDashBoardResponseDto.*; + +public class AdminReadCheckTest extends IntegrationTestSupport { + + + @Autowired + AdminDashBoardRepository adminDashBoardRepository; + @Autowired + AdminInquiryService adminInquiryService; + @Autowired + AdminImprovementService adminImprovementService; + + + @Autowired + ContentSearchService contentSearchService; + Member admin; + Improvement improvement; + Inquiry inquiry; + + Board board; + Report report; + + @BeforeEach + public void setting(){ + + admin=createAdmin(0); + Member member=createMember(0); + board=createBoard(admin, Category.BASEBALL, CategoryType.FREE,"title", + "zzzz"); + report=createReport(admin,member, BanReason.SEXUAL_CONTENT, ReportType.BOARD,board.getId()); + improvement=createImprovement(admin,false); + inquiry=createInquiry(admin); + } + + @DisplayName("읽지않음이 정상 처리되는지") + void testNotRead(){ + when(redisService.AdminReadCheck(admin.getPublicId().toString() + , StaticDataType.Inquiry,inquiry.getId())) + .thenReturn(false); + when(redisService.AdminReadCheck(admin.getPublicId().toString() + , StaticDataType.Improvement,improvement.getId())) + .thenReturn(false); + Map> responseLatestData=adminDashBoardRepository.getLatestData(); + responseLatestData.keySet().stream().forEach( + x->{ + List responseLatestDataList= + responseLatestData.get((String) x); + + responseLatestDataList.stream() + .forEach(y->{ + assertThat(y.getCheckRead()).isFalse(); + }); + } + ); + + } + @DisplayName("읽음으로 정상 처리되는지") + void testRead(){ + when(redisService.AdminReadCheck(admin.getPublicId().toString() + , StaticDataType.Inquiry,inquiry.getId())) + .thenReturn(true); + when(redisService.AdminReadCheck(admin.getPublicId().toString() + , StaticDataType.Improvement,improvement.getId())) + .thenReturn(true); + Map> responseLatestData=adminDashBoardRepository.getLatestData(); + responseLatestData.keySet().stream().forEach( + x->{ + List responseLatestDataList= + responseLatestData.get((String) x); + + responseLatestDataList.stream() + .forEach(y->{ + assertThat(y.getCheckRead()).isFalse(); + }); + } + ); + + } + + @DisplayName("content detail 서비스로 접근시 호출이잘되는가") + @Test + void testContentReadDetail(){ + + RequestDetail requestDetail=RequestDetail + .builder() + .alarmCheck("zczx") + .contentId(board.getId()) + .staticDataType(StaticDataType.BOARD) + .reportId(report.getId()) + .build(); + contentSearchService.getContentDetail(requestDetail); + verify(redisService).adminReadCheckUpdate(any(String.class),any(StaticDataType.class), + any(Long.class)); + } + + + @DisplayName("content detail 서비스로 접근시 호출이안되는가") + @Test + void testContentReadDetail2(){ + + RequestDetail requestDetail=RequestDetail + .builder() + .alarmCheck("zczx") + .contentId(board.getId()) + .staticDataType(StaticDataType.BOARD) + .build(); + contentSearchService.getContentDetail(requestDetail); + RequestDetail requestDetail2=RequestDetail + .builder() + .contentId(board.getId()) + .reportId(report.getId()) + .staticDataType(StaticDataType.BOARD) + .build(); + contentSearchService.getContentDetail(requestDetail2); + RequestDetail requestDetail3=RequestDetail + .builder() + .contentId(board.getId()) + .staticDataType(StaticDataType.BOARD) + .build(); + contentSearchService.getContentDetail(requestDetail3); + + + verify(redisService,never()).adminReadCheckUpdate(any(String.class),any(StaticDataType.class), + any(Long.class)); + } + + @DisplayName("detail 서비스로 접근시에 adminreadcheckupdate가 호출이되는가") + @Test + void testInquiryReadDetail(){ + RequestInquiryDetail requestInquiryDetail=RequestInquiryDetail + .builder() + .alarmCheck("dsfdsf") + .id(inquiry.getId()) + .build(); + adminInquiryService.getInquiryDetail(requestInquiryDetail); + verify(redisService).adminReadCheckUpdate(any(String.class),any(StaticDataType.class), + any(Long.class)); + + } + @DisplayName("detail 서비스로 접근시에 adminreadcheckupdate가 호출이되는가") + @Test + void testImprovementReadDetail(){ + RequestImprovementDetail requestImprovementDetail= + RequestImprovementDetail + .builder() + .alarmCheck("check") + .contentId(improvement.getId()) + .build(); + adminImprovementService.getImproveDetail(requestImprovementDetail); + verify(redisService).adminReadCheckUpdate(any(String.class),any(StaticDataType.class), + any(Long.class)); + + } + @DisplayName("detail 서비스로 접근시에 adminreadcheckupdate가 호출이 안되는가") + @Test + void testNotReadDetail(){ + RequestImprovementDetail requestImprovementDetail= RequestImprovementDetail + .builder() + .contentId(improvement.getId()) + .build(); + adminImprovementService.getImproveDetail(requestImprovementDetail); + RequestInquiryDetail requestInquiryDetail=RequestInquiryDetail + .builder() + .id(inquiry.getId()) + .build(); + adminInquiryService.getInquiryDetail(requestInquiryDetail); + verify(redisService,never()).adminReadCheckUpdate(any(String.class),any(StaticDataType.class), + any(Long.class)); + } +} diff --git a/src/test/java/org/myteam/server/admin/inquriyimprovementtest.java b/src/test/java/org/myteam/server/admin/inquriyimprovementtest.java index b78db05f..e2a978f0 100644 --- a/src/test/java/org/myteam/server/admin/inquriyimprovementtest.java +++ b/src/test/java/org/myteam/server/admin/inquriyimprovementtest.java @@ -3,21 +3,35 @@ import com.querydsl.jpa.impl.JPAQueryFactory; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.myteam.server.admin.entity.AdminContentMemo; import org.myteam.server.admin.entity.AdminImproveChangeLog; import org.myteam.server.admin.entity.AdminInquiryChangeLog; +import org.myteam.server.admin.entity.AdminMemberMemo; import org.myteam.server.admin.repository.AdminImprovementSearchRepo; import org.myteam.server.admin.repository.InquirySearchRepo; +import org.myteam.server.admin.service.AdminInquiryService; +import org.myteam.server.common.certification.service.InquiryAnsSendService; import org.myteam.server.improvement.domain.ImportantStatus; import org.myteam.server.improvement.domain.Improvement; import org.myteam.server.improvement.domain.ImprovementStatus; import org.myteam.server.inquiry.domain.Inquiry; +import org.myteam.server.member.controller.response.MemberResponse; import org.myteam.server.member.entity.Member; +import org.myteam.server.member.service.MemberReadService; import org.myteam.server.support.IntegrationTestSupport; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.test.mock.mockito.MockBeans; + import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import static org.myteam.server.admin.dto.request.AdminMemoRequestDto.AdminMemoImprovementRequest; import static org.myteam.server.admin.dto.request.AdminMemoRequestDto.AdminMemoInquiryRequest; import static org.myteam.server.admin.dto.response.ImprovementResponseDto.*; @@ -37,12 +51,21 @@ public class inquriyimprovementtest extends IntegrationTestSupport { AdminImprovementSearchRepo adminImprovementSearchRepo; @Autowired InquirySearchRepo inquirySearchRepo; + @MockBean + InquiryAnsSendService inquiryAnsSendService; + + + @MockBean + MemberReadService memberReadService; Member admin; Improvement improvement1; Inquiry inquiry1; + @Autowired + AdminInquiryService adminInquiryService; + @Autowired JPAQueryFactory queryFactory; @@ -157,6 +180,23 @@ void getdetailandmemo() { assertThat(adminInquiryChangeLogs.size()).isEqualTo(1); } + @Test + @DisplayName("문의 메일 전송 호출 테스트") + void inquriyMailSendVerify(){ + AdminMemoInquiryRequest adminMemoInquiryRequest=AdminMemoInquiryRequest + .builder() + .contentId(inquiry1.getId()) + .content("Zcxzcxzcxzc") + .email("wsdas") + .build(); + + when(memberReadService.getByEmail(any(String.class))) + .thenReturn(MemberResponse.createMemberResponse(admin)); + + adminInquiryService.sendInquiryAnswer(adminMemoInquiryRequest); + + verify(inquiryAnsSendService).send(any(AdminContentMemo.class), any(MemberResponse.class)); + } @Test void addMemberImproveInquriy() {