Skip to content

US-P07: Thêm option vào property danh sách của HubSpot dev ​

Thuộc FS: 00-overview.md — Nền tảng dùng chung của cụm tool SAPP (as-built @ e77c47a) Phần chung (tổng quan, roles, flow tổng, related features, NFR, Open Questions, References) xem ở Overview. File này chỉ chứa nội dung riêng của US.

FieldValue
US IDUS-P07
Role thực hiệnR1 - Người dùng tool (qua sub-tool sapp.010 — SAPP 26878, bước option của flow phase 2) — Assumption (OQ về G-01), xem OQ-P-13
PhaseAs-built (đã triển khai)
PriorityN/A — as-built
StatusDraft
NFR liên quanNFR-P-01, NFR-P-03 — xem Overview §5
OQ liên quanOQ-P-01, OQ-P-03 — xem Overview §6

Nguồn inventory: A-17.

Sub-tool đang dùng dịch vụ này (Fact): chỉ sapp.010 (FS 26878) — bước loại option ("Thêm option vào N property") trong flow phase 2, dùng để thêm mã lớp Ops vừa tạo vào các property danh sách của Deal / Contact (fe/src/ui/components/works/sapp/sapp-26878-step-option.tsx:28-47, :80-95) → FS 26878 US-D03.

1. US Statement ​

text
As a Người dùng tool (qua sub-tool 26878)  [Assumption — OQ-P-13 / G-01]
I want thêm một giá trị mới (vd mã lớp vừa tạo) vào danh sách lựa chọn của một property Deal / Contact trên portal HubSpot dev
So that [Assumption] bước sau ghi được giá trị đó lên Deal / Contact (property dạng danh sách từ chối giá trị ngoài danh sách)

2. Dependencies & Definition Of Ready ​

N/A — đã triển khai (Mode B).

Dependency runtime: SAPP_DEV_HUBSPOT_ACCESS_TOKEN (US-P04); property đích tồn tại trên portal dev.

3. Business Rules ​

IDRuleÁp dụng ởĐã cover bởi (AC)Nguồn code (Mode B/C)
BR-01Chỉ chạy trên portal HubSpot dev: chỉ có route dev cho Deal và Contact; không có route staging/prodM1AC-M1.4be/apps/api/src/sapp/sapp.controller.ts:821-846, :1101-1106
BR-02value bắt buộc (bỏ khoảng trắng đầu/cuối); rỗng → lỗi 13047 "Property option requires a non-empty value". label không nhập thì bằng valueM1 - field valueAC-M1.1, EC-M1.1be/libs/modules/src/lib/hubspot/common.service.ts:722-731
BR-03Property không tồn tại → 12003 "HubSpot property not found"; property không phải dạng danh sách → 13048 (không đổi kiểu property)M1EC-M1.2, EC-M1.3be/libs/modules/src/lib/hubspot/common.service.ts:733-753
BR-04Option đã có (trùng value) → không thêm, trả added=false kèm số option hiện cóM1AC-M1.2be/libs/modules/src/lib/hubspot/common.service.ts:755-762
BR-05Thêm option = gửi lại toàn bộ danh sách option cũ (giữ nguyên nhãn, thứ tự, ẩn/hiện) + option mới ở cuốiM1AC-M1.1be/libs/modules/src/lib/hubspot/common.service.ts:764-789
BR-06HubSpot giữ danh sách option riêng cho từng loại đối tượng: property cùng tên ở Deal và Contact phải thêm riêngM1AC-M1.3be/apps/api/src/sapp/sapp.controller.ts:1101-1106
BR-07HubSpot từ chối cập nhật → 13049 "Failed to add HubSpot property option"M1EC-M1.4be/libs/modules/src/lib/hubspot/common.service.ts:790-811

4. Design ​

a. Mối liên hệ giữa các màn & User Flow ​

text
[FS 26878 · bước option] (giá trị = mã lớp từ bước trước)
  ↓ "Thêm option vào N property"
[M1: Dịch vụ thêm option]  POST /api/v1/sapp/dev/hubspot/{deals|contacts}/properties/<property>/options
  ├─ added=true  → "Đã thêm option mới"
  ├─ added=false → "Option đã có sẵn — không tạo thêm bản thứ hai"
  └─ lỗi → 13047 / 12003 / 13048 / 13049

b. Chi tiết từng màn &ZeroWidthSpace;

Màn M1 - Dịch vụ thêm option property (gọi từ bước option của sub-tool 26878) &ZeroWidthSpace;

FieldValue
Figma frameN/A — as-built, không có Figma
Trigger vào mànBước option trong flow phase 2 của sapp.010
Mô tả ngắnKhông có màn riêng ở nền tảng — dịch vụ API; UI bước do FS 26878 đặc tả
UI States &ZeroWidthSpace;

N/A — dịch vụ không có màn riêng; UI của bước (kết quả "Đã thêm option mới" / "Option đã có sẵn…", cảnh báo staging phải làm tay) thuộc FS 26878 (fe/src/ui/components/works/sapp/sapp-26878-step-option.tsx:120-215).

Fields &ZeroWidthSpace;
FieldRequiredTypeDefaultFormatValidationError MessageVisibilityDepends On
object (đường dẫn)Yesdeals / contacts——Chỉ 2 route (BR-01)404 nếu khác——
property (đường dẫn)YesText—tên nội bộ propertyPhải tồn tại, dạng danh sách (BR-03)12003 / 13048——
valueYesText——Không rỗng sau trim (BR-02)13047——
labelNoText= value————value
descriptionNoText——————
displayOrderNoNumber-1 (HubSpot tự đánh số)—————
hiddenNoBooleanfalse—————

Nguồn: be/libs/interface/src/lib/dto/hubspot/hubspot-property.dto.ts:70-92.

Filter / Search / Sort &ZeroWidthSpace;

N/A — không phải màn List.

Actions &ZeroWidthSpace;
A1 - Thêm option &ZeroWidthSpace;
ItemDescription
TriggerBước option được chạy (mỗi property một lời gọi)
BehaviorĐọc property, kiểm BR-02…BR-04, gửi lại toàn bộ danh sách (BR-05). Ghi định nghĩa property trên portal HubSpot dev; không có đường ghi staging/PROD
Success Result{ property, added, optionCount }

Error cases:

CaseExpected Handling
value rỗng13047
Property không có / không phải danh sách12003 / 13048
HubSpot từ chối13049
Thiếu token dev12001
Acceptance Criteria của màn M1 &ZeroWidthSpace;
AC-M1.1 - Thêm option mới, giữ option cũ &ZeroWidthSpace;
gherkin
Given property deal "lop_dang_ky" trên dev có 5 option
When thêm value "ACCA.F2.2609.NEU.01" (không nhập label)
Then property có 6 option: 5 option cũ giữ nguyên + option mới ở cuối, label = value
And kết quả added = true, optionCount = 6

Maps to:

  • Business Rule: BR-02, BR-05
AC-M1.2 - Idempotent theo value &ZeroWidthSpace;
gherkin
Given option "ACCA.F2.2609.NEU.01" đã có
When thêm lại cùng value
Then không thay đổi gì, added = false

Maps to:

  • Business Rule: BR-04
AC-M1.3 - Deal và Contact tách riêng &ZeroWidthSpace;
gherkin
Given đã thêm option vào deals.lop_dang_ky
When kiểm tra contacts.lop_dang_ky
Then contact chưa có option đó cho tới khi gọi route contacts

Maps to:

  • Business Rule: BR-06
AC-M1.4 - Chỉ dev &ZeroWidthSpace;
gherkin
Given người dùng chọn staging trong sub-tool 26878
When tới bước option
Then không có route staging/prod để gọi; FS 26878 hướng dẫn làm tay trên HubSpot

Maps to:

  • Business Rule: BR-01
Negative AC / Edge Cases của màn M1 &ZeroWidthSpace;
IDTình huốngHành vi mong đợi
EC-M1.1value = " "13047
EC-M1.2Property không tồn tại12003
EC-M1.3Property dạng text/số13048, property không bị đổi
EC-M1.4HubSpot trả lỗi khi cập nhật13049
EC-M1.5FE khai báo được loại đối tượng tickets cho route này (fe/src/data/constants/api.ts:192-195)BE không có route tickets → gọi sẽ không tìm thấy route; hiện 26878 chỉ dùng deals/contacts
EC-M1.6⚠️ Observed — Route public, không cần đăng nhậpAi gọi được API đều sửa được định nghĩa property portal dev (NFR-P-01, OQ-P-01)

5. Cross-feature AC &ZeroWidthSpace;

AC-X.1 - Lý do staging phải làm tay &ZeroWidthSpace;

gherkin
Given staging HubSpot dùng credential portal prod (NFR-P-03)
When 26878 chạy flow phase 2 trên staging
Then bước option không gọi dịch vụ này; người dùng thêm option tay rồi bỏ qua bước (FS 26878)

Maps to:

  • REL-05 (Be Affected - FS 26878)