feat(api): add model delete, pagination, and cors config

This commit is contained in:
zenfun
2025-12-21 23:03:12 +08:00
parent 816ea93339
commit 73147fc55a
12 changed files with 304 additions and 6 deletions

View File

@@ -176,6 +176,25 @@ func (s *SyncService) SyncModel(m *model.Model) error {
return nil
}
// SyncModelDelete removes model metadata from Redis and refreshes meta:models_meta.
func (s *SyncService) SyncModelDelete(m *model.Model) error {
if m == nil {
return fmt.Errorf("model required")
}
name := strings.TrimSpace(m.Name)
if name == "" {
return fmt.Errorf("model name required")
}
ctx := context.Background()
if err := s.rdb.HDel(ctx, "meta:models", name).Err(); err != nil {
return fmt.Errorf("delete meta:models: %w", err)
}
if err := s.refreshModelsMetaFromRedis(ctx, "db"); err != nil {
return err
}
return nil
}
type providerSnapshot struct {
ID uint `json:"id"`
Name string `json:"name"`

View File

@@ -93,6 +93,26 @@ func TestSyncKey_WritesTokenID(t *testing.T) {
}
}
func TestSyncModelDelete_RemovesMeta(t *testing.T) {
mr := miniredis.RunT(t)
rdb := redis.NewClient(&redis.Options{Addr: mr.Addr()})
svc := NewSyncService(rdb)
mr.HSet("meta:models", "ns.m", `{"name":"ns.m"}`)
m := &model.Model{Name: "ns.m"}
if err := svc.SyncModelDelete(m); err != nil {
t.Fatalf("SyncModelDelete: %v", err)
}
if got := mr.HGet("meta:models", "ns.m"); got != "" {
t.Fatalf("expected meta:models entry removed, got %q", got)
}
if v := mr.HGet("meta:models_meta", "version"); v == "" {
t.Fatalf("expected meta:models_meta.version to be set")
}
}
func TestSyncProviderDelete_RemovesSnapshotAndRouting(t *testing.T) {
mr := miniredis.RunT(t)
rdb := redis.NewClient(&redis.Options{Addr: mr.Addr()})