refactor: modular local provider interfaces
Move package-type-specific local repo logic into provider packages via optional interfaces, eliminating switch statements from handlers. - provider.LocalUploader: ValidateUpload + UploadResponse - provider.LocalIndexer: ServeLocalIndex + GenerateLocalIndex - provider.FileStore: interface for querying local files (implemented by database.DB) PyPI and Terraform providers now implement both interfaces. The local handler and v1 proxy use type assertions to dispatch — adding a new local repo type only requires implementing the interfaces in its provider package, no handler changes needed. local.go: 468 → 163 lines (removed all PyPI/Terraform specifics) proxy.go: 211 → 136 lines (removed switch + helper methods) engine.go: removed LocalIndexGenerator, uses provider.LocalIndexer
This commit is contained in:
@@ -8,6 +8,8 @@ import (
|
||||
|
||||
"github.com/jackc/pgx/v5"
|
||||
"github.com/jackc/pgx/v5/pgconn"
|
||||
|
||||
"git.unkin.net/unkin/artifactapi/internal/provider"
|
||||
)
|
||||
|
||||
type LocalFile struct {
|
||||
@@ -122,6 +124,22 @@ func (db *DB) ListLocalFilePackages(ctx context.Context, repoName string) ([]str
|
||||
return packages, rows.Err()
|
||||
}
|
||||
|
||||
func (db *DB) ListFilesByPrefix(ctx context.Context, repoName, prefix string) ([]provider.FileEntry, error) {
|
||||
files, err := db.ListLocalFilesByPrefix(ctx, repoName, prefix)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := make([]provider.FileEntry, len(files))
|
||||
for i, f := range files {
|
||||
result[i] = provider.FileEntry{FilePath: f.FilePath, ContentHash: f.ContentHash}
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (db *DB) ListPackages(ctx context.Context, repoName string) ([]string, error) {
|
||||
return db.ListLocalFilePackages(ctx, repoName)
|
||||
}
|
||||
|
||||
func (db *DB) DeleteLocalFile(ctx context.Context, repoName, filePath string) error {
|
||||
_, err := db.Pool.Exec(ctx, `DELETE FROM local_files WHERE repo_name = $1 AND file_path = $2`, repoName, filePath)
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user