141
example/powermate-console-frontend/models.go
Normal file
141
example/powermate-console-frontend/models.go
Normal file
@@ -0,0 +1,141 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/charmbracelet/huh"
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
// --- [상수 및 Enum] ---
|
||||
type AppState int
|
||||
|
||||
const (
|
||||
StateLogin AppState = iota
|
||||
StateDashboard
|
||||
StateTerminal
|
||||
StateSettings
|
||||
)
|
||||
|
||||
type SettingSubState int
|
||||
|
||||
const (
|
||||
SubMenu SettingSubState = iota
|
||||
SubWifiScanList
|
||||
SubWifiConnect
|
||||
SubIPConfig
|
||||
SubAPMode
|
||||
SubSystem
|
||||
SubSafety
|
||||
SubAccount
|
||||
)
|
||||
|
||||
// --- [데이터 구조체] ---
|
||||
type ConnectionDetails struct {
|
||||
IP, Username, Password, Token string
|
||||
}
|
||||
|
||||
type PowerMetrics struct {
|
||||
Voltage, Current, Power float64
|
||||
}
|
||||
|
||||
type WifiInfo struct {
|
||||
SSID string
|
||||
RSSI int
|
||||
}
|
||||
|
||||
type SwitchInfo struct {
|
||||
MainOn, UsbOn bool
|
||||
}
|
||||
|
||||
type DeviceStatus struct {
|
||||
Vin PowerMetrics
|
||||
Main PowerMetrics
|
||||
Usb PowerMetrics
|
||||
Wifi WifiInfo
|
||||
Sw SwitchInfo
|
||||
}
|
||||
|
||||
type InitApiResponse struct {
|
||||
Load12vOn bool `json:"load_12v_on"`
|
||||
Load5vOn bool `json:"load_5v_on"`
|
||||
}
|
||||
|
||||
type WifiAP struct {
|
||||
SSID string `json:"ssid"`
|
||||
RSSI int `json:"rssi"`
|
||||
AuthMode string `json:"authmode"`
|
||||
}
|
||||
|
||||
type SettingsPayload struct {
|
||||
Connected bool `json:"connected,omitempty"`
|
||||
CurSSID string `json:"ssid,omitempty"`
|
||||
CurIP struct {
|
||||
IP string `json:"ip"`
|
||||
Gateway string `json:"gateway"`
|
||||
Subnet string `json:"subnet"`
|
||||
DNS1 string `json:"dns1"`
|
||||
DNS2 string `json:"dns2"`
|
||||
} `json:"ip,omitempty"`
|
||||
|
||||
WifiSSID string `json:"ssid,omitempty"`
|
||||
WifiPass string `json:"password,omitempty"`
|
||||
|
||||
NetType string `json:"net_type,omitempty"`
|
||||
IP string `json:"ip,omitempty"`
|
||||
Gateway string `json:"gateway,omitempty"`
|
||||
Subnet string `json:"subnet,omitempty"`
|
||||
DNS1 string `json:"dns1,omitempty"`
|
||||
DNS2 string `json:"dns2,omitempty"`
|
||||
|
||||
Mode string `json:"mode,omitempty"`
|
||||
APSSID string `json:"ap_ssid,omitempty"`
|
||||
APPass string `json:"ap_password,omitempty"`
|
||||
|
||||
Baudrate string `json:"baudrate,omitempty"`
|
||||
Period string `json:"period,omitempty"`
|
||||
|
||||
VinLimit float64 `json:"vin_current_limit,omitempty"`
|
||||
MainLimit float64 `json:"main_current_limit,omitempty"`
|
||||
UsbLimit float64 `json:"usb_current_limit,omitempty"`
|
||||
|
||||
NewUser string `json:"new_username,omitempty"`
|
||||
NewPass string `json:"new_password,omitempty"`
|
||||
}
|
||||
|
||||
// --- [메인 모델] ---
|
||||
type model struct {
|
||||
state AppState
|
||||
connDetails *ConnectionDetails
|
||||
formData *ConnectionDetails
|
||||
|
||||
status DeviceStatus
|
||||
width int
|
||||
height int
|
||||
|
||||
// Settings State
|
||||
settingSubState SettingSubState
|
||||
menuSelection *string // [수정] 포인터로 변경 (메뉴 선택 버그 해결 핵심)
|
||||
scanning bool // [추가] Wi-Fi 스캔 중 상태 표시
|
||||
settingsData SettingsPayload
|
||||
wifiScanList []WifiAP
|
||||
|
||||
// Forms
|
||||
loginForm *huh.Form
|
||||
settingsForm *huh.Form
|
||||
|
||||
err error
|
||||
}
|
||||
|
||||
// --- [Tea Messages] ---
|
||||
type TerminalFinishedMsg struct{}
|
||||
type LoginSuccessMsg string
|
||||
type InitStateMsg SwitchInfo
|
||||
type SettingsFetchedMsg SettingsPayload
|
||||
type ActionDoneMsg struct{}
|
||||
type WifiScanListMsg []WifiAP
|
||||
|
||||
type WsPartialMsg struct {
|
||||
Vin, Main, Usb *PowerMetrics
|
||||
Wifi *WifiInfo
|
||||
Sw *SwitchInfo
|
||||
Conn *websocket.Conn
|
||||
}
|
||||
Reference in New Issue
Block a user