Add Go rewrite with Postgres 17 and Dokploy Docker Compose
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
)
|
||||
|
||||
type User struct {
|
||||
ID int
|
||||
Username string
|
||||
PasswordHash string
|
||||
Role string
|
||||
CreatedAt time.Time
|
||||
}
|
||||
|
||||
type ShareLink struct {
|
||||
ID int
|
||||
Token string
|
||||
ServerID *int
|
||||
ExpiresAt *time.Time
|
||||
MaxUses int
|
||||
ValidityDays *int
|
||||
UseCount int
|
||||
CreatedAt time.Time
|
||||
CleanedAt *time.Time
|
||||
TrafficQuotaGB *float64
|
||||
TrafficUsedGB float64
|
||||
SubscriptionUntil *time.Time
|
||||
AllowedServerIDs json.RawMessage
|
||||
}
|
||||
|
||||
type ShareCreation struct {
|
||||
ID int64
|
||||
ShareLinkID int
|
||||
ServerID int
|
||||
Protocol string
|
||||
ClientID string
|
||||
ConnectionName string
|
||||
ResponseJSON *string
|
||||
CreatedAt time.Time
|
||||
DeletedAt *time.Time
|
||||
}
|
||||
|
||||
type RenewalCode struct {
|
||||
ID int
|
||||
Code string
|
||||
AddDays int
|
||||
MaxUses int
|
||||
UseCount int
|
||||
ShareLinkID *int
|
||||
CodeExpiresAt *time.Time
|
||||
Note *string
|
||||
CodeTarget string
|
||||
CreatedAt time.Time
|
||||
}
|
||||
|
||||
type Member struct {
|
||||
ID int
|
||||
Username string
|
||||
Email *string
|
||||
PasswordHash string
|
||||
CreatedAt time.Time
|
||||
LastLoginAt *time.Time
|
||||
}
|
||||
|
||||
type MemberSubscription struct {
|
||||
MemberID int
|
||||
ExpiresAt *time.Time
|
||||
ValidityDays *int
|
||||
MaxConfigs int
|
||||
ConfigCount int
|
||||
CleanedAt *time.Time
|
||||
}
|
||||
|
||||
type ServerInfo struct {
|
||||
ID int `json:"id"`
|
||||
Label string `json:"label"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Protocols []string `json:"protocols"`
|
||||
Disabled bool `json:"disabled"`
|
||||
Flag string `json:"flag,omitempty"`
|
||||
FlagURL string `json:"flag_url,omitempty"`
|
||||
Speed string `json:"speed,omitempty"`
|
||||
Notice string `json:"notice,omitempty"`
|
||||
}
|
||||
|
||||
func (l ShareLink) IsFloating() bool {
|
||||
return l.ValidityDays != nil && *l.ValidityDays > 0 && l.ExpiresAt == nil
|
||||
}
|
||||
|
||||
func (l ShareLink) IsExpired() bool {
|
||||
if l.IsFloating() {
|
||||
return false
|
||||
}
|
||||
if l.ExpiresAt == nil {
|
||||
return true
|
||||
}
|
||||
return l.ExpiresAt.Before(time.Now())
|
||||
}
|
||||
|
||||
func (l ShareLink) ExpiresLabel() string {
|
||||
if l.ExpiresAt != nil {
|
||||
return l.ExpiresAt.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
if l.ValidityDays != nil && *l.ValidityDays > 0 {
|
||||
return "с первого конфига — " + itoa(*l.ValidityDays) + " дн."
|
||||
}
|
||||
return "—"
|
||||
}
|
||||
|
||||
func itoa(n int) string {
|
||||
if n == 0 {
|
||||
return "0"
|
||||
}
|
||||
neg := n < 0
|
||||
if neg {
|
||||
n = -n
|
||||
}
|
||||
var b [20]byte
|
||||
i := len(b)
|
||||
for n > 0 {
|
||||
i--
|
||||
b[i] = byte('0' + n%10)
|
||||
n /= 10
|
||||
}
|
||||
if neg {
|
||||
i--
|
||||
b[i] = '-'
|
||||
}
|
||||
return string(b[i:])
|
||||
}
|
||||
Reference in New Issue
Block a user