TP TipPlatforma Spat na overview

Aktivne zdrojove diagramy

Notification Flow V2

Aktivny diagram projektu vyrenderovany do SVG, s moznostou zoomu a pohybu v plne HTML stranke.

Mermaid -> SVGZoom a pan07_notification_flow_v2.mermaid

Vyrenderovany diagram

Diagram sa na tejto stranke renderuje priamo z Mermaid definicie do SVG. Mozes ho priblizovat, oddialovat aj posuvat bez straty ostrosti.

Interaktivny nahlad Pre detail pouzi zoom alebo presun po platne.
Renderujem diagram...
Zobrazit Mermaid zdroj
flowchart TD
    subgraph Triggers["Event Triggers"]
        EV1["User Registers"]
        EV2["Group Admin Sends Invite"]
        EV3["Scheduled Job\n(every minute)"]
        EV4["Match status β†’ postponed"]
        EV5["is_final = true\n(result entered)"]
        EV6["Score Recalculated\n(result corrected)"]
        EV7["Tournament status β†’ finished"]
        EV8["Postponed match rescheduled\n(new scheduled_at set)"]
    end

    subgraph Jobs["pg_cron / VPS Scheduled Jobs"]
        JOB1{"Match deadline\n- 60 min?\nPlayer has no tip?"}
        JOB2{"Match deadline\n- 15 min?\nPlayer has no tip?"}
        JOB3{"scheduled_at +\nmatch_duration + 30 min?\nis_final = false?"}
    end

    subgraph EmailTargets["Email Notifications"]
        EM1["πŸ“§ Player β€” Registration Confirm"]
        EM2["πŸ“§ Invited User β€” Group Invitation"]
        EM3["πŸ“§ Player β€” Reminder (60 min)"]
        EM4["πŸ“§ Player β€” Reminder (15 min)"]
        EM5["πŸ“§ System Admin β€” Missing Result Alert"]
        EM6["πŸ“§ All Group Players β€” Match Result + Points"]
        EM7["πŸ“§ All Group Players β€” Result Corrected"]
        EM8a["πŸ“§ All Group Players β€” Match Postponed\n(new time: [date])"]
        EM8b["πŸ“§ All Group Players β€” Match Postponed\n(new time TBD)"]
        EM8c["πŸ“§ All Group Players β€” Match Rescheduled\n(new time confirmed)"]
        EM9["πŸ“§ All Group Players β€” Tournament Ended"]
    end

    subgraph PushTargets["Push Notifications β€” Phase 2 (Web Push / VAPID)"]
        PU1["πŸ”” Player β€” Reminder (60 min)"]
        PU2["πŸ”” Player β€” Reminder (15 min)"]
        PU3["πŸ”” Player β€” Result + Points Earned"]
        PU4["πŸ”” Player β€” Leaderboard Position Changed"]
        PU5["πŸ”” Player β€” Match Postponed"]
    end

    EV1 --> EM1
    EV2 --> EM2

    EV3 --> JOB1
    EV3 --> JOB2
    EV3 --> JOB3

    JOB1 -->|"Yes"| EM3
    JOB1 -->|"Yes"| PU1
    JOB2 -->|"Yes"| EM4
    JOB2 -->|"Yes"| PU2
    JOB3 -->|"Yes"| EM5

    EV4 --> PST_DEC{"scheduled_at\nprovided?"}
    PST_DEC -->|"Yes"| EM8a
    PST_DEC -->|"No"| EM8b
    EV4 --> PU5
    EV8 --> EM8c

    EV5 --> EM6
    EV5 --> PU3
    EV5 --> PU4

    EV6 --> EM7
    EV6 --> PU3
    EV6 --> PU4

    EV7 --> EM9

    subgraph Fallback["Fallback Logic β€” Phase 2"]
        FB["Push fails?\n(e.g. iOS < 16.4)"]
        FB --> EM3
        FB --> EM4
    end

    PU1 -.->|"if push unavailable"| FB
    PU2 -.->|"if push unavailable"| FB

    style Triggers fill:#dbeafe,stroke:#3b82f6
    style Jobs fill:#fef9c3,stroke:#eab308
    style EmailTargets fill:#dcfce7,stroke:#16a34a
    style PushTargets fill:#fce7f3,stroke:#ec4899
    style Fallback fill:#f1f5f9,stroke:#64748b