Files
zeromesh/internal/model/models.go

102 lines
4.0 KiB
Go

package model
import (
"time"
"gorm.io/gorm"
)
type User struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
Username string `gorm:"uniqueIndex;size:64" json:"username"`
Password string `json:"-"`
Role string `gorm:"default:user;size:16" json:"role"`
Token string `json:"-"`
QuotaNetworks int `gorm:"default:3" json:"quota_networks"`
QuotaNodes int `gorm:"default:20" json:"quota_nodes"`
}
func (u *User) IsAdmin() bool {
return u.Role == "admin"
}
type Network struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
UserID uint `gorm:"index;not null" json:"user_id"`
NetworkID uint32 `gorm:"uniqueIndex;not null" json:"network_id"`
Name string `gorm:"size:128" json:"name"`
IPRange string `gorm:"size:64" json:"ip_range"`
IP6Range string `gorm:"size:64" json:"ip6_range"`
MTU int `gorm:"default:2800" json:"mtu"`
Multicast bool `gorm:"default:true" json:"multicast"`
Private bool `gorm:"default:true" json:"private"`
Members []NetworkMember `json:"members,omitempty"`
}
type NetworkMember struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
NetworkID uint32 `gorm:"index;not null" json:"network_id"`
NodeID string `gorm:"size:40;index;not null" json:"node_id"`
IPAddress string `gorm:"size:64" json:"ip_address"`
Authorized bool `gorm:"default:false" json:"authorized"`
Label string `gorm:"size:128" json:"label"`
}
type Node struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
UserID uint `gorm:"index;not null" json:"user_id"`
NodeID string `gorm:"uniqueIndex;size:40" json:"node_id"`
PublicKey string `gorm:"size:128" json:"public_key"`
Name string `gorm:"size:128" json:"name"`
IPAddress string `gorm:"size:64" json:"ip_address"`
Port int `json:"port"`
Online bool `gorm:"default:false" json:"online"`
LastSeen *time.Time `json:"last_seen"`
Version string `gorm:"size:32" json:"version"`
}
type Config struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Key string `gorm:"uniqueIndex;size:128" json:"key"`
Value string `gorm:"size:1024" json:"value"`
}
type ApiLog struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"created_at"`
IP string `gorm:"size:64;index" json:"ip"`
Method string `gorm:"size:10" json:"method"`
Path string `gorm:"size:512;index" json:"path"`
StatusCode int `json:"status_code"`
Query string `gorm:"size:1024" json:"query"`
UserAgent string `gorm:"size:512" json:"user_agent"`
LatencyMs int64 `json:"latency_ms"`
}
type ErrorLog struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"created_at"`
IP string `gorm:"size:64;index" json:"ip"`
Method string `gorm:"size:10" json:"method"`
Path string `gorm:"size:512;index" json:"path"`
StatusCode int `json:"status_code"`
Query string `gorm:"size:1024" json:"query"`
UserAgent string `gorm:"size:512" json:"user_agent"`
RequestBody string `gorm:"type:text" json:"request_body"`
ResponseBody string `gorm:"type:text" json:"response_body"`
LatencyMs int64 `json:"latency_ms"`
}