Skip to content

feat: 식단 슬롯 단위 조정 API 추가 - #490

Merged
pooreumjung merged 3 commits into
developfrom
feat/#489-reconcile-meal-slot
Oct 6, 2026
Merged

pooreumjung merged 3 commits into
developfrom
feat/#489-reconcile-meal-slot

Conversation

@rover0811

Copy link
Copy Markdown
Contributor

한 줄 요약

크롤러가 한 식단 슬롯의 여러 코너를 한 요청으로 안전하게 동기화할 수 있는 PUT API를 추가했습니다.

리뷰어가 할 일

  • 같은 메뉴 목록의 Meal ID가 유지되는지 확인해 주세요.
  • 리뷰가 있는 Meal과 모든 Menu가 삭제되지 않는지 확인해 주세요.
  • mainMenus의 null과 빈 배열 처리가 기존 규칙과 같은지 확인해 주세요.

왜 필요한가

크롤러는 같은 슬롯을 다시 수집할 수 있습니다.
학생식당 중식1/2/3처럼 한 슬롯에 여러 코너가 있으면 전체 목록을 슬롯 단위로 upsert해야 합니다.
LLM이 메뉴 이름을 다르게 만들면 기존 코너와 새 코너를 구분하고 불필요한 식단을 정리해야 합니다.

무엇이 바뀌나

  • PUT /meals/with-price/slot API가 요청 순서대로 식단을 생성하거나 갱신합니다.
  • 요청에서 빠진 Meal은 리뷰가 없을 때만 삭제합니다.
  • 처리 결과로 Meal ID, 대표메뉴 불일치, 삭제 ID, 리뷰로 보존한 ID를 반환합니다.
상세 내용

API 명세

PUT /meals/with-price/slot?date=20260101&restaurant=HAKSIK&time=LUNCH

요청 예시:

[
  {
    "menuNames": ["돈까스", "김치"],
    "price": 5000,
    "mainMenus": [
      {"nameKo": "돈까스", "nameEn": "Pork Cutlet"}
    ]
  },
  {
    "menuNames": ["제육볶음"],
    "price": 5500,
    "mainMenus": null
  }
]

응답 result 예시:

{
  "mealIds": [101, 102],
  "unmatchedMainMenus": [[], []],
  "deletedMealIds": [99],
  "keptWithReviews": [100]
}

안전 규칙

  • 리뷰가 있는 Meal은 삭제하지 않습니다.
  • Menu 엔티티는 삭제하지 않습니다.
  • Meal을 삭제하기 전에 MealMainMenu 행을 명시적으로 삭제합니다.
  • 단일 writer인 crawler가 시간마다 실행되므로 unique constraint는 이번 범위에 추가하지 않았습니다.
  • 동시 쓰기가 생기면 unique constraint를 별도 이슈로 추가하는 것을 제안합니다.

테스트

  • 빈 슬롯에 여러 식단을 생성합니다.
  • 같은 식단의 ID를 유지하고 가격을 갱신합니다.
  • 변경된 코너를 교체하고 리뷰가 없는 식단을 삭제합니다.
  • 리뷰가 있는 식단을 보존합니다.
  • mainMenus가 null이면 유지하고 빈 배열이면 삭제합니다.
  • 중복 식단, 잘못된 메뉴명, 고정형 식당을 거부합니다.
  • Menu 행을 삭제하지 않습니다.
  • ./gradlew test --no-daemon 결과 709개가 통과했습니다.

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown

📊 테스트 커버리지 리포트

Overall Project 95.98% 🍏
Files changed 99.66% 🍏

File Coverage
MealSlotReconcileResult.java 100% 🍏
MealController.java 100% 🍏
Meal.java 100% 🍏
MealService.java 98.26% -0.16% 🍏

@rover0811
rover0811 requested a review from pooreumjung October 6, 2026 05:49
@pooreumjung

Copy link
Copy Markdown
Member

확인했습니다!
고생하셨습니당!!

@pooreumjung
pooreumjung merged commit e365fb5 into develop Oct 6, 2026
1 check passed
@pooreumjung
pooreumjung deleted the feat/#489-reconcile-meal-slot branch October 6, 2026 06:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feature: 식단 슬롯 단위 조정 API 추가

2 participants