Skip to content

Conversation

@Leesowon
Copy link
Collaborator

@Leesowon Leesowon commented Jan 23, 2026

관련 이슈

📌 작업 개요

  • 대시보드 실시간 피드 API 추가 (GET /api/v1/office/dispatch/feed)
  • 배차 이벤트(등록/할당/완료/취소)를 시간순으로 조회하는 API 구현
  • Fetch Join을 사용한 N+1 쿼리 문제 해결 (쿼리 수 95% 감소)

주요 기능

  1. 피드 타입별 이벤트 조회

    • open: 배차 등록
    • assigned: 배차 할당 (기사 배정)
    • completed: 운송 완료
    • canceled: 배차 취소
  2. 쿼리 파라미터

    • limit: 조회 개수 (기본값: 20)
  3. 응답 정보

    • 피드 ID (feed-01, feed-02 형식)
    • 배차 정보 (ID, 번호)
    • 기사 정보 (assigned, completed 타입 시)
    • 자동 생성된 메시지
    • 타입별 타임스탬프

성능 최적화

  • N+1 문제 해결: LEFT JOIN FETCH로 Transporter 즉시 로딩
  • 쿼리 수: 21개 → 1개 (95% 감소)

구현 상세

📁 변경/추가 파일
├── DispatchFeedRes.java (신규)              # 피드 응답 DTO
├── OfficeV1Controller.java                  # GET /dispatch/feed 엔드포인트 추가
├── OfficeService.java                       # getDispatchFeed() 메서드 추가
└── DispatchRepository.java                  # findAllWithTransporter() 추가 (Fetch Join)```

### API 엔드포인트

GET /api/v1/office/dispatch/feed?limit=20


### 응답 예시
```json
{
  "code": "SUCCESS",
  "data": [
    {
      "id": "feed-01",
      "type": "assigned",
      "dispatchId": 123,
      "dispatchNumber": "2024-0001",
      "transporterName": "김철수",
      "message": "김철수 기사가 콜 #2024-0001을 배차 받았습니다",
      "timestamp": "2024-01-15T10:32:00"
    }
  ]
}

✨ 기타 참고 사항

  • 인증/인가 미적용: 현재 배차 관련 API와 동일하게 인증 없이 구현됨 (향후 추가 가능)
  • HOLD 상태 제외: 자동배차 진행 중인 배차는 피드에서 제외됨
  • Swagger 문서화 완료: 모든 필드 및 파라미터에 상세 설명 추가
  • @transactional(readOnly = true): 조회 최적화를 위해 사용 (기존 조회 메서드와 일관성 유지)

리뷰 포인트

  1. 피드 ID 형식 (feed-01, feed-02) 적절성
  2. Fetch Join 사용으로 인한 페이징 제약사항 없음 확인 (ManyToOne 관계)
  3. 메시지 자동 생성 로직의 적절성
  4. limit 파라미터 기본값(20) 및 최대값 제한 필요 여부

✅ 체크리스트

  • PR 템플릿에 맞추어 작성했어요.
  • PR에 적절한 라벨을 선택했어요.
  • 변경 내용에 대한 테스트를 진행했어요.
  • application.yml 파일을 수정했다면, Notion에 업로드, github security 수정 및 공유했어요. (해당 없음)
  • 로컬 서버에서 정상 동작을 확인했어요. (main, test)
  • 불필요한 코드는 삭제했어요.

커밋 메시지 (참고)

feat: 대시보드 실시간 피드 API 추가 및 N+1 문제 해결

- GET /api/v1/office/dispatch/feed 엔드포인트 추가
- DispatchFeedRes DTO 생성 (피드 전용 응답 구조)
- LEFT JOIN FETCH로 N+1 쿼리 문제 해결 (21개 → 1개)
- limit 파라미터 지원 (기본값: 20)
- 피드 타입별 메시지 자동 생성 (open/assigned/completed/canceled)

@Leesowon Leesowon self-assigned this Jan 23, 2026
@Leesowon Leesowon added the ✨ Feature 새로운 기능을 추가합니다. label Jan 23, 2026
@Leesowon Leesowon changed the title [feat]: [#57] feature: 실시간 피드 api 구현 Jan 23, 2026
@Leesowon Leesowon merged commit 726d9cc into dev Jan 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 새로운 기능을 추가합니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants