refactor(vfs): 重构VFS模块,拆分数据访问逻辑与路径解析逻辑

将原先的 `vfs.go` 文件中的功能进行拆分,创建了独立的 DAO 层文件 `vfs_dao.go`
和路径处理文件 `vfs_path.go`,以提升代码结构清晰度和可维护性。

- 将数据库操作相关方法迁移至 `VfsDAO` 结构体中
- 新增 `vfs_dao.go` 文件用于管理底层数据访问对象
- 新增 `vfs_path.go` 文件专门处理路径解析逻辑
- 移除了原 `vfs.go` 中的数据库初始化、用户及节点操作等冗余代码
This commit is contained in:
zzy
2025-09-29 00:42:45 +08:00
parent 429a863b76
commit 35e79e54f1
13 changed files with 1106 additions and 1005 deletions

View File

@ -0,0 +1,119 @@
package vfs_service
import (
"fmt"
"net/http"
"strings"
"sync"
"git.zzyxyz.com/zzy/zzyxyz_go_api/internal/vfs/models"
)
// ServiceProxy 服务代理接口
type ServiceProxy interface {
// Get 从后端服务获取数据
Get(servicePath string, node *models.VfsNode) ([]byte, error)
// Create 在后端服务创建资源
Create(servicePath string, node *models.VfsNode, data []byte) ([]byte, error) // 返回创建的资源ID
// Update 更新后端服务资源
Update(servicePath string, node *models.VfsNode, data []byte) error
// Delete 删除后端服务资源
Delete(servicePath string, node *models.VfsNode) error
// GetName 获取代理名称
GetName() string
}
// ProxyEntry 代理表条目
type ProxyEntry struct {
Name string
MatchExt string
Proxy ServiceProxy // 对应的代理实现
}
type ProxyService struct {
Proxies []*ProxyEntry
proxyMutex sync.RWMutex
}
func NewProxyService() *ProxyService {
return &ProxyService{
Proxies: make([]*ProxyEntry, 0),
proxyMutex: sync.RWMutex{},
}
}
// FindProxyByServiceName 根据服务节点名称查找对应的代理
func (s *ProxyService) findProxyByServiceName(serviceName string) ServiceProxy {
s.proxyMutex.RLock()
defer s.proxyMutex.RUnlock()
if serviceName == "" {
return nil
}
// 根据服务名称匹配前缀
for _, entry := range s.Proxies {
if entry.MatchExt == serviceName {
return entry.Proxy
}
}
return nil
}
func (s *ProxyService) RegisterProxy(entry *ProxyEntry) {
s.proxyMutex.Lock()
defer s.proxyMutex.Unlock()
s.Proxies = append(s.Proxies, entry)
}
func (s *ProxyService) StrictProxy2Service(method string, data []byte, node *models.VfsNode) ([]byte, error) {
if node.Type != models.VfsNodeTypeService {
return nil, fmt.Errorf("node is not a service")
}
exts := strings.Split(node.Name, ".")
var serviceName = exts[1]
// log.Println("Proxy2Service: ", serviceName)
// 查找对应的代理
proxy := s.findProxyByServiceName(serviceName)
if proxy == nil {
return nil, fmt.Errorf("service proxy not found for: %s", serviceName)
}
// 根据HTTP方法调用相应的代理方法
switch method {
case http.MethodGet:
result, err := proxy.Get(serviceName, node)
if err != nil {
return nil, fmt.Errorf("failed to get service data: %v", err)
}
return result, nil
case http.MethodPost:
// 读取请求体数据
result, err := proxy.Create(serviceName, node, data)
if err != nil {
return nil, fmt.Errorf("failed to create service resource: %v", err)
}
return result, nil
case http.MethodPut, http.MethodPatch:
// 读取请求体数据
err := proxy.Update(serviceName, node, data)
if err != nil {
return nil, fmt.Errorf("failed to update service resource: %v", err)
}
return nil, nil
case http.MethodDelete:
err := proxy.Delete(serviceName, node)
if err != nil {
return nil, fmt.Errorf("failed to delete service resource: %v", err)
}
return nil, nil
default:
return nil, fmt.Errorf("method not allowed")
}
}