149 lines
2.7 KiB
Go
149 lines
2.7 KiB
Go
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,
|
|
)
|
|
}
|