From ce9e5534eb203983e8058f79c210d2d42ef3c15e Mon Sep 17 00:00:00 2001 From: Maxim Lebedev Date: Wed, 15 May 2024 12:05:10 +0500 Subject: [PATCH] :building_construction: Simplify metadata repository usage --- internal/metadata/repository.go | 35 +++++++++++++-- .../metadata/repository/http/http_metadata.go | 7 +-- .../repository/http/http_metadata_test.go | 2 +- .../repository/memory/memory_metadata.go | 44 ------------------- 4 files changed, 33 insertions(+), 55 deletions(-) delete mode 100644 internal/metadata/repository/memory/memory_metadata.go diff --git a/internal/metadata/repository.go b/internal/metadata/repository.go index 50971d5..babdb2f 100644 --- a/internal/metadata/repository.go +++ b/internal/metadata/repository.go @@ -7,13 +7,40 @@ import ( "source.toby3d.me/toby3d/auth/internal/domain" ) -type Repository interface { - Create(ctx context.Context, u *url.URL, metadata domain.Metadata) error - Get(ctx context.Context, u *url.URL) (*domain.Metadata, error) -} +type ( + Repository interface { + Fetch(ctx context.Context, u *url.URL) (*domain.Metadata, error) + } + + dummyMetadataRepository struct{} + + stubMetadataRepository struct { + metadata *domain.Metadata + error error + } +) var ErrNotExist error = domain.NewError( domain.ErrorCodeInvalidClient, "not found 'indieauth-metadata' endpoint on provided me URL", "https://indieauth.net/source/#discovery-0", ) + +func NewDummyMetadataRepository() Repository { + return dummyMetadataRepository{} +} + +func (dummyMetadataRepository) Fetch(_ context.Context, _ *url.URL) (*domain.Metadata, error) { + return nil, nil +} + +func NewStubMetadataRepository(metadata *domain.Metadata, err error) Repository { + return &stubMetadataRepository{ + metadata: metadata, + error: err, + } +} + +func (s *stubMetadataRepository) Fetch(_ context.Context, _ *url.URL) (*domain.Metadata, error) { + return s.metadata, s.error +} diff --git a/internal/metadata/repository/http/http_metadata.go b/internal/metadata/repository/http/http_metadata.go index 90ce6df..85e1307 100644 --- a/internal/metadata/repository/http/http_metadata.go +++ b/internal/metadata/repository/http/http_metadata.go @@ -52,12 +52,7 @@ func NewHTTPMetadataRepository(client *http.Client) metadata.Repository { } } -// WARN(toby3d): not implemented. -func (httpMetadataRepository) Create(_ context.Context, _ *url.URL, _ domain.Metadata) error { - return nil -} - -func (repo *httpMetadataRepository) Get(_ context.Context, u *url.URL) (*domain.Metadata, error) { +func (repo *httpMetadataRepository) Fetch(_ context.Context, u *url.URL) (*domain.Metadata, error) { resp, err := repo.client.Get(u.String()) if err != nil { return nil, fmt.Errorf("cannot make request to provided Me: %w", err) diff --git a/internal/metadata/repository/http/http_metadata_test.go b/internal/metadata/repository/http/http_metadata_test.go index 0cf1088..dfafb6e 100644 --- a/internal/metadata/repository/http/http_metadata_test.go +++ b/internal/metadata/repository/http/http_metadata_test.go @@ -116,7 +116,7 @@ func TestGet(t *testing.T) { u, _ := url.Parse(srv.URL + "/") out, err := repository.NewHTTPMetadataRepository(srv.Client()). - Get(context.Background(), u) + Fetch(context.Background(), u) if err != nil { t.Fatal(err) } diff --git a/internal/metadata/repository/memory/memory_metadata.go b/internal/metadata/repository/memory/memory_metadata.go deleted file mode 100644 index cfa1cea..0000000 --- a/internal/metadata/repository/memory/memory_metadata.go +++ /dev/null @@ -1,44 +0,0 @@ -package memory - -import ( - "context" - "net/url" - "sync" - - "source.toby3d.me/toby3d/auth/internal/domain" - "source.toby3d.me/toby3d/auth/internal/metadata" -) - -type memoryMetadataRepository struct { - mutex *sync.RWMutex - metadata map[string]domain.Metadata -} - -const DefaultPathPrefix = "metadata" - -func NewMemoryMetadataRepository() metadata.Repository { - return &memoryMetadataRepository{ - mutex: new(sync.RWMutex), - metadata: make(map[string]domain.Metadata), - } -} - -func (repo *memoryMetadataRepository) Create(ctx context.Context, u *url.URL, metadata domain.Metadata) error { - repo.mutex.Lock() - defer repo.mutex.Unlock() - - repo.metadata[u.String()] = metadata - - return nil -} - -func (repo *memoryMetadataRepository) Get(ctx context.Context, u *url.URL) (*domain.Metadata, error) { - repo.mutex.RLock() - defer repo.mutex.RUnlock() - - if out, ok := repo.metadata[u.String()]; ok { - return &out, nil - } - - return nil, metadata.ErrNotExist -}