Skip to content

Commit d4cef2f

Browse files
authored
Merge pull request #353 from MT-TEAM-Org/epic/inquirymail
feat: inquriy mail send and admin read check fix
2 parents cb9398f + 77560a8 commit d4cef2f

File tree

13 files changed

+510
-54
lines changed

13 files changed

+510
-54
lines changed

src/main/java/org/myteam/server/admin/dto/request/ContentRequestDto.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,16 @@ public static class RequestDetail {
7878
@NotNull(message ="contentid는 비면안됩니다.")
7979
@Schema(description = "필수값입니다.")
8080
private Long contentId;
81+
@Schema(description = "관리자단 대시보드의 최신데이터 알람에서 신고목록을 클릭해서 넘어올떄만 넣어주세요")
82+
private Long reportId;
83+
@Schema(description = "관리자단 대시보드의 최신데이터 알람에서 넘어올경우에만 넣어주세요")
84+
private String alarmCheck;
8185
@Builder
82-
public RequestDetail(StaticDataType staticDataType, Long contentId) {
86+
public RequestDetail(StaticDataType staticDataType, Long contentId,Long reportId,String alarmCheck) {
8387
this.staticDataType = staticDataType;
8488
this.contentId = contentId;
89+
this.reportId=reportId;
90+
this.alarmCheck=alarmCheck;
8591
}
8692
}
8793

src/main/java/org/myteam/server/admin/dto/request/ImproveRequestDto.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,13 @@ public final static class RequestImprovementDetail {
8080
@NotNull(message = "contentid는 비면안됩니다.")
8181
@Schema(description = "필수값 입니다.")
8282
private Long contentId;
83-
83+
@Schema(description = "관리자단 대시보드의 최신데이터 알림에서 넘어올경우에만 넘겨주시면됩니다." +
84+
"그외엔 null로 주시면됩니다.")
85+
private String alarmCheck;
8486
@Builder
85-
public RequestImprovementDetail(Long contentId) {
87+
public RequestImprovementDetail(Long contentId,String alarmCheck) {
8688
this.contentId = contentId;
89+
this.alarmCheck=alarmCheck;
8790
}
8891
}
8992

src/main/java/org/myteam/server/admin/dto/request/InquiryRequestDto.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,14 @@ public final static class RequestInquiryDetail {
9898
@NotNull(message = "contentid 는 비면안됩니다.")
9999
@Schema(description = "inquiry id값입니다. 필수입니다.")
100100
private Long contentId;
101+
@Schema(description = "관리자단 대시보드의 최신데이터 알림에서 넘어올경우에만 넘겨주시면됩니다." +
102+
"그외엔 null로 주시면됩니다.")
103+
private String alarmCheck;
101104

102105
@Builder
103-
public RequestInquiryDetail(Long id) {
106+
public RequestInquiryDetail(Long id,String alarmCheck) {
104107
this.contentId = id;
108+
this.alarmCheck=alarmCheck;
105109
}
106110
}
107111

src/main/java/org/myteam/server/admin/dto/response/AdminDashBoardResponseDto.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static class ResponseStatic {
2929
@Getter
3030
public static class ResponseLatestData {
3131

32-
@Schema(description = "불러온 데이터 타입이 신고일때 어떤 콘텐츠에대한 신고인지를 나타냅니다.")
32+
@Schema(description = "불러온 최신 데이터 타입이 신고일때 어떤 콘텐츠에대한 신고인지를 나타냅니다.")
3333
private String reportType;
3434
@Schema(description = "최신 데이터를 관리자단의 우측 하단에서 표시할때 가장 왼쪽에오는 상태값입니다.")
3535
private String mainStatus;
@@ -43,20 +43,23 @@ public static class ResponseLatestData {
4343
@Schema(description = "어떤 종류의 최신데이터인지 보여줍니다")
4444
private StaticDataType staticDataType;
4545
@Schema(description = "이값이 true이면 이미 읽은것,아니면은 읽지않은것입니다.")
46-
private boolean checkRead;
46+
private Boolean checkRead;
47+
@Schema(description = "신고 관련 최신 리스트일떄 참조하는 값으로 다른 관련 최신 리스트라면 무시해주세요")
48+
private Long reportId;
4749

4850
public ResponseLatestData(String reportType,
4951
String mainStatus, String subStatus, Long contentId,
50-
String name, String content, String createAt,
51-
StaticDataType staticDateType) {
52+
String name, String content, String createAt,Long reportId
53+
,StaticDataType staticDataType) {
5254
this.reportType = reportType;
5355
this.mainStatus = mainStatus;
5456
this.subStatus = subStatus;
5557
this.contentId = contentId;
5658
this.name = name;
5759
this.content = content;
5860
this.createAt = createAt;
59-
this.staticDataType=staticDateType;
61+
this.reportId=reportId;
62+
this.staticDataType=staticDataType;
6063
}
6164

6265
public void updateCreateAt(String createAt) {

src/main/java/org/myteam/server/admin/repository/AdminDashBoardRepository.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ public Map<String,List<ResponseLatestData>> getLatestData() {
166166
.from(board)
167167
.where(board.id.eq(report.reportedContentId))),
168168
report.createDate.stringValue(),
169+
report.id,
169170
Expressions.constant(StaticDataType.Report)
170171
))
171172
.from(report)
@@ -177,8 +178,8 @@ public Map<String,List<ResponseLatestData>> getLatestData() {
177178
.fetch();
178179
reportLatest.stream()
179180
.forEach(x -> {
180-
boolean readCheck = redisService.AdminReadCheck("ADMIN_ALARM", admin.getPublicId().toString()
181-
, StaticDataType.Report, x.getContentId());
181+
boolean readCheck = redisService.AdminReadCheck(admin.getPublicId().toString()
182+
,StaticDataType.Report, x.getContentId());
182183
x.mappingCheckRead(readCheck);
183184
x.updateCreateAt(
184185
DateFormatUtil.formatByDot.format(
@@ -213,6 +214,7 @@ public Map<String,List<ResponseLatestData>> getLatestData() {
213214
.otherwise(member.nickname),
214215
inquiry.content.substring(0, 20),
215216
inquiry.createdAt.stringValue(),
217+
Expressions.constant(0L),
216218
Expressions.constant(StaticDataType.Inquiry)
217219
))
218220
.from(inquiry)
@@ -229,8 +231,8 @@ public Map<String,List<ResponseLatestData>> getLatestData() {
229231
DateFormatUtil.formatByDot.format(
230232
LocalDateTime.parse(x.getCreateAt(), DateFormatUtil.FLEXIBLE_NANO_FORMATTER)));
231233

232-
boolean readCheck = redisService.AdminReadCheck("ADMIN_ALARM", admin.getPublicId().toString()
233-
, StaticDataType.Inquiry, x.getContentId());
234+
boolean readCheck = redisService.AdminReadCheck(admin.getPublicId().toString()
235+
, x.getStaticDataType(), x.getContentId());
234236
x.mappingCheckRead(readCheck);
235237
});
236238
List<ResponseLatestData> improveLatest=queryFactory.select(
@@ -248,6 +250,7 @@ public Map<String,List<ResponseLatestData>> getLatestData() {
248250
member.nickname,
249251
improvement.content,
250252
improvement.createDate.stringValue(),
253+
Expressions.constant(0L),
251254
Expressions.constant(StaticDataType.Improvement)
252255

253256
))
@@ -263,7 +266,7 @@ public Map<String,List<ResponseLatestData>> getLatestData() {
263266
x.updateCreateAt(
264267
DateFormatUtil.formatByDot.format(
265268
LocalDateTime.parse(x.getCreateAt(), DateFormatUtil.FLEXIBLE_NANO_FORMATTER)));
266-
boolean readCheck = redisService.AdminReadCheck("ADMIN_ALARM", admin.getPublicId().toString()
269+
boolean readCheck = redisService.AdminReadCheck(admin.getPublicId().toString()
267270
, StaticDataType.Improvement, x.getContentId());
268271
x.mappingCheckRead(readCheck);
269272
});
@@ -314,7 +317,4 @@ private ResponseStatic makeInquiryImprovementStatic(DateType dateType,List<Local
314317
.staticDataName("InquiryImprovement")
315318
.build();
316319
}
317-
318-
319-
320320
}

src/main/java/org/myteam/server/admin/service/AdminImprovementService.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
import lombok.RequiredArgsConstructor;
55
import org.myteam.server.admin.repository.AdminImprovementSearchRepo;
6+
import org.myteam.server.admin.utill.StaticDataType;
7+
import org.myteam.server.global.util.redis.service.RedisService;
8+
import org.myteam.server.member.entity.Member;
9+
import org.myteam.server.member.service.SecurityReadService;
610
import org.springframework.data.domain.Page;
711
import org.springframework.stereotype.Service;
812

@@ -15,6 +19,8 @@
1519
public class AdminImprovementService {
1620

1721
private final AdminImprovementSearchRepo adminImprovementSearchRepo;
22+
private final SecurityReadService securityReadService;
23+
private final RedisService redisService;
1824

1925

2026
public Page<ResponseImprovement> getImproveListCond(RequestImprovementList requestImprovementList) {
@@ -28,8 +34,14 @@ public Page<ResponseMemberImproveList> getImproveListMember(RequestMemberImprove
2834
}
2935

3036
public ResponseImprovementDetail getImproveDetail(RequestImprovementDetail requestImprovementList) {
31-
32-
return adminImprovementSearchRepo.getImprovementDetail(requestImprovementList);
37+
ResponseImprovementDetail responseImprovementDetail
38+
=adminImprovementSearchRepo.getImprovementDetail(requestImprovementList);;
39+
if(requestImprovementList.getAlarmCheck()!=null) {
40+
Member admin = securityReadService.getMember();
41+
redisService.adminReadCheckUpdate(admin.getPublicId().toString()
42+
, StaticDataType.Improvement, requestImprovementList.getContentId());
43+
}
44+
return responseImprovementDetail;
3345
}
3446

3547
public void addAdminMemo(AdminMemoImprovementRequest adminMemoRequest) {

src/main/java/org/myteam/server/admin/service/AdminInquiryService.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
import lombok.RequiredArgsConstructor;
44
import org.myteam.server.admin.entity.AdminContentMemo;
55
import org.myteam.server.admin.repository.InquirySearchRepo;
6+
import org.myteam.server.admin.utill.StaticDataType;
67
import org.myteam.server.common.certification.service.InquiryAnsSendService;
8+
import org.myteam.server.global.util.redis.service.RedisService;
9+
import org.myteam.server.member.entity.Member;
710
import org.myteam.server.member.service.MemberReadService;
11+
import org.myteam.server.member.service.SecurityReadService;
812
import org.springframework.data.domain.Page;
913
import org.springframework.stereotype.Service;
1014
import static org.myteam.server.admin.dto.request.AdminMemoRequestDto.AdminMemoInquiryRequest;
@@ -21,15 +25,23 @@ public class AdminInquiryService {
2125
private final InquirySearchRepo inquirySearchRepo;
2226
private final InquiryAnsSendService inquiryAnsSendStrategy;
2327
private final MemberReadService memberReadService;
28+
private final SecurityReadService securityReadService;
29+
private final RedisService redisService;
2430

2531
public Page<ResponseInquiryListCond> getInquiryListCond(RequestInquiryListCond requestInquiryListCond) {
2632

2733
return inquirySearchRepo.getInquiryListByCond(requestInquiryListCond);
2834
}
2935

3036
public ResponseInquiryDetail getInquiryDetail(RequestInquiryDetail requestInquiryDetail) {
31-
32-
return inquirySearchRepo.getInquiryDetail(requestInquiryDetail);
37+
ResponseInquiryDetail responseInquiryDetail=
38+
inquirySearchRepo.getInquiryDetail(requestInquiryDetail);
39+
if(requestInquiryDetail.getAlarmCheck()!=null) {
40+
Member admin = securityReadService.getMember();
41+
redisService.adminReadCheckUpdate(admin.getPublicId().toString()
42+
, StaticDataType.Inquiry, requestInquiryDetail.getContentId());
43+
}
44+
return responseInquiryDetail;
3345
}
3446

3547
public Page<ResponseInquiryList> getInquiryListMember(RequestInquiryList requestInquiryDetail) {

src/main/java/org/myteam/server/admin/service/ContentSearchService.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
import lombok.RequiredArgsConstructor;
55
import org.myteam.server.admin.repository.ContentSearchRepository;
6+
import org.myteam.server.admin.utill.StaticDataType;
7+
import org.myteam.server.global.util.redis.service.RedisService;
8+
import org.myteam.server.member.entity.Member;
9+
import org.myteam.server.member.service.SecurityReadService;
610
import org.springframework.data.domain.Page;
711
import org.springframework.stereotype.Repository;
812
import org.springframework.stereotype.Service;
@@ -17,6 +21,8 @@
1721
public class ContentSearchService {
1822

1923
private final ContentSearchRepository contentSearchRepository;
24+
private final SecurityReadService securityReadService;
25+
private final RedisService redisService;
2026

2127
public Page<ResponseReportList> getReportList(RequestReportList requestReportList){
2228

@@ -27,8 +33,13 @@ public Page<ResponseContentSearch> getContentList(RequestContentData requestRepo
2733
return contentSearchRepository.getDataList(requestReportList);
2834
}
2935
public ResponseDetail getContentDetail(RequestDetail requestDetail){
30-
31-
return contentSearchRepository.getDetail(requestDetail);
36+
ResponseDetail responseDetail=contentSearchRepository.getDetail(requestDetail);
37+
if(requestDetail.getAlarmCheck()!=null&&requestDetail.getReportId()!=null) {
38+
Member admin = securityReadService.getMember();
39+
redisService.adminReadCheckUpdate(admin.getPublicId().toString()
40+
, StaticDataType.Report, requestDetail.getReportId());
41+
}
42+
return responseDetail;
3243
}
3344
public void addAdminMemo(AdminMemoContentRequest adminMemoContentRequest){
3445
contentSearchRepository.addAdminMemo(adminMemoContentRequest);

src/main/java/org/myteam/server/common/certification/service/InquiryAnsSendService.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.myteam.server.global.exception.ErrorCode;
99
import org.myteam.server.global.exception.PlayHiveException;
1010
import org.myteam.server.global.util.date.DateFormatUtil;
11+
import org.myteam.server.inquiry.domain.Inquiry;
12+
import org.myteam.server.inquiry.repository.InquiryRepository;
1113
import org.myteam.server.member.controller.response.MemberResponse;
1214
import org.springframework.beans.factory.annotation.Value;
1315
import org.springframework.mail.MailException;
@@ -28,19 +30,23 @@ public class InquiryAnsSendService {
2830

2931
private final JavaMailSender javaMailSender;
3032
private final SpringTemplateEngine templateEngine;
33+
private final InquiryRepository inquiryRepository;
3134
@Value("${SENDER_EMAIL}")
3235
private String senderEmail;
3336

3437
private String getSubject() {
3538
return "문의 답변 메일입니다.";
3639
}
37-
private String getBody(String content,String email) {
38-
LocalDateTime now=LocalDateTime.now();
40+
private String getBody(AdminContentMemo adminContentMemo,MemberResponse memberResponse) {
41+
Long inquiryId=adminContentMemo.getContentId();
42+
Inquiry inquiry=inquiryRepository.findById(inquiryId).get();
3943
Context context = new Context();
40-
context.setVariable("email",email);
41-
context.setVariable("content",content);
42-
context.setVariable("setTime", DateFormatUtil.formatByDot.format(now));
43-
return templateEngine.process("mail/signup-complete-template", context);
44+
context.setVariable("content",inquiry.getContent());
45+
context.setVariable("answer",adminContentMemo.getContent());
46+
context.setVariable("inquiryMeta.meta.ip",inquiry.getClientIp());
47+
context.setVariable(" inquiryMeta.meta.created_at",
48+
DateFormatUtil.formatByDot.format(inquiry.getCreatedAt()));
49+
return templateEngine.process("mail/admin-to-user-reply", context);
4450
}
4551
@Async
4652
public CompletableFuture<Void> send(AdminContentMemo adminMemo, MemberResponse memberResponse) {
@@ -49,7 +55,7 @@ public CompletableFuture<Void> send(AdminContentMemo adminMemo, MemberResponse m
4955

5056
try {
5157
String subject = getSubject();
52-
String body = getBody(adminMemo.getContent(),memberResponse.getEmail());
58+
String body = getBody(adminMemo,memberResponse);
5359
MimeMessage message = createMail(memberResponse.getEmail(), subject, body);
5460

5561
javaMailSender.send(message);

src/main/java/org/myteam/server/global/util/redis/service/RedisService.java

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -73,28 +73,8 @@ public boolean isAdminLoginAllowed(String category,String identifier){
7373
return true;
7474

7575
}
76-
public boolean AdminReadCheck(String category, String adminIdentifier, StaticDataType staticDataType, Long contentId){
77-
78-
String redisKey=getRateLimitKey(category,adminIdentifier+staticDataType.name()+String.valueOf(contentId));
79-
String requestCountStr=redisTemplate.opsForValue().get(redisKey);
80-
int requestCount = requestCountStr == null ? 0 : Integer.parseInt(requestCountStr);
81-
if(requestCount==0){
82-
return false;
83-
}
84-
return true;
85-
}
86-
87-
public void adminReadCheckUpdate(String category, String adminIdentifier, StaticDataType staticDataType, Long contentId){
88-
String redisKey=getRateLimitKey(category,adminIdentifier+staticDataType.name()+String.valueOf(contentId));
89-
String requestCountStr=redisTemplate.opsForValue().get(redisKey);
90-
int requestCount = requestCountStr == null ? 0 : Integer.parseInt(requestCountStr);
91-
if(requestCount==0) {
92-
redisTemplate.opsForValue().increment(redisKey);
93-
redisTemplate.expire(redisKey, Duration.ofMinutes(ADMIN_ALARM_READ_EXPIRE_TIME));
94-
}
95-
}
96-
/*public boolean AdminReadCheck(String adminIdentifier, StaticDataType staticDataType, Long contentId){
97-
String redisKey=ADMIN_ALARM_KEY+adminIdentifier+staticDataType.name()+String.valueOf(contentId);
76+
public boolean AdminReadCheck(String adminIdentifier, StaticDataType staticDataType, Long contentId){
77+
String redisKey=ADMIN_ALARM_KEY+adminIdentifier+staticDataType.name()+contentId;
9878
String requestCountStr=redisTemplate.opsForValue().get(redisKey);
9979
int requestCount = requestCountStr == null ? 0 : Integer.parseInt(requestCountStr);
10080
if(requestCount==0){
@@ -103,14 +83,14 @@ public void adminReadCheckUpdate(String category, String adminIdentifier, Static
10383
return true;
10484
}
10585
public void adminReadCheckUpdate(String adminIdentifier, StaticDataType staticDataType, Long contentId){
106-
String redisKey=ADMIN_ALARM_KEY+adminIdentifier+staticDataType.name()+String.valueOf(contentId);
86+
String redisKey=ADMIN_ALARM_KEY+adminIdentifier+staticDataType.name()+contentId;
10787
String requestCountStr=redisTemplate.opsForValue().get(redisKey);
10888
int requestCount = requestCountStr == null ? 0 : Integer.parseInt(requestCountStr);
10989
if(requestCount==0) {
11090
redisTemplate.opsForValue().increment(redisKey);
11191
redisTemplate.expire(redisKey, Duration.ofDays(30L));
11292
}
113-
}*/
93+
}
11494
/**
11595
* 요청 제한을 적용할 Redis Key 생성
11696
*

0 commit comments

Comments
 (0)