package services import "basic-sensor-receiver/models" type MQTTBrokersService struct { ctx *Context } func (s *MQTTBrokersService) GetList() ([]models.MQTTBrokerItem, error) { brokers := []models.MQTTBrokerItem{} err := s.ctx.DB.Select(&brokers, ` SELECT id, name, address, username, password, client_id FROM mqtt_brokers ORDER BY name ASC `) if err != nil { return nil, err } return brokers, nil } func (s *MQTTBrokersService) GetById(id int64) (*models.MQTTBrokerItem, error) { broker := models.MQTTBrokerItem{} err := s.ctx.DB.Get(&broker, ` SELECT id, name, address, username, password, client_id FROM mqtt_brokers WHERE id = $1 `, id, ) if err != nil { return nil, err } return &broker, nil } func (s *MQTTBrokersService) Create(name string, address string, username *string, password *string, clientId *string) (*models.MQTTBrokerItem, error) { broker := models.MQTTBrokerItem{ Name: name, Address: address, Username: username, Password: password, ClientId: clientId, } res, err := s.ctx.DB.NamedExec( ` INSERT INTO mqtt_brokers (name, address, username, password, client_id) VALUES (:name, :address, :username, :password, :client_id) `, broker, ) if err != nil { return nil, err } id, err := res.LastInsertId() if err != nil { return nil, err } broker.Id = int(id) return &broker, nil } func (s *MQTTBrokersService) Update(id int64, name string, address string, username *string, password *string, clientId *string) (*models.MQTTBrokerItem, error) { broker := models.MQTTBrokerItem{ Id: int(id), Name: name, Address: address, Username: username, Password: password, ClientId: clientId, } _, err := s.ctx.DB.NamedExec( ` UPDATE mqtt_brokers SET name = :name, address = :address, username = :username, password = :password, client_id = :client_id WHERE id = :id `, broker, ) if err != nil { return nil, err } return &broker, nil } func (s *MQTTBrokersService) Delete(id int64) error { _, err := s.ctx.DB.Exec( ` DELETE FROM mqtt_brokers WHERE id = $1 `, id, ) if err != nil { return err } return nil } func (s *MQTTBrokersService) PublishTopic(brokerId int64, topic string, message string, qos byte, retain bool) error { broker, err := s.GetById(brokerId) if err != nil { return err } username := "" if broker.Username != nil { username = *broker.Username } password := "" if broker.Password != nil { password = *broker.Password } clientId := "" if broker.ClientId != nil { clientId = *broker.ClientId } return s.ctx.Integrations.MQTT.Publish( broker.Address, username, password, clientId, retain, qos, topic, message, ) }