/** * Handles a received message from DB Queue, sending relevant info to connected client */ func HandleQueueMessage(msg models.QueueMessage) { // Validations // TODO: Abstract this please if msg.Target == "" || msg.Target != "data" { fmt.Println("Invalid or missing target defined in message!") return } if msg.Code == "" { fmt.Println("No entity/code defined in message!") return } if msg.Action == "" { fmt.Println("No action defined in message!") return } if msg.Data == nil { fmt.Println("No data provided in message!") return } // Variables for query result var result interface{} var err error // Check what type of entity we're dealing with switch msg.Code { case "game": err, result = dbModels.Games{}.HandleMessage(msg.BaseMessage) default: fmt.Printf("Unknown entity: %s\n", msg.Code) return } // Error from query if err != nil { fmt.Println(err.Error()) return } // Parse result from relevant interface model to bytes data, err := json.Marshal(result) if err != nil { fmt.Println(err.Error()) return } // Parse previous bytes to generic map var outData = make(map[string]interface{}) if err := json.Unmarshal(data, &outData); err != nil { fmt.Println(err.Error()) return } // Build base response message and init final one msg.Receiver = msg.Sender msg.Sender = ID msg.Data = outData // Send it q.SendMessage(msg) }