package services import "encoding/hex" type SensorsService struct { ctx *Context } type SensorItem struct { Id int64 `json:"id"` Name string `json:"name"` AuthKey string `json:"authKey"` } func (s *SensorsService) GetList() ([]SensorItem, error) { sensors := make([]SensorItem, 0) rows, err := s.ctx.DB.Query("SELECT id, name, auth_key FROM sensors") if err != nil { return nil, err } defer rows.Close() for rows.Next() { item := SensorItem{} err := rows.Scan(&item.Id, &item.Name, &item.AuthKey) if err != nil { return nil, err } sensors = append(sensors, item) } err = rows.Err() if err != nil { return nil, err } return sensors, nil } func (s *SensorsService) Create(name string) (*SensorItem, error) { item := SensorItem{ Name: name, AuthKey: hex.EncodeToString(generateRandomKey(32)), } res, err := s.ctx.DB.Exec("INSERT INTO sensors (id, name, auth_key) VALUES (?, ?)", item.Name, item.AuthKey) if err != nil { return nil, err } item.Id, err = res.LastInsertId() if err != nil { return nil, err } return &item, nil } func (s *SensorsService) GetById(id int64) (*SensorItem, error) { item := SensorItem{} row := s.ctx.DB.QueryRow("SELECT id, name, auth_key FROM sensors WHERE id = ?", id) err := row.Scan(&item.Id, &item.Name, &item.AuthKey) if err != nil { return nil, err } return &item, nil } func (s *SensorsService) Update(id int64, name string) (*SensorItem, error) { item, err := s.GetById(id) if err != nil { return nil, err } item.Name = name _, err = s.ctx.DB.Exec("UPDATE sensors SET name = ? WHERE id = ?", item.Name, item.Id) if err != nil { return nil, err } return item, nil }