TbNodeService.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.its.api.op.service.node;
  2. import com.its.api.op.model.dto.node.TbNodeDto;
  3. import com.its.api.op.model.entity.node.TbNode;
  4. import com.its.api.op.repository.node.TbNodeRepository;
  5. import lombok.RequiredArgsConstructor;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.transaction.annotation.Transactional;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.NoSuchElementException;
  12. import java.util.Optional;
  13. @Slf4j
  14. @RequiredArgsConstructor
  15. @Service
  16. public class TbNodeService {
  17. private final TbNodeRepository repo;
  18. // 데이터 1건 조회, 없으면 exception
  19. private TbNode requireOne(Long id) {
  20. return repo.findById(id)
  21. .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
  22. }
  23. // 전체 데이터 조회
  24. @Transactional(readOnly = true)
  25. public List<TbNodeDto> findAll() {
  26. List<TbNodeDto> result = new ArrayList<>();
  27. List<TbNode> data = this.repo.findAll();
  28. for (TbNode entity : data) {
  29. result.add(entity.toDto());
  30. }
  31. return result;
  32. }
  33. // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
  34. @Transactional(readOnly = true)
  35. public TbNodeDto findById(Long id) {
  36. TbNode entity = requireOne(id);
  37. return entity.toDto();
  38. }
  39. // 데이터 변경
  40. @Transactional
  41. public TbNodeDto updateById(Long id, TbNodeDto.TbNodeUpdReq req) {
  42. TbNode entity = requireOne(id);
  43. entity.updateInfo(req);
  44. this.repo.save(entity);
  45. return entity.toDto();
  46. }
  47. // 노드명 변경
  48. @Transactional
  49. public TbNodeDto updateNameById(Long id, TbNodeDto.TbNodeNameUpdReq req) {
  50. TbNode entity = requireOne(id);
  51. entity.updateName(req);
  52. this.repo.save(entity);
  53. return entity.toDto();
  54. }
  55. // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
  56. @Transactional
  57. public List<TbNodeDto> mergeInfoList(List<TbNodeDto.TbNodeUpdReq> reqList) {
  58. List<TbNodeDto> result = new ArrayList<>();
  59. for (TbNodeDto.TbNodeUpdReq req : reqList) {
  60. TbNode obj = req.toEntity();
  61. this.repo.save(obj);
  62. result.add(obj.toDto());
  63. }
  64. return result;
  65. }
  66. // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
  67. @Transactional
  68. public TbNodeDto mergeInfo(TbNodeDto.TbNodeUpdReq req) {
  69. TbNode obj = req.toEntity();
  70. this.repo.save(obj);
  71. return obj.toDto();
  72. }
  73. // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
  74. @Transactional
  75. public TbNodeDto deleteById(Long id) {
  76. TbNode entity = requireOne(id);
  77. this.repo.deleteById(id);
  78. return entity.toDto();
  79. }
  80. // 정보 삭제-목록, 존재하는 데이터 만 삭제
  81. @Transactional
  82. public List<TbNodeDto> deleteByIds(List<Long> ids) {
  83. List<TbNodeDto> result = new ArrayList<>();
  84. for (Long id : ids) {
  85. Optional<TbNode> obj = this.repo.findById(id);
  86. if (obj.isPresent()) {
  87. this.repo.deleteById(id);
  88. result.add(obj.get().toDto());
  89. }
  90. }
  91. return result;
  92. }
  93. /**
  94. * 지도검색
  95. * @param filter
  96. * @return
  97. */
  98. public List<TbNodeDto> findByFilter(String filter) {
  99. List<TbNodeDto> result = new ArrayList<>();
  100. List<TbNode> data = this.repo.findAll();
  101. data.forEach(obj -> {
  102. if (filter == null || filter.isEmpty()) {
  103. result.add(obj.toDto());
  104. }
  105. else {
  106. if ((obj.getNodeName() != null && obj.getNodeName().contains(filter)) || String.valueOf(obj.getNodeId()).contains(filter)) {
  107. result.add(obj.toDto());
  108. }
  109. }
  110. });
  111. return result;
  112. }
  113. }