重构项目

This commit is contained in:
dragon
2025-11-13 17:32:49 +08:00
parent c7c6180272
commit 54bbef0205
24 changed files with 559 additions and 305 deletions

View File

@@ -23,7 +23,7 @@ func NewDomainAlias(config kv.KV) *DomainAlias {
}
func (a *DomainAlias) Query(ctx context.Context, domain string) (*Alias, error) {
get, err := a.config.Get(ctx, "domain/alias/"+domain)
get, err := a.config.Get(ctx, domain)
if err != nil {
return nil, err
}
@@ -36,7 +36,7 @@ func (a *DomainAlias) Query(ctx context.Context, domain string) (*Alias, error)
func (a *DomainAlias) Bind(ctx context.Context, domains []string, owner, repo, branch string) error {
oldDomains := make([]string, 0)
rKey := fmt.Sprintf("domain/r-alias/%s/%s/%s", owner, repo, branch)
rKey := fmt.Sprintf("%s/%s/%s", owner, repo, branch)
if oldStr, err := a.config.Get(ctx, rKey); err == nil {
_ = json.Unmarshal([]byte(oldStr), &oldDomains)
}
@@ -57,7 +57,7 @@ func (a *DomainAlias) Bind(ctx context.Context, domains []string, owner, repo, b
domainsRaw, _ := json.Marshal(domains)
_ = a.config.Put(ctx, rKey, string(domainsRaw), kv.TTLKeep)
for _, domain := range domains {
if err := a.config.Put(ctx, "domain/alias/"+domain, string(aliasMetaRaw), kv.TTLKeep); err != nil {
if err := a.config.Put(ctx, domain, string(aliasMetaRaw), kv.TTLKeep); err != nil {
return err
}
}
@@ -65,6 +65,6 @@ func (a *DomainAlias) Bind(ctx context.Context, domains []string, owner, repo, b
}
func (a *DomainAlias) Unbind(ctx context.Context, domain string) error {
_, err := a.config.Delete(ctx, "domain/alias/"+domain)
_, err := a.config.Delete(ctx, domain)
return err
}

View File

@@ -37,6 +37,7 @@ func (p *PageConfigRoute) UnmarshalYAML(value *yaml.Node) error {
p.Type = keys[0]
params := data[p.Type]
// 跳过空参数
p.Params = make(map[string]any)
if _, ok := params.(string); ok || params == nil {
return nil
}

View File

@@ -7,34 +7,40 @@ import (
"github.com/pkg/errors"
"go.uber.org/zap"
"gopkg.d7z.net/middleware/kv"
"gopkg.d7z.net/middleware/tools"
)
type PageDomain struct {
*ServerMeta
alias *DomainAlias
pageDB kv.KV
baseDomain string
defaultBranch string
}
func NewPageDomain(meta *ServerMeta, alias *DomainAlias, baseDomain, defaultBranch string) *PageDomain {
func NewPageDomain(meta *ServerMeta, alias *DomainAlias, pageDB kv.KV, baseDomain, defaultBranch string) *PageDomain {
return &PageDomain{
baseDomain: baseDomain,
defaultBranch: defaultBranch,
ServerMeta: meta,
alias: alias,
pageDB: pageDB,
}
}
type PageDomainContent struct {
type PageContent struct {
*PageMetaContent
*PageVFS
Owner string
Repo string
Path string
OrgDB kv.KV
RepoDB kv.KV
Owner string
Repo string
Path string
}
func (p *PageDomain) ParseDomainMeta(ctx context.Context, domain, path, branch string) (*PageDomainContent, error) {
func (p *PageDomain) ParseDomainMeta(ctx context.Context, domain, path, branch string) (*PageContent, error) {
if branch == "" {
branch = p.defaultBranch
}
@@ -50,7 +56,7 @@ func (p *PageDomain) ParseDomainMeta(ctx context.Context, domain, path, branch s
}
owner := strings.TrimSuffix(domain, "."+p.baseDomain)
repo := pathArr[0]
var returnMeta *PageDomainContent
var returnMeta *PageContent
var err error
if repo == "" {
// 回退到默认仓库 (路径未包含仓库)
@@ -68,8 +74,8 @@ func (p *PageDomain) ParseDomainMeta(ctx context.Context, domain, path, branch s
return p.returnMeta(ctx, owner, domain, branch, pathArr)
}
func (p *PageDomain) returnMeta(ctx context.Context, owner, repo, branch string, path []string) (*PageDomainContent, error) {
result := &PageDomainContent{}
func (p *PageDomain) returnMeta(ctx context.Context, owner, repo, branch string, path []string) (*PageContent, error) {
result := &PageContent{}
meta, err := p.GetMeta(ctx, owner, repo, branch)
if err != nil {
zap.L().Debug("查询错误", zap.Error(err))
@@ -83,6 +89,8 @@ func (p *PageDomain) returnMeta(ctx context.Context, owner, repo, branch string,
result.Owner = owner
result.Repo = repo
result.PageVFS = NewPageVFS(p.client, p.Backend, owner, repo, result.CommitID)
result.OrgDB = tools.NewPrefixKV(p.pageDB, p.pageDB.WithKey("org", owner))
result.RepoDB = tools.NewPrefixKV(p.pageDB, p.pageDB.WithKey("repo", owner, repo))
result.Path = strings.Join(path, "/")
if err = p.alias.Bind(ctx, meta.Alias, result.Owner, result.Repo, branch); err != nil {

View File

@@ -33,7 +33,7 @@ type Filter struct {
}
func NextCallWrapper(call FilterCall, parentCall NextCall, stack Filter) NextCall {
return func(ctx context.Context, writer http.ResponseWriter, request *http.Request, metadata *PageDomainContent) error {
return func(ctx context.Context, writer http.ResponseWriter, request *http.Request, metadata *PageContent) error {
zap.L().Debug(fmt.Sprintf("call filter(%s) before", stack.Type), zap.Any("filter", stack))
err := call(ctx, writer, request, metadata, parentCall)
zap.L().Debug(fmt.Sprintf("call filter(%s) after", stack.Type), zap.Any("filter", stack), zap.Error(err))
@@ -45,10 +45,10 @@ type NextCall func(
ctx context.Context,
writer http.ResponseWriter,
request *http.Request,
metadata *PageDomainContent,
metadata *PageContent,
) error
var NotFountNextCall = func(ctx context.Context, writer http.ResponseWriter, request *http.Request, metadata *PageDomainContent) error {
var NotFountNextCall = func(ctx context.Context, writer http.ResponseWriter, request *http.Request, metadata *PageContent) error {
return os.ErrNotExist
}
@@ -56,7 +56,7 @@ type FilterCall func(
ctx context.Context,
writer http.ResponseWriter,
request *http.Request,
metadata *PageDomainContent,
metadata *PageContent,
next NextCall,
) error

View File

@@ -71,12 +71,12 @@ func (m *PageMetaContent) String() string {
return string(marshal)
}
func NewServerMeta(client *http.Client, backend Backend, kv kv.KV, domain string, ttl time.Duration) *ServerMeta {
func NewServerMeta(client *http.Client, backend Backend, domain string, cache kv.KV, ttl time.Duration) *ServerMeta {
return &ServerMeta{
Backend: backend,
Domain: domain,
client: client,
cache: tools.NewCache[PageMetaContent](kv, "pages/meta", ttl),
cache: tools.NewCache[PageMetaContent](cache, "meta", ttl),
locker: utils.NewLocker(),
}
}