Q&A 게시판 댓글 작성 기능
This commit is contained in:
+15
@@ -0,0 +1,15 @@
|
||||
package com.eactive.eai.rms.data.entity.onl.apim.portalinquiry;
|
||||
|
||||
import com.eactive.apim.portal.qna.entity.InquiryComment;
|
||||
import com.eactive.eai.data.jpa.BaseRepository;
|
||||
import com.eactive.eai.rms.data.EMSDataSource;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@EMSDataSource
|
||||
public interface InquiryCommentRepository extends BaseRepository<InquiryComment, String> {
|
||||
|
||||
long countByInquiry_Id(String inquiryId);
|
||||
|
||||
List<InquiryComment> findByInquiry_IdAndDelYnOrderBySeqAsc(String inquiryId, String delYn);
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.eactive.eai.rms.data.entity.onl.apim.portalinquiry;
|
||||
|
||||
import com.eactive.apim.portal.qna.entity.InquiryComment;
|
||||
import com.eactive.eai.rms.data.jpa.AbstractEMSDataSerivce;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Transactional(transactionManager = "transactionManagerForEMS")
|
||||
public class PortalInquiryCommentService extends AbstractEMSDataSerivce<InquiryComment, String, InquiryCommentRepository> {
|
||||
|
||||
// AbstractEMSDataSerivce의 repository 필드가 BaseRepository<T,I>로 고정되어
|
||||
// 커스텀 메서드를 호출할 수 없으므로 별도 필드로 직접 주입
|
||||
@Autowired
|
||||
private InquiryCommentRepository inquiryCommentRepository;
|
||||
|
||||
public long countByInquiryId(String inquiryId) {
|
||||
return inquiryCommentRepository.countByInquiry_Id(inquiryId);
|
||||
}
|
||||
|
||||
public List<InquiryComment> findByInquiryId(String inquiryId) {
|
||||
return inquiryCommentRepository.findByInquiry_IdAndDelYnOrderBySeqAsc(inquiryId, "N");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.eactive.eai.rms.onl.apim.portalInquiry;
|
||||
|
||||
import com.eactive.apim.portal.file.entity.FileInfo;
|
||||
import com.eactive.eai.data.converter.LocalDateTimeFormatters;
|
||||
import com.eactive.eai.rms.onl.apim.portaluser.PortalUserUI;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Data
|
||||
public class PortalInquiryCommentUI {
|
||||
|
||||
private String id;
|
||||
|
||||
private String inquiryId;
|
||||
|
||||
private String commentDetail;
|
||||
|
||||
private int seq;
|
||||
|
||||
private String delYn;
|
||||
|
||||
private String createdBy;
|
||||
|
||||
private String writerName;
|
||||
|
||||
private String lastModifiedBy;
|
||||
|
||||
@JsonFormat(pattern = LocalDateTimeFormatters.FORMAT_YYYYMMDDHHMMSS_14)
|
||||
@DateTimeFormat(pattern = "yyyyMMddHHmmss")
|
||||
private LocalDateTime createdDate;
|
||||
|
||||
@JsonFormat(pattern = LocalDateTimeFormatters.FORMAT_YYYYMMDDHHMMSS_14)
|
||||
@DateTimeFormat(pattern = "yyyyMMddHHmmss")
|
||||
private LocalDateTime lastModifiedDate;
|
||||
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.eactive.eai.rms.onl.apim.portalInquiry;
|
||||
|
||||
import com.eactive.apim.portal.qna.entity.InquiryComment;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.ReportingPolicy;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
|
||||
public interface PortalInquiryCommentUIMapper {
|
||||
|
||||
@Mapping(target = "inquiryId", source = "inquiry.id")
|
||||
PortalInquiryCommentUI toVo(InquiryComment entity);
|
||||
|
||||
List<PortalInquiryCommentUI> toVoList(List<InquiryComment> entities);
|
||||
}
|
||||
+18
@@ -73,5 +73,23 @@ public class PortalInquiryManController extends BaseAnnotationController {
|
||||
portalInquiryManService.deleteBulk(ids);
|
||||
return ResponseEntity.ok().build();
|
||||
}
|
||||
|
||||
@PostMapping(value = "/onl/apim/portalinquiry/portalInquiryMan.json", params = "cmd=LIST_COMMENT")
|
||||
public ResponseEntity<List<PortalInquiryCommentUI>> selectCommentList(String id) {
|
||||
return ResponseEntity.ok(portalInquiryManService.selectCommentList(id));
|
||||
}
|
||||
|
||||
@PostMapping(value = "/onl/apim/portalinquiry/portalInquiryMan.json", params = "cmd=INSERT_COMMENT")
|
||||
public ResponseEntity<String> insertComment(HttpServletRequest request, PortalInquiryCommentUI portalInquiryCommentUI) {
|
||||
String userid = SessionManager.getUserId(request);
|
||||
portalInquiryManService.insertComment(portalInquiryCommentUI, userid);
|
||||
return ResponseEntity.ok().build();
|
||||
}
|
||||
|
||||
@PostMapping(value = "/onl/apim/portalinquiry/portalInquiryMan.json", params = "cmd=DELETE_COMMENT")
|
||||
public ResponseEntity<Void> deleteComment(String id) {
|
||||
portalInquiryManService.deleteComment(id);
|
||||
return ResponseEntity.ok().build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,10 +4,13 @@ import com.eactive.apim.portal.file.entity.FileInfo;
|
||||
import com.eactive.apim.portal.file.service.FileService;
|
||||
import com.eactive.apim.portal.portaluser.entity.PortalUser;
|
||||
import com.eactive.apim.portal.portaluser.entity.PortalUserEnums;
|
||||
import com.eactive.apim.portal.portaluser.repository.PortalUserRepository;
|
||||
import com.eactive.apim.portal.qna.entity.Inquiry;
|
||||
import com.eactive.apim.portal.qna.entity.InquiryComment;
|
||||
import com.eactive.apim.portal.user.entity.UserInfo;
|
||||
import com.eactive.eai.rms.common.base.BaseService;
|
||||
import com.eactive.eai.rms.data.entity.man.user.UserInfoService;
|
||||
import com.eactive.eai.rms.data.entity.onl.apim.portalinquiry.PortalInquiryCommentService;
|
||||
import com.eactive.eai.rms.data.entity.onl.apim.portalinquiry.PortalInquirySearch;
|
||||
import com.eactive.eai.rms.data.entity.onl.apim.portalinquiry.PortalInquiryService;
|
||||
import com.eactive.eai.rms.onl.apim.masking.MaskingUtils;
|
||||
@@ -22,14 +25,18 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
@Transactional(transactionManager = "transactionManagerForEMS")
|
||||
@Slf4j
|
||||
public class PortalInquiryManService extends BaseService {
|
||||
private final PortalInquiryService portalInquiryService;
|
||||
private final PortalInquiryCommentService portalInquiryCommentService;
|
||||
private final PortalInquiryUIMapper portalInquiryUIMapper;
|
||||
private final PortalInquiryCommentUIMapper portalInquiryCommentUIMapper;
|
||||
private final UserInfoService userInfoService;
|
||||
private final PortalUserRepository portalUserRepository;
|
||||
private final FileService fileService;
|
||||
|
||||
public static final String PENDING = "PENDING";
|
||||
@@ -37,12 +44,18 @@ public class PortalInquiryManService extends BaseService {
|
||||
|
||||
|
||||
public PortalInquiryManService(PortalInquiryService portalInquiryService,
|
||||
PortalInquiryCommentService portalInquiryCommentService,
|
||||
PortalInquiryUIMapper portalInquiryUIMapper,
|
||||
PortalInquiryCommentUIMapper portalInquiryCommentUIMapper,
|
||||
UserInfoService userInfoService,
|
||||
PortalUserRepository portalUserRepository,
|
||||
FileService fileService){
|
||||
this.portalInquiryService = portalInquiryService;
|
||||
this.portalInquiryCommentService = portalInquiryCommentService;
|
||||
this.portalInquiryUIMapper = portalInquiryUIMapper;
|
||||
this.portalInquiryCommentUIMapper = portalInquiryCommentUIMapper;
|
||||
this.userInfoService = userInfoService;
|
||||
this.portalUserRepository = portalUserRepository;
|
||||
this.fileService = fileService;
|
||||
}
|
||||
|
||||
@@ -161,5 +174,46 @@ public class PortalInquiryManService extends BaseService {
|
||||
List<String> idList = Arrays.asList(ids.split(","));
|
||||
portalInquiryService.deleteByIds(idList);
|
||||
}
|
||||
|
||||
public List<PortalInquiryCommentUI> selectCommentList(String inquiryId) {
|
||||
List<InquiryComment> comments = portalInquiryCommentService.findByInquiryId(inquiryId);
|
||||
List<PortalInquiryCommentUI> result = portalInquiryCommentUIMapper.toVoList(comments);
|
||||
result.forEach(ui -> ui.setWriterName(resolveWriterName(ui.getCreatedBy())));
|
||||
return result;
|
||||
}
|
||||
|
||||
private String resolveWriterName(String userId) {
|
||||
if (StringUtils.isBlank(userId)) return "";
|
||||
// 직원(내부 사용자) 여부 먼저 확인 → 이름 그대로 반환
|
||||
Optional<UserInfo> staff = userInfoService.findById(userId);
|
||||
if (staff.isPresent()) {
|
||||
return staff.get().getUsername();
|
||||
}
|
||||
// 포털 회원이면 이름 마스킹 처리 (김수민 → 김수*)
|
||||
Optional<PortalUser> portalUser = portalUserRepository.findById(userId);
|
||||
if (portalUser.isPresent()) {
|
||||
return MaskingUtils.maskName(portalUser.get().getUserName());
|
||||
}
|
||||
return userId;
|
||||
}
|
||||
|
||||
public void insertComment(PortalInquiryCommentUI commentUI, String userId) {
|
||||
Inquiry inquiry = portalInquiryService.getById(commentUI.getInquiryId());
|
||||
|
||||
InquiryComment comment = new InquiryComment();
|
||||
comment.setInquiry(inquiry);
|
||||
comment.setCommentDetail(commentUI.getCommentDetail());
|
||||
comment.setDelYn("N");
|
||||
int nextSeq = (int) portalInquiryCommentService.countByInquiryId(commentUI.getInquiryId()) + 1;
|
||||
comment.setSeq(nextSeq);
|
||||
|
||||
portalInquiryCommentService.save(comment);
|
||||
}
|
||||
|
||||
public void deleteComment(String commentId) {
|
||||
InquiryComment comment = portalInquiryCommentService.getById(commentId);
|
||||
comment.setDelYn("Y");
|
||||
portalInquiryCommentService.save(comment);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user