重构项目
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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(),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user