|
| 1 | +package event |
| 2 | + |
| 3 | +import ( |
| 4 | + "encoding/json" |
| 5 | + "fmt" |
| 6 | + |
| 7 | + "github.com/jellyfishphp/event-queue-worker/internal/process" |
| 8 | +) |
| 9 | + |
| 10 | +type Listener struct { |
| 11 | + Type string `json:"type"` |
| 12 | + Identifier string `json:"identifier"` |
| 13 | + EventName string |
| 14 | +} |
| 15 | + |
| 16 | +type ListenerReaderInterface interface { |
| 17 | + GetAll() []Listener |
| 18 | +} |
| 19 | + |
| 20 | +type ListenerReader struct { |
| 21 | + command string |
| 22 | +} |
| 23 | + |
| 24 | +func (listenerReader *ListenerReader) GetAll() []Listener { |
| 25 | + var ungroupedListeners []Listener |
| 26 | + |
| 27 | + process := process.NewProcess(listenerReader.command) |
| 28 | + output, error := process.Start() |
| 29 | + |
| 30 | + if error != nil { |
| 31 | + return ungroupedListeners |
| 32 | + } |
| 33 | + |
| 34 | + var groupedListeners map[string][]Listener |
| 35 | + error = json.Unmarshal(output, &groupedListeners) |
| 36 | + |
| 37 | + if error != nil { |
| 38 | + return ungroupedListeners |
| 39 | + } |
| 40 | + |
| 41 | + for eventName, listeners := range groupedListeners { |
| 42 | + for _, listener := range listeners { |
| 43 | + listener.EventName = eventName |
| 44 | + ungroupedListeners = append(ungroupedListeners, listener) |
| 45 | + } |
| 46 | + } |
| 47 | + |
| 48 | + return ungroupedListeners |
| 49 | +} |
| 50 | + |
| 51 | +func NewListenerReader(command string) ListenerReaderInterface { |
| 52 | + return &ListenerReader{ |
| 53 | + command: command, |
| 54 | + } |
| 55 | +} |
| 56 | + |
| 57 | +type ListenerConverterInterface interface { |
| 58 | + ConvertToProcess(listener Listener) process.ProcessInterface |
| 59 | + ConvertMultipleToProcesses(listeners []Listener) []process.ProcessInterface |
| 60 | +} |
| 61 | + |
| 62 | +type ListenerConverter struct { |
| 63 | + command string |
| 64 | +} |
| 65 | + |
| 66 | +func (listenerConverter *ListenerConverter) ConvertToProcess(listener Listener) process.ProcessInterface { |
| 67 | + return process.NewProcess( |
| 68 | + fmt.Sprintf( |
| 69 | + "%s %s %s", |
| 70 | + listenerConverter.command, |
| 71 | + listener.EventName, |
| 72 | + listener.Identifier, |
| 73 | + ), |
| 74 | + ) |
| 75 | +} |
| 76 | + |
| 77 | +func (listenerConverter *ListenerConverter) ConvertMultipleToProcesses(listeners []Listener) []process.ProcessInterface { |
| 78 | + var processes []process.ProcessInterface |
| 79 | + |
| 80 | + for _, listener := range listeners { |
| 81 | + processes = append(processes, listenerConverter.ConvertToProcess(listener)) |
| 82 | + } |
| 83 | + |
| 84 | + return processes |
| 85 | +} |
| 86 | + |
| 87 | +func NewListenerConverter(command string) ListenerConverterInterface { |
| 88 | + return &ListenerConverter{ |
| 89 | + command: command, |
| 90 | + } |
| 91 | +} |
0 commit comments