sirius/internal/model/model.go

132 lines
2.0 KiB
Go
Raw Permalink Normal View History

2023-04-17 05:00:34 +03:00
package model
import "fmt"
type Bolid struct {
Devices []DevBolid
Zones []ZoneBolid
}
type DevBolid struct {
Name string
Type int64
Addr int64
Input []InputBolid
}
type InputBolid struct {
ZoneId int64
Name string
Addr int64
}
type ZoneBolid struct {
ZoneId int64
Name string
Number int64
}
type ZoneInfo struct {
ZoneNum int64
ZoneName string
Input []InputInfo
}
type InputInfo struct {
DevAdd int64
Address int64
}
func (z *ZoneInfo) InputString() string {
var zones string
i := 0
for _, inp := range z.Input {
if i != 0 {
zones = zones + ", "
}
zones = zones + fmt.Sprint(inp.DevAdd) + "." + fmt.Sprint(inp.Address)
i++
}
return zones
}
func (b *Bolid) ZoneInfo() []ZoneInfo {
var zonesInfo []ZoneInfo
for _, zon := range b.Zones {
var zi ZoneInfo
for _, dev := range b.Devices {
var i InputInfo
for _, inp := range dev.Input {
if zon.ZoneId == inp.ZoneId {
zi.ZoneNum = zon.Number
zi.ZoneName = zon.Name
i.DevAdd = dev.Addr
i.Address = inp.Addr
zi.Input = append(zi.Input, i)
}
}
}
zonesInfo = append(zonesInfo, zi)
}
return zonesInfo
}
func (s *Sirius) NewBolid() *Bolid {
return &Bolid{
Devices: s.NewDevices(),
Zones: s.NewZones(),
}
}
func (s *Sirius) NewDevices() []DevBolid {
var devices []DevBolid
for _, dev := range s.Device.Get() {
d := DevBolid{
Name: dev.Name,
Type: dev.Type,
Addr: dev.Addr,
Input: s.GetInput(dev.DevID),
}
devices = append(devices, d)
}
return devices
}
func (s *Sirius) GetInput(devId int64) []InputBolid {
var inputs []InputBolid
for _, inp := range s.Input.Get() {
if devId == inp.DevID {
i := InputBolid{
ZoneId: inp.ZoneID,
Name: inp.Name,
Addr: inp.AddrU,
}
inputs = append(inputs, i)
}
}
return inputs
}
func (s *Sirius) NewZones() []ZoneBolid {
var zones []ZoneBolid
for _, zon := range s.Zone.Get() {
z := ZoneBolid{
ZoneId: zon.ZoneID,
Name: zon.Name,
Number: zon.Number,
}
zones = append(zones, z)
}
return zones
}