Skip to content

Nền tảng - User Requirement Document

Module: CORE-16 · Version: v1.0 · Last reviewed: 2026-06-15

Mục đích

Nền tảng là backbone real-time xuyên suốt của KICKO. Nó biến một hoạt động nghiệp vụ đáng chú ý - tạo ra ở bất kỳ đâu trong hệ thống - thành một thông báo bền vững theo từng người và đẩy nó tới màn hình của đúng user ngay khi nó xảy ra, qua một kênh riêng tư, được mã hóa. Các service tạo ra hoạt động; nền tảng quyết định ai cần biết về chúng và gửi chúng live.

Nền tảng cũng là backbone media dùng chung của KICKO. Nó cho mọi service một cách để lưu một nhị phân trên object storage tương thích S3, lấy lại một link ổn định, và giữ một bản ghi meta-link bền vững gắn object với thực thể nó minh họa - cộng media tham chiếu dùng chung (một bundle bản địa hóa và một registry ngân hàng Việt Nam kèm logo) mà cả nền tảng đọc từ một nguồn.

Phạm vi

Bao gồmLoại trừ
Pipeline activity-notification hướng sự kiện (tiêu thụ → phân giải → render → lưu → đẩy)Kênh email / SMS / push-notification
Phân giải recipient theo phạm vi tổ chức / merchant / danh sách userMô hình tùy chọn, tắt, hoặc đăng ký thông báo theo từng user
Read API thông báo tự-giới-hạn (list, count, mark-one-read, mark-all-read)Logic hoạt động của chính các service tạo sự kiện
Gửi WebSocket real-time được xác thực, mã hóa đầu-cuốiTạo kiểu UI chuông / activity-feed
Hợp đồng gửi room + topic theo từng recipient ổn định, fan-out xuyên-instanceTăng cường ủy quyền room chống xuyên-tenant (follow-up đã biết)
Điều khiển transport quản trị (trạng thái, list, send, broadcast, disconnect)Biến đổi ảnh / tạo thumbnail / resize động
Object storage dùng chung: upload được xác thực, phục vụ inline / attachment, liệt kê, xóaCô lập bucket theo từng merchant hoặc lưu trữ giới hạn theo tenant
Bản ghi meta-link cho mỗi object với ràng buộc principal và một API CRUD meta-linkMột UI duyệt thư viện media được quản lý (màn hình gallery)
Bundle bản địa hóa dùng chung + registry ngân hàng Việt Nam chỉ-đọc kèm phục vụ logoTác giả / sửa registry ngân hàng (dữ liệu tham chiếu chỉ-đọc)

Mô hình khái niệm

5. Feature Catalog

Feature IDTính năngPhaseTrạng tháiƯu tiên
platform/ACTActivity NotificationsP2BuiltHIGH
platform/WSSRealtime WebSocket StreamP2BuiltHIGH
platform/ASTAsset & Object StorageP2BuiltHIGH
platform/MTLMeta-Link BindingP2BuiltHIGH
platform/BNKVietnamese Banks Reference DataP2BuiltMED
platform/IDXSearch Indexing & CDC SyncP2BuiltHIGH
platform/SCHUnified Search Query APIP2BuiltHIGH

Tính năng

ACT - Activity Notifications Built

Feature ID: platform/ACT · Phase: P2 · PRDs: PRD-ACT-001 · Dev: @nx/signal

Làm gì cho người dùng: một hoạt động đáng chú ý ở bất kỳ đâu trong KICKO (ví dụ thanh toán thành công) trở thành một thông báo gửi đến đúng người - tất cả trong một tổ chức, tất cả trong một merchant, hoặc một danh sách có tên - được render thành một thông điệp dễ đọc và giữ bền vững để mỗi người đọc và xóa theo điều kiện của riêng mình.

Yêu cầu

IDPYêu cầu
URD-ACT-001MMột activity event trên luồng nền tảng được tiêu thụ và biến thành một bản ghi thông báo cho mỗi recipient được phân giải.
URD-ACT-002MRecipient được phân giải theo phạm vi của hoạt động - cả tổ chức, cả merchant, hoặc một danh sách user cụ thể - và fallback về actor của hoạt động khi không có ai.
URD-ACT-003MMỗi thông báo lưu recipient, type, organizer, nội dung đã render (text + HTML), một action URL tùy chọn, dữ liệu có cấu trúc (bao gồm actor), và một cờ đọc với timestamp đọc.
URD-ACT-004MNội dung thông báo được render từ event type thành một thông điệp bản địa hóa, dễ đọc.
URD-ACT-005MChỉ các event type được nhận diện mới tạo thông báo; một event type lạ bị bỏ qua mà không phát lỗi.
URD-ACT-006MMột user đã đăng nhập có thể list thông báo của riêng mình (phân trang / lọc), trả về kèm tổng số và số chưa đọc.
URD-ACT-007MMột user có thể yêu cầu một số đếm thông báo của mình (ví dụ chưa đọc) để hiển thị badge.
URD-ACT-008MMột user có thể đánh dấu một thông báo đã đọc và đánh dấu tất cả thông báo của mình đã đọc; mỗi cái mang một timestamp đọc.
URD-ACT-009MMọi đọc và ghi thông báo đều giới hạn theo recipient đã xác thực - một user không bao giờ thấy hoặc thay đổi thông báo của user khác.

Chấp nhận

AC-ACT-01: Một hoạt động có phạm vi fan-out thành một bản ghi cho mỗi recipient
GivenWhenThen
Một activity event với recipient scope merchant và ba thành viên trong merchant đóSự kiện được tiêu thụBa bản ghi thông báo được tạo, một cho mỗi thành viên, mỗi cái với nội dung đã render, type, organizer, và isRead = false
AC-ACT-02: Không có audience thì fallback về actor
GivenWhenThen
Một hoạt động mà phạm vi không phân giải ra thành viên nàoSự kiện được tiêu thụĐúng một thông báo được tạo, gửi tới actor của hoạt động
AC-ACT-03: Event type lạ bị bỏ qua
GivenWhenThen
Một activity event có type không được nhận diệnSự kiện được tiêu thụKhông thông báo nào được tạo và không lỗi nào phát ra; sự kiện bị bỏ qua
AC-ACT-04: Một user list chỉ thông báo của riêng mình kèm số đếm
GivenWhenThen
Một user đã đăng nhập có thông báo, một số chưa đọcHọ list thông báo của mìnhChỉ bản ghi của riêng họ trả về, kèm một tổng số và một số chưa đọc
AC-ACT-05: Mark-all-read làm sạch số chưa đọc
GivenWhenThen
Một user có vài thông báo chưa đọcHọ đánh dấu tất cả đã đọcTất cả thông báo của họ thành đã đọc với một timestamp đọc, và một số đếm sau đó trả về zero chưa đọc
AC-ACT-06: Read API là tự-giới-hạn
GivenWhenThen
User A và user B mỗi người có thông báoUser A list, đếm, hoặc đánh dấu đọcChỉ bản ghi của user A được trả về hoặc thay đổi; của user B không bao giờ thấy hoặc thay đổi được với A

WSS - Realtime WebSocket Stream Built

Feature ID: platform/WSS · Phase: P2 · PRDs: PRD-ACT-001 · Dev: @nx/signal

Làm gì cho người dùng: ống dẫn live, riêng tư mang một thông báo tới màn hình của chủ sở hữu ngay khi nó được tạo - được xác thực, mã hóa đầu-cuối, và đủ ổn định để client đăng ký theo một hợp đồng cố định, kèm các điều khiển tinh gọn để người vận hành kiểm tra và điều phối các kết nối.

Yêu cầu

IDPYêu cầu
URD-WSS-001MKhi một thông báo được tạo nó được đẩy live tới recipient qua WebSocket, tới kênh-theo-từng-recipient riêng của recipient đó.
URD-WSS-002MClient kết nối qua một socket được xác thực (JWT bearer) và hoàn tất một trao đổi khóa ECDH; tất cả payload sau handshake được mã hóa đầu-cuối.
URD-WSS-003MGửi dùng một hợp đồng room/topic cố định - một room theo từng recipient và một topic notification-created - để client đăng ký theo một kênh ổn định.
URD-WSS-004MGửi đến được một recipient bất kể socket của họ kết nối ở đâu, fan-out giữa các instance máy chủ.
URD-WSS-005MNếu kênh real-time không khả dụng, lưu thông báo vẫn thành công và push live bị bỏ qua mà không làm hỏng pipeline; một push lỗi cho một recipient không bao giờ chặn các recipient khác.
URD-WSS-006MCác điều khiển transport quản trị - trạng thái kết nối, list client kết nối, get một client, broadcast, send-to-room, send-to-client, và disconnect - có sẵn sau permission.
URD-WSS-007SMột client kết nối chỉ nhận thông báo của kênh riêng mình và không nhận của các user khác.

Chấp nhận

AC-WSS-01: Một thông báo mới đến live trên kênh của recipient
GivenWhenThen
Một recipient đang giữ một socket được xác thực, mã hóa, đăng ký kênh của mìnhMột thông báo được tạo cho họHọ nhận nó live trên topic notification-created, được mã hóa khi truyền
AC-WSS-02: Socket không xác thực hoặc chưa handshake không nhận gì
GivenWhenThen
Một socket không có JWT hợp lệ hoặc không hoàn tất handshake ECDHMột thông báo lẽ ra được đẩyKết nối bị từ chối hoặc không payload giải mã được nào được gửi
AC-WSS-03: Sự cố real-time tụt xuống chỉ-lưu
GivenWhenThen
Kênh real-time không khả dụngMột hoạt động được xử lýCác bản ghi thông báo vẫn được lưu và pipeline hoàn tất không lỗi; push live bị bỏ qua
AC-WSS-04: Một push lỗi không chặn các push khác
GivenWhenThen
Một hoạt động fan-out tới vài recipient và một push của một recipient lỗiWorker đẩy tới tất cả recipientCác recipient còn lại vẫn nhận thông báo của mình; lỗi được cô lập
AC-WSS-05: Điều khiển transport quản trị cần permission
GivenWhenThen
Một user không có permission transportHọ gọi một điều khiển broadcast / send / disconnectYêu cầu bị từ chối; một người vận hành có quyền có thể kiểm tra trạng thái và điều phối kết nối

AST - Asset & Object Storage Built

Feature ID: platform/AST · Phase: P2 · PRDs: PRD-AST-001 · Dev: @nx/asset

Làm gì cho người dùng: một cách dùng chung để đặt một tệp nhị phân - một ảnh sản phẩm, một logo tổ chức, một tài liệu - vào object storage và lấy lại một link ổn định, rồi stream nó lại inline hoặc tải nó theo tên. Upload được xác thực; đọc công khai; một bucket liệt kê được và một object xóa được; một bundle bản địa hóa dùng chung chạy trên cùng bề mặt.

Yêu cầu

IDPYêu cầu
URD-AST-001MMột upload multipart được xác thực lưu một hoặc nhiều tệp trong bucket cấu hình, gán cho mỗi cái một object name duy nhất, an toàn URL, và trả về object name cùng link định địa chỉ của nó.
URD-AST-002MMột upload có thể mang một folder path tùy chọn (được kiểm tra, giới hạn hai cấp) và một ràng buộc principal (principalType / principalId / variant) áp cho mỗi object đã lưu.
URD-AST-003MMột object đã lưu stream được inline theo object name của nó, hỗ trợ đường dẫn object lồng tới hai cấp thư mục.
URD-AST-004MMột object đã lưu tải về được dạng attachment (content-disposition) theo object name của nó.
URD-AST-005MMột delete được xác thực xóa object khỏi lưu trữ và dọn các bản ghi meta-link của nó cho bucket + object đó.
URD-AST-006MMột list được xác thực trả về các object của một bucket lọc theo prefix, recursion, và một giới hạn max-keys.
URD-AST-007MMột bundle bản địa hóa dùng chung lấy được inline và tải về được dạng attachment từ bucket cấu hình.
URD-AST-008MObject name và folder segment được kiểm tra trước khi lưu hoặc lấy; chỉ các header metadata trong danh sách trắng được phản chiếu lên phản hồi và nosniff được đặt trên mọi stream.

Chấp nhận

AC-AST-01: Upload lưu một object và trả về link của nó
GivenWhenThen
Một caller được xác thực kèm một tệpHọ upload nóTệp được lưu dưới một object name duy nhất, an toàn URL và phản hồi mang object name đó cùng một link định địa chỉ
AC-AST-02: Một object stream lại inline và tải theo tên
GivenWhenThen
Một object đã lưu trước đóMột client lấy nó theo object name, rồi theo đường dẫn download của nóNó stream inline ở cái đầu, và đến dạng attachment (content-disposition) ở cái sau; cả hai đặt nosniff
AC-AST-03: Delete xóa object và meta-link cùng nhau
GivenWhenThen
Một object đã lưu kèm một bản ghi meta-linkMột caller được xác thực xóa nó theo object nameObject được xóa khỏi lưu trữ và các bản ghi meta-link của nó cho bucket + object đó được dọn
AC-AST-04: Đường dẫn object không hợp lệ bị từ chối
GivenWhenThen
Một yêu cầu mà object name vượt độ sâu cho phép hoặc không qua kiểm traObject được lấy hoặc xóaYêu cầu bị từ chối với lỗi bad-request trước bất kỳ truy cập lưu trữ nào

MTL - Meta-Link Binding Built

Feature ID: platform/MTL · Phase: P2 · PRDs: PRD-AST-001 · Dev: @nx/asset

Làm gì cho người dùng: mỗi object đã lưu mang một bản ghi bền vững - tọa độ lưu trữ và các thuộc tính mô tả của nó - có thể ràng buộc với thực thể nghiệp vụ nó minh họa (một product, một variant, một organizer, một ledger, một category, một ticket), để một service tìm được "media cho bản ghi này" mà không phải quét bucket. Meta-link truy vấn được như một tài nguyên CRUD.

Yêu cầu

IDPYêu cầu
URD-MTL-001MMỗi object đã lưu có một meta-link bền vững giữ bucket, object name, link, mimetype, size, etag, metadata, storage type, và một cờ sync của nó.
URD-MTL-002MMột meta-link có thể tham chiếu một principal nghiệp vụ theo type + id và một variant tag tùy chọn, để một object tìm được theo thực thể nó thuộc về.
URD-MTL-003MMeta-link được phơi bày như một tài nguyên CRUD (find, find-by-id, find-one, count, create, update, delete) qua xác thực JWT / Basic.
URD-MTL-004MXóa object nền tảng dọn các bản ghi meta-link của nó cho bucket + object đó.

Chấp nhận

AC-MTL-01: Upload ghi một meta-link với các thuộc tính của object
GivenWhenThen
Một upload thành côngLưu hoàn tấtMột meta-link được tạo ghi bucket, name, link, mimetype, size, etag, metadata, và storage type của object, với cờ sync được đặt
AC-MTL-02: Một object đã ràng buộc tìm được theo principal của nó
GivenWhenThen
Một object upload kèm một principalTypeprincipalIdTài nguyên meta-link được truy vấn cho principal đóMeta-link của object được trả về, định vị theo thực thể nó thuộc về
AC-MTL-03: Một meta-link ghi lỗi không làm mất object
GivenWhenThen
Một upload mà bản ghi meta-link không ghi đượcUpload hoàn tấtObject vẫn được lưu và được báo trong kết quả kèm một lỗi meta-link theo từng tệp; các tệp khác trong cùng upload không bị ảnh hưởng

BNK - Vietnamese Banks Reference Data Built

Feature ID: platform/BNK · Phase: P2 · PRDs: PRD-AST-001 · Dev: @nx/asset

Làm gì cho người dùng: một nguồn chỉ-đọc các ngân hàng và nhà cung cấp thanh toán Việt Nam - mỗi cái với tên ngắn và tên đầy đủ, cờ năng lực (VietQR, disburse, NAPAS), và một logo - để storefront và back office render lựa chọn và logo ngân hàng từ một registry thay vì bản sao cục bộ.

Yêu cầu

IDPYêu cầu
URD-BNK-001MMột registry chỉ-đọc các ngân hàng / nhà cung cấp thanh toán Việt Nam phục vụ dạng JSON, mỗi entry mang một tên ngắn, một tên đầy đủ, và cờ năng lực (VietQR, disburse, NAPAS).
URD-BNK-002MLogo của mỗi registry entry được chiếu thành một URL tuyệt đối (nối với explorer base cấu hình) để client dùng trực tiếp.
URD-BNK-003MMỗi logo ngân hàng phục vụ dạng PNG theo một tên tệp <code>.png kiểm tra theo một mẫu nghiêm ngặt, với caching immutable lâu dài.
URD-BNK-004MPhản hồi registry cacheable (max-age); một tên tệp logo không hợp lệ hoặc lạ trả về một lỗi bad-request / not-found có cấu trúc.

Chấp nhận

AC-BNK-01: Registry trả về entry kèm logo URL tuyệt đối
GivenWhenThen
Explorer base URL cấu hìnhMột client lấy registry ngân hàngMỗi entry được trả về với tên ngắn, tên đầy đủ, cờ năng lực, và một bankLogoUrl tuyệt đối, kèm một cache-control max-age
AC-BNK-02: Một logo ngân hàng phục vụ dạng PNG immutable
GivenWhenThen
Một tên tệp logo <code>.png hợp lệMột client yêu cầu nóPNG được stream với một content-type ảnh, nosniff, và một cache-control immutable lâu dài
AC-BNK-03: Một tên tệp logo không hợp lệ bị từ chối
GivenWhenThen
Một tên tệp logo không qua mẫu <code>.png nghiêm ngặt, hoặc một code không có assetLogo được yêu cầuMột lỗi bad-request (không hợp lệ) hoặc not-found (thiếu) có cấu trúc được trả về trước bất kỳ traversal nào

IDX - Search Indexing & CDC Sync Built

Feature ID: platform/IDX · Phase: P2 · PRDs: PRD-IDX-001 · Dev: @nx/search

Làm gì cho người dùng: giữ một bề mặt tìm kiếm luôn-tươi-mới đồng bộ với cả nền tảng mà không service nào ghi vào search engine. Mọi thay đổi đã commit chảy ra thành một change-data event và một consumer duy nhất phản chiếu nó vào đúng search collection, join vào dữ liệu liên quan mỗi document cần, và fan một thay đổi bản ghi dùng chung (một đổi tên, một sửa giá, một mã dùng chung) ra mọi document phụ thuộc - để một kết quả tìm kiếm đầy đủ và hiện hành ngay khi đọc.

Yêu cầu

IDPYêu cầu
URD-IDX-001MMọi thay đổi đã commit của một bảng nguồn được index đều được bắt từ luồng change-data của nền tảng và phản chiếu vào đúng search collection, mà không service tạo sự kiện nào phải ghi vào search.
URD-IDX-002MCác bảng nguồn ánh xạ tới chín search collection (organizers, merchants, categories, devices, sale-channels, products, product-variants, inventories, users); mỗi collection có đúng một bảng-nguồn-document và các input còn lại là liên quan / dẫn xuất.
URD-IDX-003MSự kiện create, update, và snapshot upsert document; một delete hoặc soft-delete ghi một tombstone để bản ghi rời khỏi kết quả trong khi giữ thứ tự phiên bản của nó.
URD-IDX-004MTrước khi index, mỗi document được enrich bằng cách join dữ liệu liên quan (tên merchant / organizer sở hữu, tập category, giá, ảnh, mã quét, tồn-theo-vị-trí, option facet, định danh / vai trò / organizer của user) để một kết quả tự-đầy-đủ.
URD-IDX-005MMột thay đổi của bản ghi dùng chung hoặc cha fan ra mọi document phụ thuộc (ví dụ đổi tên merchant hoặc organizer, đổi tên location, một mã dùng chung) qua các patch có đích, không bao giờ re-index toàn bộ.
URD-IDX-006MMỗi document mang một dấu phiên bản (vị trí log nguồn) để sự kiện sai-thứ-tự hoặc replay không bao giờ ghi đè trạng thái mới hơn; patch một phần con→cha chỉ động vào trường của riêng nó và không bao giờ lật trạng thái sống / đã-xóa của cha.
URD-IDX-007MSự kiện được xử lý theo lô từng-topic; một lô hỏng parse hoàn toàn, hoặc có ghi index lỗi, được báo là lỗi để retry - luồng không bao giờ âm thầm bỏ qua dữ liệu.
URD-IDX-008MKhi search engine hoặc một dependency enrich không khả dụng, một circuit breaker tạm dừng luồng và probe để hồi phục; các message không-route-được / poison chuyển sang một dead-letter topic thay vì chặn pipeline.
URD-IDX-009SMột enrich lỗi suy giảm an toàn - document vẫn được index với dữ liệu đã có trên nó; một cascade lỗi đơn lẻ không bao giờ chặn các fan-out khác trong lô.
URD-IDX-010MĐịnh danh bản ghi nhúng trong filter của search engine được kiểm tra để một id sai định dạng không bao giờ làm thay đổi tập đích của một fan-out.

Chấp nhận

AC-IDX-01: Một thay đổi đã commit đến collection của nó kèm enrich
GivenWhenThen
Một product variant được tạo trong commerceChange-data event của nó được tiêu thụMột document xuất hiện trong collection product-variants mang dữ liệu join (tên, giá, ảnh, mã quét, tồn-theo-vị-trí, option facet)
AC-IDX-02: Một đổi tên cha fan ra các phụ thuộc
GivenWhenThen
Một merchant có products, categories, và sale-channels được đổi tênThay đổi merchant được tiêu thụDocument merchants và mọi document product / category / sale-channel phụ thuộc hiện tên mới, cập nhật bằng patch có đích, không re-index
AC-IDX-03: Một delete tombstone document
GivenWhenThen
Một bản ghi đã index bị xóa hoặc soft-deleteThay đổi được tiêu thụMột tombstone được ghi để bản ghi không còn xuất hiện trong kết quả, với thứ tự phiên bản được giữ
AC-IDX-04: Một sự kiện replay không ghi đè trạng thái mới hơn
GivenWhenThen
Một document đã phản ánh một thay đổi mới hơnMột sự kiện cũ hơn hoặc replay cho cùng bản ghi đếnSự kiện cũ bị bỏ qua; trạng thái mới hơn được giữ
AC-IDX-05: Sự cố engine tạm dừng và hồi phục không mất mát
GivenWhenThen
Search engine không khả dụng giữa luồngMột lô được xử lýCircuit breaker trip và luồng tạm dừng; khi hồi phục nó tiếp tục từ chỗ dừng mà không mất sự kiện
AC-IDX-06: Lỗi enrich và cascade được cô lập
GivenWhenThen
Một load enrich của một document lỗi, hoặc một fan-out cascade lỗiLô được xử lýDocument vẫn được index với dữ liệu trên nó, các cascade khác vẫn áp, và lô không bị báo lỗi toàn bộ

SCH - Unified Search Query API Built

Feature ID: platform/SCH · Phase: P2 · PRDs: PRD-IDX-001 · Dev: @nx/search

Làm gì cho người dùng: một cách nhất quán để bất kỳ app nào full-text search bất kỳ collection nào - theo tên, barcode, option facet, và hơn nữa - với cùng filter, phân trang, và hợp đồng phản hồi như mọi list endpoint khác, keyword hoặc semantic, và tự động giới hạn theo những gì caller được thấy.

Yêu cầu

IDPYêu cầu
URD-SCH-001MMột caller có thể full-text search bất kỳ collection đã đăng ký nào theo tên với một query term và một filter kiểu Ignis (where / limit / skip / order / include / fields), trả về theo hình bao-hoặc-mảng của list endpoint nền tảng kèm range header.
URD-SCH-002MMột caller có thể yêu cầu một số đếm kết quả khớp cho một collection dưới cùng query và where.
URD-SCH-003MSearch hỗ trợ khớp hybrid keyword + semantic (vector); endpoint chung chạy hybrid mặc định trong khi search gắn-theo-tài-nguyên mặc định keyword-only và cho caller opt-in.
URD-SCH-004MMột resource controller có thể gắn /search + /search/count có-giới-hạn riêng của nó tự động merge một caller-scope (ví dụ tenant) vào query, để một user chỉ search trong những gì họ được thấy.
URD-SCH-005MMột caller có thể chọn trường nào để text-search (queryBy); nếu không thì các trường search mặc định của collection áp dụng.
URD-SCH-006MSearch và count được xác thực (JWT / Basic) và gated bằng permission.
URD-SCH-007STruy vấn một collection chưa được tạo trả về một kết quả rỗng thay vì lỗi; một query không hợp lệ được báo là bad request.

Chấp nhận

AC-SCH-01: Search trả về hợp đồng list chuẩn
GivenWhenThen
Một collection có dữ liệuMột caller search nó theo tên với một filterCác kết quả khớp trả về theo hình bao-hoặc-mảng kèm range header, phân trang theo limit / skip của filter
AC-SCH-02: Count trả lời dưới cùng query
GivenWhenThen
Một collection có dữ liệuMột caller đếm nó với một query và whereSố lượng document khớp được trả về
AC-SCH-03: Search gắn-theo-tài-nguyên giới-hạn-tenant
GivenWhenThen
Một resource controller gắn search có-giới-hạn của nóMột user đã đăng nhập search tài nguyên đóCaller-scope của họ được merge vào query và chỉ bản ghi trong scope của họ được trả về
AC-SCH-04: Collection thiếu trả về rỗng, query xấu báo lỗi
GivenWhenThen
Một collection chưa được tạo, rồi một query không hợp lệMỗi cái được searchCollection thiếu trả về một kết quả rỗng; query không hợp lệ được báo là bad request

Ràng buộc & Không-mục-tiêu

IDRàng buộc / Không-mục-tiêu
URD-CON-001Năng lực này chỉ cung cấp kênh real-time trong ứng dụng - fan-out email / SMS / push-notification ngoài phạm vi.
URD-CON-002Không có mô hình tùy chọn, tắt, hoặc đăng ký thông báo theo từng user; việc gửi được điều khiển bởi phạm vi của hoạt động.
URD-CON-003Ủy quyền room trên transport hiện đang dễ dãi (client xác thực bất kỳ có thể đăng ký một room); tăng cường chống xuyên-tenant là một follow-up đã biết. Room admin / global collection không được emit tới.
URD-CON-004Phát activity event là trách nhiệm của service tạo sự kiện; nền tảng tiêu thụ các sự kiện đúng định dạng.
URD-CON-005Ủy quyền chi tiết theo-từng-action trên API CRUD meta-link hiện đang dễ dãi; siết nó về tập permission meta-link là một follow-up đã biết.
URD-CON-006Lưu trữ được hậu thuẫn bởi một bucket cấu hình duy nhất cho mỗi service chủ; cô lập bucket theo-từng-merchant / theo-từng-tenant ngoài phạm vi.
URD-CON-007Registry ngân hàng là dữ liệu tham chiếu chỉ-đọc đóng gói cùng service; không có bề mặt tác giả hoặc sửa.
URD-CON-008Phát change-data event là trách nhiệm của hạ tầng CDC (Debezium) của nền tảng; search tiêu thụ các sự kiện topic nx.bana.cdc.<schema>.<Table> đúng định dạng và không sở hữu việc capture.
URD-CON-009SaleOrder là một bảng nguồn CDC đã định nghĩa nhưng chưa được index vào một search collection; nó được dành cho một increment sau.
URD-CON-010Re-index / backfill là một snapshot replay vận hành; không có UI re-index cho người dùng cuối.
URD-CON-011Giới hạn xuyên-tenant trên search query dựa vào controller gắn cung cấp caller-scope; endpoint search chung thô được gated bằng permission collection, không bằng scope tenant theo-từng-bản-ghi.

Lịch sử phiên bản

VersionDateThay đổi
v1.02026-06-15URD ban đầu - ACT activity notifications và WSS realtime WebSocket stream, cả hai Built. Hậu thuẫn PRD-ACT-001.
v1.12026-06-15Thêm backbone media - AST asset & object storage, MTL meta-link binding, và BNK dữ liệu tham chiếu ngân hàng Việt Nam, đều Built. Hậu thuẫn PRD-AST-001.
v1.22026-06-15Thêm backbone search - IDX search indexing & CDC sync và SCH unified search query API, cả hai Built. Hậu thuẫn PRD-IDX-001.

Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.