Skip to content

fix: 릴리즈 리뷰 반영 (스냅샷·발신자·본문 필드 계약 정정) - #294

Open
chanwoo7 wants to merge 2 commits into
developfrom
fix/release-review-message-and-image
Open

fix: 릴리즈 리뷰 반영 (스냅샷·발신자·본문 필드 계약 정정)#294
chanwoo7 wants to merge 2 commits into
developfrom
fix/release-review-message-and-image

Conversation

@chanwoo7

@chanwoo7 chanwoo7 commented Sep 9, 2026

Copy link
Copy Markdown
Member

릴리즈 PR #289 리뷰 추가분 3건.

대상 적었던 것 실제
MyOrderItemDetail.representativeImageUrl 주문 당시 스냅샷 item.product.images[0]을 읽는다. OrderItem에 이미지 스냅샷 컬럼이 없다 — 판매자가 바꾸면 값이 달라지거나 null
SellerConversationMessage.senderAccountId SYSTEM이면 null 인사말·FAQ 자동응답도 STORE + null
bodyText / bodyHtml 하나만 채워진다 서버는 bodyFormat이 가리키는 쪽만 필수 검사. 반대쪽을 함께 넘기면 그대로 저장

첫 건이 나온 이유

같은 품목의 productName·가격은 실제로 스냅샷이다. 이미지만 아닌데 필드가 나란히 있어 같은 성격으로 적어 버렸다.

세 번째에서 코드가 아니라 문서를 고친 이유

반대쪽 본문을 지우는 동작을 넣으면 이미 저장된 데이터와 계약이 달라진다. 표시 기준은 bodyFormat이라 실질 문제도 없다.

개념 단위 정합

지적은 seller SDL만이었으나 구매자 conversation-inquiry.graphql에도 같은 단정이 3자리 더 있어 함께 고쳤다. 한쪽만 고치면 두 문서가 서로 모순된다.

검증

전체 225 suites 1,874건 통과. tsc·docs:check 통과.

- MyOrderItemDetail.representativeImageUrl — "주문 당시"라 적었으나
  user-order.service.ts:114가 현재 상품의 첫 이미지를 읽고 OrderItem에는 이미지
  스냅샷 컬럼이 없다. 같은 품목의 productName·가격은 실제 스냅샷이라 나란히
  있는 이미지도 같은 성격으로 적어 버렸다
- SellerConversationMessage.senderAccountId — "SYSTEM이면 null"이라 적었으나
  인사말·FAQ 자동응답도 senderType STORE + senderAccountId null로 저장된다.
  이 설명대로면 클라이언트가 인사말을 잘못 분류한다
- bodyText / bodyHtml — "하나만 채워진다"고 단정했으나 서버는 bodyFormat이
  가리키는 쪽만 필수로 검사하고 반대쪽을 함께 넘기면 그대로 저장한다.
  문서를 고쳤다 — 반대쪽을 지우면 기존 데이터와 계약이 달라지고, 표시 기준은
  bodyFormat이라 실질 문제도 없다

지적은 seller SDL만이었으나 구매자 conversation-inquiry.graphql에도 같은
단정이 3자리 있어 함께 고쳤다(개념 단위 정합).

전체 1,874건 통과.
@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 3671ee97-ccf1-41ab-9eea-765e72cb57ca

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

🩺 NestJS Doctor — 90/100 (Excellent)

진단 313건 (error 0).

Category error warning info
architecture 0 0 9
correctness 0 161 0
performance 0 27 17
schema 0 0 86
security 0 13 0
architecture / security 상위 항목
  • info architecture/architecture/no-barrel-export-internals: Barrel file re-exports internal type 'IAuditLogRepository'.
  • warning security/security/no-exposed-env-vars: Direct 'process.env.NODE_ENV' access in 'AuthController'. Use ConfigService instead.
  • warning security/security/require-guards-on-endpoints: Endpoint 'start' has no @UseGuards() at class or method level.
  • warning security/security/require-guards-on-endpoints: Endpoint 'callback' has no @UseGuards() at class or method level.
  • warning security/security/require-guards-on-endpoints: Endpoint 'refresh' has no @UseGuards() at class or method level.
  • warning security/security/require-guards-on-endpoints: Endpoint 'logout' has no @UseGuards() at class or method level.
  • warning security/security/require-guards-on-endpoints: Endpoint 'sellerLogin' has no @UseGuards() at class or method level.
  • warning security/security/require-guards-on-endpoints: Endpoint 'sellerRefresh' has no @UseGuards() at class or method level.
  • warning security/security/require-guards-on-endpoints: Endpoint 'sellerLogout' has no @UseGuards() at class or method level.
  • warning security/security/require-guards-on-endpoints: Endpoint 'devIssueToken' has no @UseGuards() at class or method level.
  • info architecture/architecture/no-barrel-export-internals: Barrel file re-exports internal module '@/features/conversation/repositories/conversation.repository'.
  • info architecture/architecture/no-barrel-export-internals: Barrel file re-exports internal type 'ConversationRepository'.
  • info architecture/architecture/no-barrel-export-internals: Barrel file re-exports internal module '@/features/order/repositories/order.repository'.
  • info architecture/architecture/no-barrel-export-internals: Barrel file re-exports internal type 'OrderRepository'.
  • info architecture/architecture/no-barrel-export-internals: Barrel file re-exports internal module '@/features/product/repositories/product.repository'.

오탐 포함 가능 · 기준 docs/guide/architecture-conventions.md

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

🧹 knip — dead-code 리포트

Unused dependencies (1)
Duplicate exports (1)
전체 리포트
Unused dependencies (1)
graphql-ws  package.json:65:6
Duplicate exports (1)
KEYWORD_RANK_SNAPSHOT_SIZE|MAX_POPULAR_KEYWORDS_LIMIT  src/features/search/constants/search.constants.ts

청소 후보(오탐 가능) · 기준 docs/guide/architecture-conventions.md

기존 두 테스트가 서로 다른 updated_at만 써서 보조 키 분기(updated_at 동률 →
id < cursor.id)를 한 번도 타지 않았다. 그 조건을 지우거나 뒤집어도 통과했다.

같은 updated_at으로 대화 둘을 만들고 큰 id를 커서로 넘겨 작은 id만 반환되는지
확인한다. 역검증: 보조 키 비교를 lt→gt로 뒤집으면 이 테스트만 실패한다.

키셋 커서를 고치면서 키셋의 핵심인 동률 처리를 테스트하지 않은 자리였다.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 77dce44f15

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +52 to +54
대화 메시지 1건. bodyFormat이 읽어야 할 본문 필드를 가리킨다.
발송 시 다른 형식의 본문을 함께 넘기면 그대로 저장되므로, 두 필드가 모두 채워져
있을 수 있다 — 표시할 본문은 bodyFormat으로 고른다.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Correct the remaining exclusive-body description

The updated type description correctly states that both body fields may be stored, but SellerConversationMessage.bodyFormat immediately below still says that only one of bodyText or bodyHtml is populated. When sellerSendConversationMessage receives both fields, the service persists both, so GraphQL introspection remains internally contradictory and can still cause seller clients to assume the non-selected field is null; update that field description as part of this contract correction.

Useful? React with 👍 / 👎.

@codecov

codecov Bot commented Sep 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

Coverage report

St.
Category Percentage Covered / Total
🟢 Statements 97.62% 5915/6059
🟢 Branches 93.15% 2324/2495
🟢 Functions 96.47% 1176/1219
🟢 Lines 98.2% 5388/5487

Test suite run success

1875 tests passing in 225 suites.

Report generated by 🧪jest coverage report action from df4e67c

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.

1 participant