Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.carecode.domain.admin.controller;

import com.carecode.core.exception.CareServiceException;
import com.carecode.core.exception.ResourceNotFoundException;
import com.carecode.core.security.CurrentUserFacade;
import com.carecode.domain.policy.entity.Policy;
import com.carecode.domain.policy.repository.PolicyRepository;
Expand Down Expand Up @@ -39,7 +39,7 @@ public ResponseEntity<Map<String, Object>> verify(
@Parameter(description = "금액 근거 출처 URL") @RequestParam(required = false) String sourceUrl) {

Policy policy = policyRepository.findById(policyId)
.orElseThrow(() -> new CareServiceException("정책을 찾을 수 없습니다: " + policyId));
.orElseThrow(() -> new ResourceNotFoundException("정책을 찾을 수 없습니다: " + policyId));

policy.setVerifiedAt(LocalDateTime.now());
policy.setVerifiedBy(currentUserFacade.requireCurrentUserEmail());
Expand All @@ -59,7 +59,7 @@ public ResponseEntity<Map<String, Object>> verify(
@Operation(summary = "검증 표시 해제", description = "추정치로 되돌림")
public ResponseEntity<Void> unverify(@PathVariable Long policyId) {
Policy policy = policyRepository.findById(policyId)
.orElseThrow(() -> new CareServiceException("정책을 찾을 수 없습니다: " + policyId));
.orElseThrow(() -> new ResourceNotFoundException("정책을 찾을 수 없습니다: " + policyId));
policy.setVerifiedAt(null);
policy.setVerifiedBy(null);
policyRepository.save(policy);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.carecode.domain.admin.service;

import com.carecode.core.annotation.LogExecutionTime;
import com.carecode.core.exception.CareServiceException;
import com.carecode.core.exception.ResourceNotFoundException;
import com.carecode.domain.admin.dto.AdminBookingDetailResponse;
import com.carecode.domain.admin.dto.AdminBookingListResponse;
import com.carecode.domain.facility.dto.response.StatusDistribution;
Expand Down Expand Up @@ -129,7 +129,7 @@ public AdminBookingSearchResponse searchBookings(AdminBookingSearchRequest reque
@LogExecutionTime
public AdminBookingDetailResponse getBookingDetail(Long bookingId) {
CareFacilityBooking booking = bookingRepository.findById(bookingId)
.orElseThrow(() -> new CareServiceException("예약을 찾을 수 없습니다: " + bookingId));
.orElseThrow(() -> new ResourceNotFoundException("예약을 찾을 수 없습니다: " + bookingId));

return convertToAdminDetailResponse(booking);
}
Expand All @@ -140,7 +140,7 @@ public AdminBookingDetailResponse getBookingDetail(Long bookingId) {
public AdminBookingDetailResponse updateBookingStatus(Long bookingId,
AdminStatusUpdateRequest request) {
CareFacilityBooking booking = bookingRepository.findById(bookingId)
.orElseThrow(() -> new CareServiceException("예약을 찾을 수 없습니다: " + bookingId));
.orElseThrow(() -> new ResourceNotFoundException("예약을 찾을 수 없습니다: " + bookingId));

// 없는 상태면 valueOf 가 IllegalArgumentException 을 던져 500 이 됐다. 400 으로 돌려준다.
CareFacilityBooking.BookingStatus newStatus;
Expand Down Expand Up @@ -168,7 +168,7 @@ public AdminBookingDetailResponse updateBookingStatus(Long bookingId,
@Transactional
public void deleteBooking(Long bookingId) {
CareFacilityBooking booking = bookingRepository.findById(bookingId)
.orElseThrow(() -> new CareServiceException("예약을 찾을 수 없습니다: " + bookingId));
.orElseThrow(() -> new ResourceNotFoundException("예약을 찾을 수 없습니다: " + bookingId));

bookingRepository.delete(booking);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.carecode.core.annotation.LogExecutionTime;
import com.carecode.core.exception.CareServiceException;
import com.carecode.core.exception.ResourceNotFoundException;
import com.carecode.domain.chatbot.dto.request.ChatbotMessageRequest;
import com.carecode.domain.chatbot.dto.response.ChatbotMessageResponse;
import com.carecode.domain.chatbot.dto.response.ChatbotChatHistoryDtoResponse;
Expand Down Expand Up @@ -205,7 +206,7 @@ public void processFeedback(Long messageId, boolean isHelpful) {

try {
ChatMessage message = chatMessageRepository.findById(messageId)
.orElseThrow(() -> new CareServiceException("메시지를 찾을 수 없습니다."));
.orElseThrow(() -> new ResourceNotFoundException("메시지를 찾을 수 없습니다."));

message.setIsHelpful(isHelpful);
chatMessageRepository.save(message);
Expand Down Expand Up @@ -379,7 +380,7 @@ private String generateSessionId() {
private User resolveUser(String userIdOrEmail) {
return userRepository.findByUserId(userIdOrEmail)
.or(() -> userRepository.findByEmail(userIdOrEmail))
.orElseThrow(() -> new CareServiceException("사용자를 찾을 수 없습니다: " + userIdOrEmail));
.orElseThrow(() -> new ResourceNotFoundException("사용자를 찾을 수 없습니다: " + userIdOrEmail));
}

// 의도 분석
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ private User getCurrentUser() {
if (authentication == null || !authentication.isAuthenticated() ||
"anonymousUser".equals(authentication.getName())) {
log.warn("getCurrentUser() - 인증되지 않은 사용자");
throw new CareServiceException("인증된 사용자 정보를 찾을 수 없습니다.");
throw new ResourceNotFoundException("인증된 사용자 정보를 찾을 수 없습니다.");
}

String userEmail = authentication.getName();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.carecode.core.analytics.EventLogger;
import com.carecode.core.analytics.EventType;
import com.carecode.core.exception.CareServiceException;
import com.carecode.core.exception.ResourceNotFoundException;
import com.carecode.domain.facility.dto.response.AdmissionForecastResponse;
import com.carecode.domain.facility.entity.CareFacility;
import com.carecode.domain.facility.entity.FacilityCapacitySnapshot;
Expand Down Expand Up @@ -41,7 +41,7 @@ public class AdmissionForecastService {
/** 아이 월령 기준으로 목표 시점까지 자리가 날 확률을 추정한다. */
public AdmissionForecastResponse forecast(Long facilityId, Integer childAgeMonths, Integer horizonMonths) {
CareFacility facility = careFacilityRepository.findById(facilityId)
.orElseThrow(() -> new CareServiceException("시설을 찾을 수 없습니다: " + facilityId));
.orElseThrow(() -> new ResourceNotFoundException("시설을 찾을 수 없습니다: " + facilityId));

LocalDate today = LocalDate.now();
int horizon = horizonMonths != null && horizonMonths > 0 ? horizonMonths : DEFAULT_HORIZON_MONTHS;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.carecode.core.analytics.EventLogger;
import com.carecode.core.analytics.EventType;
import com.carecode.core.exception.CareServiceException;
import com.carecode.core.exception.ResourceNotFoundException;
import com.carecode.domain.facility.dto.response.FacilityPopularityResponse;
import com.carecode.domain.facility.entity.CareFacility;
import com.carecode.domain.facility.entity.FacilityCapacitySnapshot;
Expand Down Expand Up @@ -45,7 +45,7 @@ public class FacilityPopularityService {

public FacilityPopularityResponse analyze(Long facilityId) {
CareFacility facility = careFacilityRepository.findById(facilityId)
.orElseThrow(() -> new CareServiceException("시설을 찾을 수 없습니다: " + facilityId));
.orElseThrow(() -> new ResourceNotFoundException("시설을 찾을 수 없습니다: " + facilityId));

eventLogger.log(EventType.FACILITY_POPULARITY_VIEWED, null, String.valueOf(facilityId));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.carecode.core.analytics.EventLogger;
import com.carecode.core.analytics.EventType;
import com.carecode.core.exception.CareServiceException;
import com.carecode.core.exception.ResourceNotFoundException;
import com.carecode.core.security.CurrentUserFacade;
import com.carecode.domain.facility.dto.request.WaitlistRequest;
import com.carecode.domain.facility.dto.response.WaitlistStatsResponse;
Expand Down Expand Up @@ -45,7 +46,7 @@ public class FacilityWaitlistService {
public Long register(Long facilityId, WaitlistRequest request) {
User user = currentUserFacade.requireCurrentUser();
CareFacility facility = facilityRepository.findById(facilityId)
.orElseThrow(() -> new CareServiceException("시설을 찾을 수 없습니다: " + facilityId));
.orElseThrow(() -> new ResourceNotFoundException("시설을 찾을 수 없습니다: " + facilityId));
Child child = resolveOwnChild(user, request.getChildId());

// 같은 아이·같은 시설의 중복 등록은 통계를 왜곡하므로 기존 기록을 그대로 돌려준다.
Expand Down Expand Up @@ -73,7 +74,7 @@ public Long register(Long facilityId, WaitlistRequest request) {
public void resolve(Long waitlistId, String status, LocalDate resolvedAt, String note) {
User user = currentUserFacade.requireCurrentUser();
FacilityWaitlist entry = waitlistRepository.findById(waitlistId)
.orElseThrow(() -> new CareServiceException("대기 기록을 찾을 수 없습니다: " + waitlistId));
.orElseThrow(() -> new ResourceNotFoundException("대기 기록을 찾을 수 없습니다: " + waitlistId));

if (!entry.getUser().getId().equals(user.getId())) {
throw new CareServiceException("본인의 대기 기록만 수정할 수 있습니다.");
Expand All @@ -90,7 +91,7 @@ public List<FacilityWaitlist> getMyWaitlists() {
@Transactional(readOnly = true)
public WaitlistStatsResponse getStats(Long facilityId) {
CareFacility facility = facilityRepository.findById(facilityId)
.orElseThrow(() -> new CareServiceException("시설을 찾을 수 없습니다: " + facilityId));
.orElseThrow(() -> new ResourceNotFoundException("시설을 찾을 수 없습니다: " + facilityId));

List<FacilityWaitlist> admitted = waitlistRepository.findAdmitted(facilityId);
long waiting = waitlistRepository.countWaiting(facilityId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.carecode.core.annotation.LogExecutionTime;
import com.carecode.core.exception.CareCodeException;
import com.carecode.core.exception.CareServiceException;
import com.carecode.core.exception.ResourceNotFoundException;
import com.carecode.core.exception.UserNotFoundException;
import com.carecode.core.exception.HealthRecordNotFoundException;
import com.carecode.core.exception.ChildNotFoundException;
Expand Down Expand Up @@ -173,7 +174,7 @@ public HealthRecordResponse updateHealthRecord(Long recordId, HealthUpdateHealth
validateUpdateRequest(request);

HealthRecord record = healthRecordRepository.findById(recordId)
.orElseThrow(() -> new CareServiceException("건강 기록을 찾을 수 없습니다: " + recordId));
.orElseThrow(() -> new ResourceNotFoundException("건강 기록을 찾을 수 없습니다: " + recordId));
assertHealthRecordOwnedByUser(record, actorUserId);

// 기록 업데이트
Expand Down Expand Up @@ -301,7 +302,7 @@ public Map<String, Object> analyzeHealthStatus(HealthCreateHealthRecordRequest r

Long childId = Long.valueOf(request.getChildId());
Child child = childRepository.findById(childId)
.orElseThrow(() -> new CareServiceException("아동을 찾을 수 없습니다: " + request.getChildId()));
.orElseThrow(() -> new ResourceNotFoundException("아동을 찾을 수 없습니다: " + request.getChildId()));
assertChildOwnedByUser(child, actorUserId);

List<HealthRecord> records = healthRecordRepository.findByChildOrderByRecordDateDesc(child);
Expand All @@ -324,7 +325,7 @@ public Map<String, Object> generateHealthReport(HealthCreateHealthRecordRequest

Long childId = Long.valueOf(request.getChildId());
Child child = childRepository.findById(childId)
.orElseThrow(() -> new CareServiceException("아동을 찾을 수 없습니다: " + request.getChildId()));
.orElseThrow(() -> new ResourceNotFoundException("아동을 찾을 수 없습니다: " + request.getChildId()));
assertChildOwnedByUser(child, actorUserId);

List<HealthRecord> records = healthRecordRepository.findByChildOrderByRecordDateDesc(child);
Expand Down Expand Up @@ -481,7 +482,7 @@ public List<HealthRecordAttachmentResponse> getAttachments(Long recordId, Long a
@Transactional
public void deleteAttachment(Long attachmentId, Long actorUserId) {
HealthRecordAttachment attachment = healthRecordAttachmentRepository.findById(attachmentId)
.orElseThrow(() -> new CareServiceException("첨부파일을 찾을 수 없습니다: " + attachmentId));
.orElseThrow(() -> new ResourceNotFoundException("첨부파일을 찾을 수 없습니다: " + attachmentId));
assertHealthRecordOwnedByUser(attachment.getHealthRecord(), actorUserId);
attachment.deactivate();
healthRecordAttachmentRepository.save(attachment);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import com.carecode.domain.notification.dto.response.NotificationStatsResponse;
import com.carecode.domain.notification.dto.response.NotificationTemplateResponse;
import com.carecode.domain.notification.dto.response.NotificationDeliveryStatusResponse;
import com.carecode.core.exception.CareServiceException;
import com.carecode.core.exception.ResourceNotFoundException;
import com.carecode.domain.notification.entity.Notification;
import com.carecode.domain.notification.repository.NotificationPreferenceRepository;
import com.carecode.domain.notification.sender.NotificationChannelType;
Expand Down Expand Up @@ -49,7 +49,7 @@ public class NotificationFacade {
@Transactional(readOnly = true)
public List<NotificationChannelStatusResponse> getChannelStatuses(String userId) {
User user = userRepository.findByUserId(userId)
.orElseThrow(() -> new CareServiceException("사용자를 찾을 수 없습니다: " + userId));
.orElseThrow(() -> new ResourceNotFoundException("사용자를 찾을 수 없습니다: " + userId));

return Arrays.stream(NotificationChannelType.values())
.map(channel -> toChannelStatus(channel, user))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.carecode.core.analytics.EventLogger;
import com.carecode.core.analytics.EventType;
import com.carecode.core.exception.CareServiceException;
import com.carecode.core.exception.ResourceNotFoundException;
import com.carecode.core.security.CurrentUserFacade;
import com.carecode.domain.notification.entity.Notification;
import com.carecode.domain.notification.repository.NotificationRepository;
Expand Down Expand Up @@ -54,7 +54,7 @@ public ResponseEntity<Void> open(
@Parameter(description = "대상 식별자") @RequestParam(required = false) String targetId) {

Notification notification = notificationRepository.findById(notificationId)
.orElseThrow(() -> new CareServiceException("알림을 찾을 수 없습니다: " + notificationId));
.orElseThrow(() -> new ResourceNotFoundException("알림을 찾을 수 없습니다: " + notificationId));

Long userId = currentUserIdOrNull();
// 본인 알림만 열람 표시를 남긴다. 남의 알림 ID 로 읽음 처리되면 안 된다.
Expand Down
Loading
Loading