feat: v2 Board Service 적용

dev
donggyu97 3 years ago
parent 0a5e2859a4
commit 9984274cdf

@ -1,7 +1,7 @@
package com.xit.biz.ctgy.v2.controller;
import com.xit.biz.ctgy.dto.BoardDto;
import com.xit.biz.ctgy.service.IBoardService;
import com.xit.biz.ctgy.v2.service.IBoardService;
import com.xit.core.annotation.Secured;
import com.xit.core.annotation.SecurityPolicy;
import com.xit.core.api.IRestResponse;

@ -0,0 +1,18 @@
package com.xit.biz.ctgy.v2.service;
import com.xit.biz.ctgy.dto.BoardDto;
import com.xit.biz.ctgy.entity.MinCivBoard680;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
public interface IBoardService {
Page<BoardDto> findAll(final BoardDto dto, Pageable pageable);
Page<MinCivBoard680> findAll2(final MinCivBoard680 entity, Pageable pageable);
int modifyByCiCode(Long ciCode);
void saveBoard(BoardDto dto);
void removeBoard(Long ciCode);
}

@ -0,0 +1,99 @@
package com.xit.biz.ctgy.v2.service.impl;
import com.google.common.base.Objects;
import com.xit.biz.ctgy.dto.BoardDto;
import com.xit.biz.ctgy.dto.struct.MinCivBoard680Mapstruct;
import com.xit.biz.ctgy.entity.MinCivBoard680;
import com.xit.biz.ctgy.repository.IBoardRepository;
import com.xit.biz.ctgy.v2.service.IBoardService;
import com.xit.core.constant.ErrorCode;
import com.xit.core.exception.CustomBaseException;
import com.xit.core.oauth2.utils.HeaderUtil;
import com.xit.core.support.jpa.JpaUtil;
import com.xit.core.util.Checks;
import com.xit.core.util.CommUtil;
import lombok.AllArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import static org.springframework.data.domain.ExampleMatcher.GenericPropertyMatchers.contains;
@Service
@AllArgsConstructor
public class BoardService implements IBoardService {
private final IBoardRepository repository;
private final PasswordEncoder passwordEncoder;
private final MinCivBoard680Mapstruct mapstruct = Mappers.getMapper(MinCivBoard680Mapstruct.class);
@Transactional(readOnly = true)
public Page<BoardDto> findAll(final BoardDto dto, Pageable pageable) {
pageable = JpaUtil.getPagingInfo(pageable);
return repository.findAll(dto, pageable);
}
@Transactional(readOnly = true)
public Page<MinCivBoard680> findAll2(final MinCivBoard680 entity, Pageable pageable) {
pageable = JpaUtil.getPagingInfo(pageable);
ExampleMatcher exampleMatcher = ExampleMatcher.matchingAll()
.withMatcher("ciTitle", contains())
.withMatcher("ciName", contains());
Example<MinCivBoard680> example = Example.of(entity, exampleMatcher);
return repository.findAll(example, pageable);
}
@Override
@Transactional
public int modifyByCiCode(Long ciCode) {
return repository.updateInHitForMinCivBoard680(ciCode);
}
@Override
@Transactional
public void saveBoard(BoardDto dto) {
MinCivBoard680 entity = null;
// update 인 경우
if(Checks.isNotEmpty(dto.getCiCode())) {
entity = repository.findById(dto.getCiCode()).orElseThrow(() -> new CustomBaseException(ErrorCode.DATA_NOT_FOUND));
if(!entity.getCiPass().equals(passwordEncoder.encode(dto.getCiPass()))){
throw new CustomBaseException(ErrorCode.MISMATCH_PASSWORD);
}
entity.setCiTitle(dto.getCiTitle());
entity.setCiContents(dto.getCiContents());
}else {
dto.setCiCode(repository.getCiCode());
dto.setCiContentno(dto.getCiCode());
if (Checks.isEmpty(dto.getCiRef()) || dto.getCiRef() == 0L) {
dto.setCiRef(dto.getCiCode());
dto.setCiStep(0L);
dto.setCiRevel(0L);
}
dto.setCiPass(passwordEncoder.encode(dto.getCiPass()));
dto.setCiIp(CommUtil.getDeviceInfo().getIp());
entity = mapstruct.toEntity(dto);
}
repository.save(entity);
}
@Override
@Transactional
public void removeBoard(Long ciCode) {
MinCivBoard680 savedEntity = repository.findById(ciCode).orElseThrow(() -> new CustomBaseException(ErrorCode.NOT_FOUND));
if(!Objects.equal(HeaderUtil.getUserId(), savedEntity.getCiId())) throw new CustomBaseException("삭제 권한(게시글 소유자)이 없는 사용자 입니다");
// 댓글 존재 여부 조회
List<MinCivBoard680> list = repository.findByCiRef(ciCode);
if(list.size() > 1) throw new CustomBaseException("삭제 할 수 없는 게시글 입니다[댓글 존재]");
repository.deleteById(ciCode);
}
}
Loading…
Cancel
Save