package kr.wisestone.owl.service.impl; import kr.wisestone.owl.config.kafka.KafkaSender; import kr.wisestone.owl.constant.Constants; import kr.wisestone.owl.constant.MsgConstants; import kr.wisestone.owl.domain.Faq; import kr.wisestone.owl.domain.Guide; import kr.wisestone.owl.domain.User; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.FaqMapper; import kr.wisestone.owl.repository.FaqRepository; import kr.wisestone.owl.service.FaqService; import kr.wisestone.owl.service.UserService; import kr.wisestone.owl.util.ConvertUtil; import kr.wisestone.owl.vo.FaqVo; import kr.wisestone.owl.vo.ResPage; import kr.wisestone.owl.web.condition.FaqCondition; import kr.wisestone.owl.web.form.FaqForm; import kr.wisestone.owl.web.form.GuideForm; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class FaqServiceImpl extends AbstractServiceImpl> implements FaqService { @Autowired private FaqRepository faqRepository; @Autowired private UserService userService; @Autowired private KafkaSender kafkaSender; @Autowired private FaqMapper faqMapper; @Override protected JpaRepository getRepository() { return this.faqRepository; } // 공지 사항 등록 @Override @Transactional public Faq addFaq(FaqForm faqForm) { // faq 제목 및 내용 공백 체크 this.verifyTitleAndDescription(faqForm.getTitle(), faqForm.getDescription()); faqForm.setStatus(Faq.INACTIVATION); Faq faq = ConvertUtil.copyProperties(faqForm, Faq.class); return this.faqRepository.saveAndFlush(faq); } // faq 제목 및 내용 공백 체크 private void verifyTitleAndDescription(String title, String description) { if (StringUtils.isEmpty(title) || StringUtils.isEmpty(description)) { throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.FAQ_EMPTY_CONTENT)); } } // faq 조회 @Override @Transactional(readOnly = true) public List findFaq(Map resJsonData, FaqCondition faqCondition, Pageable pageable) { faqCondition.setPage(pageable.getPageNumber() * pageable.getPageSize()); faqCondition.setPageSize(pageable.getPageSize()); faqCondition.setTitle(faqCondition.getTitle()); List> results = this.faqMapper.find(faqCondition); Long totalCount = this.faqMapper.count(faqCondition); int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1; List faqVos = ConvertUtil.convertListToListClass(results, FaqVo.class); // faq 아이디 1 은 관리자 - 관리자만 수정 가능 for (FaqVo faqVo : faqVos) { Boolean bActivation = false; if(faqVo.getStatus().equals(Faq.ACTIVATION)) { bActivation = true; } faqVo.activation = bActivation; } resJsonData.put(Constants.RES_KEY_CONTENTS, faqVos); resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(), totalPage, totalCount)); return faqVos; } // faq 수정 @Override @Transactional public Faq modifyFaq(FaqForm faqForm) { // 공지사항 제목 및 내용 공백 체크 this.verifyTitleAndDescription(faqForm.getTitle(), faqForm.getDescription()); Faq faq = this.getFaq(faqForm.getId()); ConvertUtil.copyProperties(faqForm, faq, "id"); return this.faqRepository.saveAndFlush(faq); } // faq 수정 @Override @Transactional public Faq activeFaq(FaqForm faqForm) { boolean bActivation = faqForm.getActivation(); if(bActivation) { faqForm.setStatus(Faq.ACTIVATION); } else { faqForm.setStatus(Faq.INACTIVATION); } Faq faq = this.getFaq(faqForm.getId()); ConvertUtil.copyProperties(faqForm, faq, "id"); return this.faqRepository.saveAndFlush(faq); } // faq id 로 조회한다. @Override @Transactional(readOnly = true) public Faq getFaq(Long id) { if (id == null) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.FAQ_NOT_EXIST)); } Faq faq = this.findOne(id); if (faq == null) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.FAQ_NOT_EXIST)); } return faq; } // faq 상세 정보를 조회한다. @Override @Transactional(readOnly = true) public void detailFaq(Map resJsonData, FaqCondition faqCondition) { FaqVo faqVo = new FaqVo(); if (faqCondition.getId() != null) { Faq faq = this.getFaq(faqCondition.getId()); faqVo = ConvertUtil.copyProperties(faq, FaqVo.class); } resJsonData.put(Constants.RES_KEY_CONTENTS, faqVo); } }