“정책 찜하기”한 경우 이것을 해제하기 위한 기능을 구현했다.
1. 프로젝트 구조
src/main/java/com/example/withpeace/
│
├── domain/ # 도메인 모델 (엔티티)
│ ├── YouthPolicy.java # 청년 정책 엔티티
│ └── FavoritePolicy.java # 청년 정책 찜하기 엔티티
│
├── repository/ # 데이터 접근 계층
│ ├── YouthPolicyRepository.java # 청년 정책 레포지토리
│ └── FavoritePolicyRepository.java # 정책 찜하기 레포지토리
│
├── controller/ # 컨트롤러 계층
│ └── PolicyController.java # 정책 관련 API 엔드포인트
│
└── service/ # 비즈니스 로직 계층
└── PolicyService.java # 정책 관련 비즈니스 로직
2. 컨트롤러 구현
YouthPolicyController
public class YouthPolicyController {
private final YouthPolicyService youthPolicyService;
// ... (기존 코드 생략)
// 정책 찜하기 해제
@DeleteMapping("/{policyId}/favorites")
public ResponseDto<?> deleteFavoritePolicy(@UserId Long userId, @PathVariable String policyId) {
youthPolicyService.deleteFavoritePolicy(userId, policyId);
return ResponseDto.ok(true);
}
}
사용자 ID와 정책 ID를 파라미터로 받아 서비스로 전달한다.
3. 서비스 구현
YouthPolicyService
@Service
@RequiredArgsConstructor
@Slf4j
public class YouthPolicyService {
// ... (기존 코드 생략)
@Transactional
public void deleteFavoritePolicy(Long userId, String policyId) {
User user = getUserById(userId);
FavoritePolicy favoritePolicy = favoritePolicyRepository.findByUserAndPolicyId(user, policyId);
try {
// 찜하기 해제가 되어있지 않은 경우 찜하기 해제 처리 수행
if(favoritePolicy != null)
favoritePolicyRepository.delete(favoritePolicy);
} catch (Exception e) {
throw new CommonException(ErrorCode.FAVORITE_YOUTH_POLICY_ERROR);
}
}
}
- 사용자를 조회한다. (존재 여부 확인)
- 해당 사용자의 정책 찜하기 정보를 조회한다.
- 찜하기 정보가 존재하는 경우에만 삭제를 수행한다.
`findByUserAndPolicyId` 는 사용자와 정책 ID로 찜한 정책을 찾는다.
4. API 응답 예시
요청 URL
[DELETE] http://cheongha.site/api/v1/policies/R2024080625806/favorites
Response Body
{
"data": true
"error": null
}
반응형
'Projects > 청하-청년을 위한 커뮤니티 서비스' 카테고리의 다른 글
[청하] 34. 정책 찜하기 기능 - 유니크 제약조건 문제 해결 (0) | 2024.10.23 |
---|---|
[청하] 33. 정책 조회 API - 찜하기 여부 추가 & 인증 설정 변경 (2) | 2024.10.23 |
[청하] 31. 찜한 정책 리스트 조회 기능 구현 (2) | 2024.10.21 |
[청하] 30. 정책 찜하기 기능 구현 (0) | 2024.10.21 |
[청하] 29. GCP 환경 구축 - SSH 키 설정 및 CI/CD 파이프라인 구성 (2) | 2024.10.19 |
댓글