graphicek/server/services/mqtt_brokers_service.go

149 lines
2.7 KiB
Go
Raw Normal View History

2024-04-01 19:42:20 +02:00
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,
)
}