Skip to main content
Skip table of contents

Task Breakdown (WIP)

Milestones based on Product: Milestones (draft)

These technical workstreams support Product goals:

  1. Establish Unified Identity

    1. Epic: EXP-81180 - TO BE DISCUSSED with Alok

  2. PES to ZMP Event Ingestion Pipeline

    1. Epic: EXP-81184

  3. Loyalty Profile Section In ZMP

    1. EXP-81183

Repo: https://gitlab.infr.zglbl.net/rgemmail/loyalty-poc

Open Questions:

1. Person → Attributes

Relationship: One-to-Many (1:N)

  • One person can have many attributes

  • Attributes are key-value pairs (JSON map)

  • No fixed limit

→ Do we have a whitelist of attributes from loyalty to be updated OR we update ALL. Collision?

  1. Do we build on the existing Python event-consumers project?

    1. Benefits:

      1. Infra is all there

      2. Existing opinonated patterns

        • Faster path to solution as decisions are already made

      3. CI/Pipelines

      4. Thrift Client exists

      5. Internal Zeta team member support

      6. Deployable

    2. Cons:

      1. Team familiarity

        1. Countered by following existing patterns

        2. Countered by Vibe coding 😛

      2. ?

Task Decomposition

Loyalty consumer

  1. Boostrap Spring Boot service (Not required for python impl)

  2. Docker compose to spin up local Kafka for dev

  3. Test Fixtures: some .json files we can push in for testing 

  4. Generate People Service Thrift Java client (Not required for python impl)

    1. Figure out how to build thrift client to talk to person service 

    2. Externalize configuration (Kafka, PeopleService endpoint, mapping)

  5. Implement PES Kafka consumer

    1. Consumer code to connect to kafka and consume (make sure async to avoid perf issues) 

    2. Deserialize event schema

    3. Extract:

      • customer_id

      • event type

      • relevant payload

    4. Add structured logging

  6. Implement static customer_id -> site_id mapping

    1. Create AccountMappingResolver abstraction

    2. Implement config-based mapping

    3. Handle missing mappings (DLQ? Error?)

    4. Working with ID Resolution contracts

  7. Translate Loyalty event and apply PeopleService update

    1. Map Loyalty payload → People update model [Confirm if they want first class property for tiers, metric]

    2. Call PeopleService update using resolved bsin

    3. Handle retries for transient failures

    4. Work to ID resolution contract

  8. Implement ID resolution using People Thrift API

    1. Merging (discovery how will we handle?)

    2. Build Thrift wrapper

    3. Handle error (retryable failures, non-retryable in DLQ)

ZMP Loyalty UI

  1. Local dev setup

    1. Spin up fe-app, fe-server and connect to preprod bme-app

  2. Discovery

    1. Confirm existing person API call already includes loyalty data.

    2. Identify where that data lives in the response.

    3. Confirm no new backend changes are needed.

  3. Add statsig feature flag

    1. Statsig Docs - Feature Flag Management

  4. fe-app

    1. Add new “Loyalty” tab in UI

    2. Reuse existing person data (assumption: no new API call but confirm)

    3. Render based on the Epic details.

      1. We need Figma for this

      2. Empty state

      3. Render when toggle is off? No tab at all

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.