추가 기능 | 예약 알림 API 구현

Faithful Dev·2025년 3월 16일

매장 예약 서비스

목록 보기
13/15

구현한 기능

  • 예약 상태 알림 API 구현
  • 사용자에게 예약 승인/거절 알림 전송 기능
  • 사용자별 알림 목록 조회 기능
  • 알림 읽음 처리 기능

해결한 문제점

DB 오류

Table 'reservation_db.notifications' doesn't exist 오류.
Hibernate가 notifications 테이블에 외래키를 생성하려고 했는데 테이블이 없어서 문제가 발생했다.

엔티티 확인

먼저는 Notification 엔티티 클래스가 올바르게 구성되어 있는지 확인했다.
잘 만들어져 있는 것 같은데 왜 문제가 생기는지 잘 모르겠다.

application.yml 확인

애플리케이션 설정에서 spring.jpa.hibernate.ddl-auto가 'update'로 되어 있는지 알지만 혹시나 해서 다시 체크했다.
임시로 'create-drop'으로 변경할 수도 있었는데 그러면 데이터가 다 날아가는 게 싫어서 그냥 수동으로 테이블을 추가해주기로 했다.

수동으로 테이블 생성

Docker MySQL 컨테이너에 접속하여 직접 SQL 명령으로 notificatios 테이블을 생성하는 방법을 사용했다:

CREATE TABLE notifications (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_id BIGINT NOT NULL,
  title VARCHAR(255) NOT NULL,
  content TEXT NOT NULL,
  type VARCHAR(50) NOT NULL,
  reference_id BIGINT,
  `read` BIT(1) NOT NULL DEFAULT 0,
  created_at DATETIME,
  FOREIGN KEY (user_id) REFERENCES users (id)
);

테이블을 수동으로 생성한 후 애플리케이션을 재시작하니 문제가 해결되었다.
MS 최종 프로젝트에서 Django Migration 이슈들이 떠오르며....


주요 코드 스냅샷

// 주요 코드 스냅샷
@Transactional
public ReservationApprovalDto.ApprovalResponse processReservationApproval(
        Long reservationId, Long partnerId, ReservationApprovalDto.ApprovalRequest request
) {
    // ... 기존 코드 ...
    
    // 알림 생성
    notificationService.createReservationStatusNotification(
            processedReservation.getUser().getId(),
            processedReservation.getId(),
            processedReservation.getStore().getName(),
            request.getApproved(),
            message,
            request.getRejectionReason()
    );

    // ... 이하 생략 ...
}
profile
Turning Vision into Reality.

0개의 댓글