MAKITTDocs

Newsletter Signup

docs/hcs-asset/newsletter-signup.md


id: 'newsletter-signup' status: ready

Newsletter Signup

Reference

  • URL: https://biodance.com/
  • 위치: 페이지 하단 footer 내 우측 영역
  • 구조: 제품 이미지 + 이메일 구독 폼 (밑줄 스타일 input + 화살표 submit 버튼)
  • 배경: #f7f7f7, 텍스트: #2f3032, accent: #f8a48a

React Component

  • Path: apps/makitt-standard-commerce/src/components/assets/newsletter-signup/
  • Status: implemented
  • 반응형: 데스크톱 (좌우 분할) / 모바일 (이미지 위 + 폼 아래 수직 스택)
  • i18n: ko, en, ja 지원
  • API: shopApi.subscribeNewsletter() 연동 완료

Prerequisites

makitt-server (shop-api)

고객 대면 API. shop storefront에서 호출.

APIMethodEndpointStatus
뉴스레터 구독POST/shop/{shopId}/newsletter/subscribeavailable
구독 해제POST/shop/{shopId}/newsletter/unsubscribeavailable
  • Request: { email: string, name?: string }
  • Response: { success: boolean, message: string }
  • 중복 구독 시 idempotent (성공 반환)
  • Controller: NewsletterController.java

makitt-server (admin-api)

셀러 어드민에서 구독자를 관리하기 위한 API.

APIMethodEndpointStatus
구독자 목록 조회GET/api/v1/shops/{shopId}/newsletter/subscribersavailable
구독자 삭제DELETE/api/v1/shops/{shopId}/newsletter/subscribers/{email}available
뉴스레터 설정 조회GET/api/v1/shops/{shopId}/newsletter/settingsavailable
뉴스레터 설정 수정PUT/api/v1/shops/{shopId}/newsletter/settingsavailable
구독자 CSV 내보내기GET/api/v1/shops/{shopId}/newsletter/subscribers/exportnot available
  • Controller: NewsletterAdminController.java
  • 설정 영속화는 TODO (현재 enabled=true 하드코딩, subscriberCount만 동적)

makitt-server (도메인/모델링)

항목내용Status
DynamoDB EntityNewsletterSubscriber — PK: SHOP#{shopId}, SK: NEWSLETTER#{email}available
OpenSearch Indexnewsletter-subscribers — keyword 매핑 (shop_id, email, status, source)available
OpenSearch DocumentNewsletterSubscriberDocument@JsonIgnoreProperties(ignoreUnknown = true)available
Domain ServiceNewsletterService — CRUD + EntityChangedEvent 발행available
Search ServiceNewsletterSearchService — OpenSearch 연동 (검색, 카운트)available
ApplicationNewsletterApplication — subscribe, unsubscribe, list, count, deleteavailable

makitt-web (셀러 어드민 UI)

기능설명Status
구독자 관리 탭Customers → Messages → Newsletter 탭available
구독자 목록이메일, 이름, 상태, 소스, 구독일 테이블available
검색/필터이메일/이름 검색, 상태/소스 드롭다운 필터available
구독자 삭제확인 대화상자 + 삭제available
페이지네이션0-indexed, 20개 단위available
설정 토글뉴스레터 활성화/비활성화 스위치available
CSV 내보내기구독자 이메일 목록 다운로드not available

makitt-shop (HCS 렌더링)

항목설명Status
form rendererFormRendereravailable
input rendererInputFieldRendereravailable
button rendererButtonRendereravailable
newsletter.subscribe action@makitt/api action-registry.ts에 등록available
newsletter.unsubscribe action@makitt/api action-registry.ts에 등록available

HCS JSON Asset

  • Path: apps/builder/data/hcs-asset/newsletter-signup.json
  • Status: created
  • Builder LocalAssetsPanel에서 조회/편집 가능

HCS Conversion Notes

  • section = section (flex row, 2컬럼 → 모바일 column)
  • 좌측 = container > image (object-fit: cover)
  • 우측 = container > heading + text + form > input + button
  • submit 버튼은 ArrowRight icon 사용 → icon renderer 활용
  • 성공/에러 메시지는 conditional visibility (visible binding)
  • 이메일 validation 에러는 form.errors.email 바인딩
  • form submit action = newsletter.subscribe

Remaining Work (Optional)

  1. HCS action executor: newsletter.subscribe action을 @makitt/api action registry에 등록 ✓ 완료
  2. HCS JSON: Builder data/hcs-asset/ 에 TreeNode JSON 생성 ✓ 완료
  3. Settings 영속화: NewsletterSettings DynamoDB entity 추가 (현재 enabled=true 하드코딩)
  4. CSV export: admin-api에 CSV 다운로드 엔드포인트 추가