This commit is contained in:
2026-08-16 09:02:39 +08:00
parent c554152f4f
commit f7f6db8695
105 changed files with 2535 additions and 948 deletions
+21 -4
View File
@@ -2,7 +2,6 @@ package biz
import (
"context"
"strings"
"time"
)
@@ -39,6 +38,17 @@ type APIUsecase struct{ APIRepo }
func NewAPIUsecase(repo APIRepo) *APIUsecase { return &APIUsecase{APIRepo: repo} }
// DeleteAPI preserves the single-delete contract used by the legacy admin:
// the target is looked up first, so deleting a missing API returns the
// repository's not-found error instead of silently succeeding on an empty
// UPDATE/DELETE. Bulk deletion intentionally keeps separate semantics.
func (uc *APIUsecase) DeleteAPI(ctx context.Context, id uint) error {
if _, err := uc.FindAPI(ctx, id); err != nil {
return err
}
return uc.DeleteAPIs(ctx, []uint{id})
}
type APISyncDiff struct {
Added []*API
Deleted []*API
@@ -54,7 +64,7 @@ func (uc *APIUsecase) SyncAPIs(ctx context.Context, routes []*API) (*APISyncDiff
if err != nil {
return nil, err
}
key := func(value *API) string { return strings.ToUpper(value.Method) + " " + value.Path }
key := func(value *API) string { return value.Method + " " + value.Path }
ignoreSet := make(map[string]bool, len(ignored))
for _, item := range ignored {
ignoreSet[key(item)] = true
@@ -70,12 +80,19 @@ func (uc *APIUsecase) SyncAPIs(ctx context.Context, routes []*API) (*APISyncDiff
storedSet[key(item)] = item
}
diff := &APISyncDiff{Ignored: ignored}
for routeKey, item := range routeSet {
added := make(map[string]bool)
for _, item := range routes {
routeKey := key(item)
if ignoreSet[routeKey] || added[routeKey] {
continue
}
if storedSet[routeKey] == nil {
diff.Added = append(diff.Added, item)
added[routeKey] = true
}
}
for storedKey, item := range storedSet {
for _, item := range stored {
storedKey := key(item)
if routeSet[storedKey] == nil && !ignoreSet[storedKey] {
diff.Deleted = append(diff.Deleted, item)
}