OOP designs

CRM design

~3 mins read

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
class Base: 
    uid: UID

class UpdateRecord:
    updates: JSON 

class Contact(Base):
    email: Email 
    subscriptions: list[Channel]
    preferences: list[Preference]
    
class Channel(Base):
    ... 

class Email(Channel):
    ... 

class SMS(Channel):
    ... 

class PushNotification(Channel):
    ... 

class Newsletter(Channel):
    ... 

class Form(Channel):
    ...

class Preference(Base):
    ...

class ChannelConsent(Preference):
    channel_id: UID 


class Event(Base):
    ...

class Visit(Event):
    ...

class Click(Event):
    ...

class Submit(Event):
    ...

class PubSubAPI:
    def publish():
        ...
    def subscribe():
        ...

class EventAPI(PubSubAPI):
    ...

class Trigger:
    source: Event
    target: Event 

class Journey:
    contact: Contact
    triggers: list[Trigger]


class CRUDAPI:
    def create():
        ...
    def read():
        ...
    def update():
        ...
    def delete():
        ...

class ContactAPI(CRUDAPI):
    ... 

class ChannelAPI(CRUDAPI):
    ... 

class JourneyAPI(CRUDAPI):
    ...


class Orchestrator:
    journeys: list[Journeys]
    events_api: EventAPI


class App: 
    contacts: ContactAPI
    channels: ChannelAPI
    orchestrator: Orchestrator

    def init():
        ... 

    

🎰