diff --git a/src/main/java/com/example/sinitto/guardGuideline/controller/GuardGuidelineController.java b/src/main/java/com/example/sinitto/guardGuideline/controller/GuardGuidelineController.java index 94ae661..9cddc80 100644 --- a/src/main/java/com/example/sinitto/guardGuideline/controller/GuardGuidelineController.java +++ b/src/main/java/com/example/sinitto/guardGuideline/controller/GuardGuidelineController.java @@ -1,53 +1,57 @@ package com.example.sinitto.guardGuideline.controller; +import com.example.sinitto.common.annotation.MemberId; import com.example.sinitto.guardGuideline.dto.GuardGuidelineRequest; import com.example.sinitto.guardGuideline.dto.GuardGuidelineResponse; +import com.example.sinitto.guardGuideline.entity.GuardGuideline; +import com.example.sinitto.guardGuideline.service.GuardGuidelineService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("/api/guardguidelines") -@Tag(name = "[미구현][의논필요]보호자용 가이드라인", description = "보호자가 입력하는 시니어별 가이드라인 관련 API") +@Tag(name = "보호자용 가이드라인", description = "보호자가 입력하는 시니어별 가이드라인 관련 API") public class GuardGuidelineController { + private final GuardGuidelineService guardGuidelineService; + + public GuardGuidelineController(GuardGuidelineService guardGuidelineService) {this.guardGuidelineService = guardGuidelineService;} + @Operation(summary = "가이드라인 추가", description = "보호자가 시니어별 가이드라인을 추가합니다.") @PostMapping - public ResponseEntity addGuideline(@RequestBody GuardGuidelineRequest request) { - // 임시 응답 + public ResponseEntity addGuardGuideline(@MemberId Long memberId, @RequestBody GuardGuidelineRequest guardGuidelineRequest) { + guardGuidelineService.addGuardGuideline(memberId, guardGuidelineRequest); return ResponseEntity.ok("가이드라인이 추가되었습니다."); } @Operation(summary = "카테고리에 해당하는 모든 가이드라인 조회", description = "시니또용 앱에서 카테고리에 해당하는 모든 가이드라인들을 요청할 때 필요합니다.") - @GetMapping("/{seniorId}/{typeId}") - public ResponseEntity> getGuidelinesByCategory(@PathVariable Long seniorId, @PathVariable Long typeId) { - // 임시 응답 - return ResponseEntity.ok(new ArrayList<>()); + @GetMapping("/{seniorId}/{type}") + public ResponseEntity> getGuardGuidelinesByCategory(@PathVariable Long seniorId, @PathVariable GuardGuideline.Type type) { + return ResponseEntity.ok(guardGuidelineService.readAllGuardGuidelinesByCategory(seniorId, type)); } @Operation(summary = "가이드라인 수정", description = "보호자가 특정 가이드라인을 수정할 때 필요합니다.") @PutMapping("/{guidelineId}") - public ResponseEntity updateGuideline(@PathVariable Long guidelineId, @RequestBody GuardGuidelineRequest request) { - // 임시 응답 + public ResponseEntity updateGuardGuideline(@MemberId Long memberId, @PathVariable Long guidelineId, @RequestBody GuardGuidelineRequest guardGuidelineRequest) { + guardGuidelineService.updateGuardGuideline(memberId, guidelineId, guardGuidelineRequest); return ResponseEntity.ok("가이드라인이 수정되었습니다."); } @Operation(summary = "모든 가이드라인 조회(시니어별로)", description = "보호자가 가이드라인 수정을 위해 시니어별로 모든 가이드라인을 요청할 때 필요합니다.") @GetMapping("/{seniorId}") - public ResponseEntity> getAllGuidelinesBySenior(@PathVariable Long seniorId) { - // 임시 응답 - return ResponseEntity.ok(new ArrayList<>()); + public ResponseEntity> getAllGuardGuidelinesBySenior(@PathVariable Long seniorId) { + + return ResponseEntity.ok(guardGuidelineService.readAllGuardGuidelinesBySenior(seniorId)); } @Operation(summary = "특정 가이드라인 조회", description = "보호자용 API입니다.") @GetMapping("/{guidelineId}") - public ResponseEntity getGuideline(@PathVariable Long guidelineId) { - // 임시 응답 - return ResponseEntity.ok(new GuardGuidelineResponse(null, null)); + public ResponseEntity getGuardGuideline(@PathVariable Long guidelineId) { + return ResponseEntity.ok(guardGuidelineService.readGuardGuideline(guidelineId)); } } diff --git a/src/main/java/com/example/sinitto/guardGuideline/controller/GuardGuidelineControllerAdvice.java b/src/main/java/com/example/sinitto/guardGuideline/controller/GuardGuidelineControllerAdvice.java new file mode 100644 index 0000000..c7543ec --- /dev/null +++ b/src/main/java/com/example/sinitto/guardGuideline/controller/GuardGuidelineControllerAdvice.java @@ -0,0 +1,33 @@ +package com.example.sinitto.guardGuideline.controller; + +import com.example.sinitto.guardGuideline.exception.GuardGuidelineNotFoundException; +import com.example.sinitto.guardGuideline.exception.SeniorAndGuardMemberMismatchException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ProblemDetail; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.net.URI; + +@RestControllerAdvice(basePackages = "com.example.sinitto.guardGuideline") +public class GuardGuidelineControllerAdvice { + + @ExceptionHandler(GuardGuidelineNotFoundException.class) + public ResponseEntity handleGuardGuidelineNotFoundException(GuardGuidelineNotFoundException e) { + ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND, e.getMessage()); + problemDetail.setType(URI.create("/error/guideline-not-found")); + problemDetail.setTitle("Guideline Not Found"); + + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(problemDetail); + } + + @ExceptionHandler(SeniorAndGuardMemberMismatchException.class) + public ResponseEntity handleSeniorAndGuardMemberMismatchException(SeniorAndGuardMemberMismatchException e) { + ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, e.getMessage()); + problemDetail.setType(URI.create("/error/member-mismatch")); + problemDetail.setTitle("Senior and Guard Member Mismatch"); + + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(problemDetail); + } +} diff --git a/src/main/java/com/example/sinitto/guardGuideline/dto/GuardGuidelineRequest.java b/src/main/java/com/example/sinitto/guardGuideline/dto/GuardGuidelineRequest.java index 05d6635..a30db10 100644 --- a/src/main/java/com/example/sinitto/guardGuideline/dto/GuardGuidelineRequest.java +++ b/src/main/java/com/example/sinitto/guardGuideline/dto/GuardGuidelineRequest.java @@ -1,4 +1,10 @@ package com.example.sinitto.guardGuideline.dto; -public record GuardGuidelineRequest() { -} +import com.example.sinitto.guardGuideline.entity.GuardGuideline; + +public record GuardGuidelineRequest( + Long seniorId, + GuardGuideline.Type type, + String title, + String content +) {} diff --git a/src/main/java/com/example/sinitto/guardGuideline/dto/GuardGuidelineResponse.java b/src/main/java/com/example/sinitto/guardGuideline/dto/GuardGuidelineResponse.java index a820d21..06ebce6 100644 --- a/src/main/java/com/example/sinitto/guardGuideline/dto/GuardGuidelineResponse.java +++ b/src/main/java/com/example/sinitto/guardGuideline/dto/GuardGuidelineResponse.java @@ -1,6 +1,9 @@ package com.example.sinitto.guardGuideline.dto; +import com.example.sinitto.guardGuideline.entity.GuardGuideline; + public record GuardGuidelineResponse( + GuardGuideline.Type type, String title, String content) { } diff --git a/src/main/java/com/example/sinitto/guardGuideline/entity/GuardGuideLine.java b/src/main/java/com/example/sinitto/guardGuideline/entity/GuardGuideLine.java deleted file mode 100644 index 686e128..0000000 --- a/src/main/java/com/example/sinitto/guardGuideline/entity/GuardGuideLine.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.example.sinitto.guardGuideline.entity; - -import com.example.sinitto.member.entity.Senior; -import jakarta.persistence.*; -import jakarta.validation.constraints.NotNull; -import org.hibernate.annotations.OnDelete; -import org.hibernate.annotations.OnDeleteAction; - -@Entity -public class GuardGuideLine { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @NotNull - private String content; - @NotNull - private String type; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "senior_id") - @NotNull - @OnDelete(action = OnDeleteAction.CASCADE) - private Senior senior; - -} diff --git a/src/main/java/com/example/sinitto/guardGuideline/entity/GuardGuideline.java b/src/main/java/com/example/sinitto/guardGuideline/entity/GuardGuideline.java new file mode 100644 index 0000000..0bf66ee --- /dev/null +++ b/src/main/java/com/example/sinitto/guardGuideline/entity/GuardGuideline.java @@ -0,0 +1,70 @@ +package com.example.sinitto.guardGuideline.entity; + +import com.example.sinitto.member.entity.Senior; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + +@Entity +public class GuardGuideline { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @NotNull + @Enumerated(EnumType.STRING) + private Type type; + @NotNull + private String title; + @NotNull + private String content; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "senior_id") + @NotNull + @OnDelete(action = OnDeleteAction.CASCADE) + private Senior senior; + + protected GuardGuideline() { + } + + public GuardGuideline(Type type, String title, String content, Senior senior) { + this.type = type; + this.title = title; + this.content = content; + this.senior = senior; + } + + + public void updateGuardGuideline(Type type, String title, String content) { + this.type = type; + this.title = title; + this.content = content; + } + + public Long getId() { + return id; + } + + public Type getType() { + return type; + } + + public String getTitle() { + return title; + } + + public String getContent() { + return content; + } + + public Senior getSenior() { + return senior; + } + + + public enum Type { + TAXI, + DELIVERY + } +} diff --git a/src/main/java/com/example/sinitto/guardGuideline/exception/GuardGuidelineNotFoundException.java b/src/main/java/com/example/sinitto/guardGuideline/exception/GuardGuidelineNotFoundException.java new file mode 100644 index 0000000..c488a16 --- /dev/null +++ b/src/main/java/com/example/sinitto/guardGuideline/exception/GuardGuidelineNotFoundException.java @@ -0,0 +1,5 @@ +package com.example.sinitto.guardGuideline.exception; + +public class GuardGuidelineNotFoundException extends RuntimeException { + public GuardGuidelineNotFoundException(String message) {super(message);} +} diff --git a/src/main/java/com/example/sinitto/guardGuideline/exception/SeniorAndGuardMemberMismatchException.java b/src/main/java/com/example/sinitto/guardGuideline/exception/SeniorAndGuardMemberMismatchException.java new file mode 100644 index 0000000..87d643d --- /dev/null +++ b/src/main/java/com/example/sinitto/guardGuideline/exception/SeniorAndGuardMemberMismatchException.java @@ -0,0 +1,7 @@ +package com.example.sinitto.guardGuideline.exception; + +public class SeniorAndGuardMemberMismatchException extends RuntimeException { + public SeniorAndGuardMemberMismatchException(String message) { + super(message); + } +} diff --git a/src/main/java/com/example/sinitto/guardGuideline/repository/GuardGuidelineRepository.java b/src/main/java/com/example/sinitto/guardGuideline/repository/GuardGuidelineRepository.java new file mode 100644 index 0000000..7331564 --- /dev/null +++ b/src/main/java/com/example/sinitto/guardGuideline/repository/GuardGuidelineRepository.java @@ -0,0 +1,15 @@ +package com.example.sinitto.guardGuideline.repository; + +import com.example.sinitto.guardGuideline.entity.GuardGuideline; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + + +@Repository +public interface GuardGuidelineRepository extends JpaRepository { + List findBySeniorId(Long seniorId); + + List findBySeniorIdAndType(Long seniorId, GuardGuideline.Type type); +} diff --git a/src/main/java/com/example/sinitto/guardGuideline/service/GuardGuidelineService.java b/src/main/java/com/example/sinitto/guardGuideline/service/GuardGuidelineService.java new file mode 100644 index 0000000..c1e36b9 --- /dev/null +++ b/src/main/java/com/example/sinitto/guardGuideline/service/GuardGuidelineService.java @@ -0,0 +1,86 @@ +package com.example.sinitto.guardGuideline.service; + + +import com.example.sinitto.guard.exception.SeniorNotFoundException; +import com.example.sinitto.guard.repository.SeniorRepository; +import com.example.sinitto.guardGuideline.dto.GuardGuidelineRequest; +import com.example.sinitto.guardGuideline.dto.GuardGuidelineResponse; +import com.example.sinitto.guardGuideline.entity.GuardGuideline; +import com.example.sinitto.guardGuideline.entity.GuardGuideline.Type; +import com.example.sinitto.guardGuideline.exception.GuardGuidelineNotFoundException; +import com.example.sinitto.guardGuideline.exception.SeniorAndGuardMemberMismatchException; +import com.example.sinitto.guardGuideline.repository.GuardGuidelineRepository; +import com.example.sinitto.member.entity.Senior; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class GuardGuidelineService { + + private final GuardGuidelineRepository guardGuidelineRepository; + private final SeniorRepository seniorRepository; + + public GuardGuidelineService (GuardGuidelineRepository guardGuidelineRepository, SeniorRepository seniorRepository){ + this.guardGuidelineRepository = guardGuidelineRepository; + this.seniorRepository = seniorRepository; + } + + @Transactional + public void addGuardGuideline(Long memberId, GuardGuidelineRequest guardGuidelineRequest) { + Senior senior = seniorRepository.findById(guardGuidelineRequest.seniorId()).orElseThrow( + () -> new SeniorNotFoundException("시니어를 찾을 수 없습니다.") + ); + if (senior.isNotGuard(memberId)) { + throw new SeniorAndGuardMemberMismatchException("해당 Guard의 Senior가 아닙니다."); + } + + guardGuidelineRepository.save(new GuardGuideline(guardGuidelineRequest.type(), guardGuidelineRequest.title(), guardGuidelineRequest.content(), senior)); + } + + @Transactional(readOnly = true) + public List readAllGuardGuidelinesByCategory(Long seniorId, Type type){ + List guardGuidelines = guardGuidelineRepository.findBySeniorIdAndType(seniorId, type); + + return guardGuidelines.stream() + .map(m -> new GuardGuidelineResponse(m.getType(), m.getTitle(), m.getContent())) + .toList(); + } + + @Transactional + public void updateGuardGuideline(Long memberId, Long guidelineId, GuardGuidelineRequest guardGuidelineRequest) { + GuardGuideline guardGuideline = guardGuidelineRepository.findById(guidelineId).orElseThrow( + ()-> new GuardGuidelineNotFoundException("해당 가이드라인이 존재하지 않습니다.") + ); + + Senior senior = seniorRepository.findById(guardGuidelineRequest.seniorId()).orElseThrow( + () -> new SeniorNotFoundException("시니어를 찾을 수 없습니다.") + ); + + if (senior.isNotGuard(memberId)) { + throw new SeniorAndGuardMemberMismatchException("해당 Guard의 Senior가 아닙니다."); + } + + guardGuideline.updateGuardGuideline(guardGuidelineRequest.type(), guardGuidelineRequest.title(), guardGuidelineRequest.content()); + } + + @Transactional(readOnly = true) + public List readAllGuardGuidelinesBySenior(Long seniorId){ + List guardGuidelines = guardGuidelineRepository.findBySeniorId(seniorId); + + return guardGuidelines.stream() + .map(m -> new GuardGuidelineResponse(m.getType(), m.getTitle(), m.getContent())) + .toList(); + } + + @Transactional(readOnly = true) + public GuardGuidelineResponse readGuardGuideline(Long guidelineId){ + GuardGuideline guardGuideline = guardGuidelineRepository.findById(guidelineId).orElseThrow( + ()-> new GuardGuidelineNotFoundException("해당 가이드라인이 존재하지 않습니다.") + ); + + return new GuardGuidelineResponse(guardGuideline.getType(), guardGuideline.getTitle(), guardGuideline.getContent()); + } + +} diff --git a/src/main/java/com/example/sinitto/member/entity/Senior.java b/src/main/java/com/example/sinitto/member/entity/Senior.java index bba956e..a2bd2e2 100644 --- a/src/main/java/com/example/sinitto/member/entity/Senior.java +++ b/src/main/java/com/example/sinitto/member/entity/Senior.java @@ -31,6 +31,10 @@ public Senior(String name, String phoneNumber, Member member) { protected Senior() { } + public boolean isNotGuard(Long memberId) { + return !this.member.getId().equals(memberId); + } + public void updateSenior(String name, String phoneNumber) { this.name = name; this.phoneNumber = phoneNumber; diff --git a/src/test/java/com/example/sinitto/guardGuideline/entity/GuardGuidelineTest.java b/src/test/java/com/example/sinitto/guardGuideline/entity/GuardGuidelineTest.java new file mode 100644 index 0000000..7f890cd --- /dev/null +++ b/src/test/java/com/example/sinitto/guardGuideline/entity/GuardGuidelineTest.java @@ -0,0 +1,58 @@ +package com.example.sinitto.guardGuideline.entity; + +import com.example.sinitto.member.entity.Member; +import com.example.sinitto.member.entity.Senior; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +class GuardGuidelineTest { + + private Member member; + private Senior senior; + + @BeforeEach + void setUp() { + // 테스트용 Member와 Senior 객체 생성 + member = new Member("John Doe", "123456789", "john@example.com", true); + senior = new Senior("Jane Doe", "987654321", member); + } + + @Test + @DisplayName("GuardGuideline 객체 생성 테스트") + void createGuardGuideline() { + GuardGuideline guideline = new GuardGuideline(GuardGuideline.Type.TAXI, "Taxi Guidelines", "Details about taxi guidelines", senior); + + assertEquals(GuardGuideline.Type.TAXI, guideline.getType()); + assertEquals("Taxi Guidelines", guideline.getTitle()); + assertEquals("Details about taxi guidelines", guideline.getContent()); + assertEquals(senior, guideline.getSenior()); + assertEquals(senior.getMember(), member); // Senior와 Member의 관계 확인 + } + + @Test + @DisplayName("GuardGuideline 업데이트 메서드 테스트") + void updateGuardGuideline() { + GuardGuideline guideline = new GuardGuideline(GuardGuideline.Type.TAXI, "Old Title", "Old Content", senior); + + guideline.updateGuardGuideline(GuardGuideline.Type.DELIVERY, "New Title", "New Content"); + + assertEquals(GuardGuideline.Type.DELIVERY, guideline.getType()); + assertEquals("New Title", guideline.getTitle()); + assertEquals("New Content", guideline.getContent()); + } + + @Test + @DisplayName("GuardGuideline 기본 생성자 테스트") + void guardGuidelineDefaultConstructor() { + GuardGuideline guideline = new GuardGuideline(); + assertNull(guideline.getId()); + assertNull(guideline.getType()); + assertNull(guideline.getTitle()); + assertNull(guideline.getContent()); + assertNull(guideline.getSenior()); + } +} diff --git a/src/test/java/com/example/sinitto/guardGuideline/repository/GuardGuidelineRepositoryTest.java b/src/test/java/com/example/sinitto/guardGuideline/repository/GuardGuidelineRepositoryTest.java new file mode 100644 index 0000000..80a3b2f --- /dev/null +++ b/src/test/java/com/example/sinitto/guardGuideline/repository/GuardGuidelineRepositoryTest.java @@ -0,0 +1,92 @@ +package com.example.sinitto.guardGuideline.repository; + + +import com.example.sinitto.guard.repository.SeniorRepository; +import com.example.sinitto.guardGuideline.entity.GuardGuideline; +import com.example.sinitto.guardGuideline.entity.GuardGuideline.Type; +import com.example.sinitto.member.entity.Member; +import com.example.sinitto.member.entity.Senior; +import com.example.sinitto.member.repository.MemberRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@DataJpaTest +class GuardGuidelineRepositoryTest { + + @Autowired + private GuardGuidelineRepository guardGuidelineRepository; + + @Autowired + private SeniorRepository seniorRepository; + + @Autowired + private MemberRepository memberRepository; + + private Senior senior; + + @BeforeEach + void setUp() { + Member member = new Member("Test Member", "010-1234-5678", "test@member.com", true); + memberRepository.save(member); + + senior = new Senior("Test Senior", "010-9876-5432", member); + seniorRepository.save(senior); + + GuardGuideline guideline1 = new GuardGuideline(Type.TAXI, "Taxi Guideline", "Content for taxi", senior); + GuardGuideline guideline2 = new GuardGuideline(Type.DELIVERY, "Delivery Guideline", "Content for delivery", senior); + guardGuidelineRepository.save(guideline1); + guardGuidelineRepository.save(guideline2); + } + + @Test + @DisplayName("Senior ID로 GuardGuideline 목록 조회 테스트") + void testFindBySeniorId() { + List guidelines = guardGuidelineRepository.findBySeniorId(senior.getId()); + + assertEquals(2, guidelines.size()); + assertTrue(guidelines.stream().anyMatch(g -> g.getTitle().equals("Taxi Guideline"))); + assertTrue(guidelines.stream().anyMatch(g -> g.getTitle().equals("Delivery Guideline"))); + } + + @Test + @DisplayName("Senior ID와 Type으로 GuardGuideline 조회 테스트") + void testFindBySeniorIdAndType() { + List taxiGuidelines = guardGuidelineRepository.findBySeniorIdAndType(senior.getId(), Type.TAXI); + + assertEquals(1, taxiGuidelines.size()); + assertEquals("Taxi Guideline", taxiGuidelines.get(0).getTitle()); + assertEquals(Type.TAXI, taxiGuidelines.get(0).getType()); + } + + @Test + @DisplayName("존재하지 않는 Senior ID와 Type으로 GuardGuideline 조회 테스트") + void testFindBySeniorIdAndType_NoResult() { + Long nonexistentSeniorId = -1L; // 존재하지 않는 Senior ID + List guidelines = guardGuidelineRepository.findBySeniorIdAndType(nonexistentSeniorId, Type.DELIVERY); + + assertTrue(guidelines.isEmpty()); + } + + + @Test + @DisplayName("GuardGuideline 저장 및 삭제 테스트") + void testSaveAndDelete() { + GuardGuideline guideline = new GuardGuideline(Type.DELIVERY, "New Delivery Guideline", "New content", senior); + guardGuidelineRepository.save(guideline); + + List guidelines = guardGuidelineRepository.findBySeniorIdAndType(senior.getId(), Type.DELIVERY); + assertTrue(guidelines.stream().anyMatch(g -> g.getTitle().equals("New Delivery Guideline"))); + + guardGuidelineRepository.delete(guideline); + + List deletedGuidelines = guardGuidelineRepository.findBySeniorIdAndType(senior.getId(), Type.DELIVERY); + assertFalse(deletedGuidelines.stream().anyMatch(g -> g.getTitle().equals("New Delivery Guideline"))); + } +}