# ADR: Segments ## Workflow 1. MPS calls MSS API to sync segment with merchant_id, segment_type, start_date, end_date. MSS returns segment_name. (MSS gets to decide on implementation. managing one segment for merchant_id/segment_type vs. one per promotion) 3. MPS creates promo in markdown with segment_name 4. MPS saves locally ## One segment per merchant usercase versus per promotion ### One segment per merchant usecase To support one segment per merchant usecase: - Check if segment exists - If yes: check segment.end_date < promotion.end_date - If yes: - Extend segment.end_date - If no: - Do nothing - If no: - Create a new segment with end_date = promo.end_date Pros: - No duplicates for overlapping promotions. - Real-time updates may be easier to support since only one segment copy (per definition) has to be kept up-to-date - Keeps no. of segments low even if segments are created during promo creation (and not promo start date). eg: If merchant creates 10 promos together, during promo creation, mss will create only one segment on segmentation service. As compared to async flow which will end up creating 10 segments. Cons: - SS would have to support a new API to extend end_date - More complexity on MSS. It has to check if segment exists. Has to call new API to update end date. ### One per promotion - Create new segment for every promo request. Pros: - Less complicated - Fewer changes on SS Cons: - If we need real-time updates, all promo segments would have to be updated. - Needs a scheduler to sync segments only on promo start date. eg: If a merchant creates multiple non-overlapping promotions, we might end up creating multiple segments (unless we sync segment on promo start date) - Will create duplicates for overlapping promos