新增本地持久化存储

This commit is contained in:
zyj
2025-11-22 17:48:04 +08:00
parent 62b5a3f9bc
commit ec3fc77403
6 changed files with 470 additions and 0 deletions

107
storage/site_store.go Normal file
View File

@@ -0,0 +1,107 @@
package storage
import (
"fmt"
"go-site-clone/types"
"time"
)
// SiteRecord 站点数据记录(带时间戳)
type SiteRecord struct {
types.NginxSiteConfig
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// AddSite 添加站点配置
func (s *Store) AddSite(site types.NginxSiteConfig) error {
record := SiteRecord{
NginxSiteConfig: site,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
}
return s.Set(BucketSites, site.Name, record)
}
// GetSite 获取站点配置
func (s *Store) GetSite(siteName string) (*types.NginxSiteConfig, error) {
var record SiteRecord
if err := s.Get(BucketSites, siteName, &record); err != nil {
return nil, err
}
return &record.NginxSiteConfig, nil
}
// UpdateSite 更新站点配置
func (s *Store) UpdateSite(site types.NginxSiteConfig) error {
var record SiteRecord
// 尝试获取现有记录以保留创建时间
if err := s.Get(BucketSites, site.Name, &record); err == nil {
record.NginxSiteConfig = site
record.UpdatedAt = time.Now()
} else {
// 如果不存在,创建新记录
record = SiteRecord{
NginxSiteConfig: site,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
}
}
return s.Set(BucketSites, site.Name, record)
}
// DeleteSite 删除站点配置
func (s *Store) DeleteSite(siteName string) error {
return s.Delete(BucketSites, siteName)
}
// GetAllSites 获取所有站点配置
func (s *Store) GetAllSites() ([]types.NginxSiteConfig, error) {
var records []SiteRecord
if err := s.GetAll(BucketSites, &records); err != nil {
return nil, err
}
sites := make([]types.NginxSiteConfig, len(records))
for i, record := range records {
sites[i] = record.NginxSiteConfig
}
return sites, nil
}
// SiteExists 检查站点是否存在
func (s *Store) SiteExists(siteName string) bool {
return s.Exists(BucketSites, siteName)
}
// GetSitesByStatus 根据启用状态获取站点
func (s *Store) GetSitesByStatus(enabled bool) ([]types.NginxSiteConfig, error) {
allSites, err := s.GetAllSites()
if err != nil {
return nil, err
}
var filtered []types.NginxSiteConfig
for _, site := range allSites {
if site.Enabled == enabled {
filtered = append(filtered, site)
}
}
return filtered, nil
} // UpdateSiteStatus 更新站点启用状态
func (s *Store) UpdateSiteStatus(siteName string, enabled bool) error {
site, err := s.GetSite(siteName)
if err != nil {
return fmt.Errorf("站点不存在: %v", err)
}
site.Enabled = enabled
return s.UpdateSite(*site)
}
// GetSitesCount 获取站点总数
func (s *Store) GetSitesCount() int {
return s.Count(BucketSites)
}