Skip to content

Commit 0a5a7e0

Browse files
committed
add packages
1 parent 3665a7a commit 0a5a7e0

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

core/models/artwork_models.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package models
2+
3+
type ArtworkResponse struct {
4+
ID string `json:"id"`
5+
Title string `json:"title"`
6+
Artist string `json:"artist"`
7+
ImageID string `json:"image_id"`
8+
ImageURL string `json:"image_url"`
9+
Museum string `json:"museum"`
10+
MuseumURL string `json:"museum_url"`
11+
Attribution string `json:"attribution"`
12+
Colors ColorSpectrum `json:"colors"`
13+
Related string `json:"related"`
14+
Copyright string `json:"copyright"`
15+
Description string `json:"description"`
16+
City string `json:"city"`
17+
}
18+
19+
type ArtworkMetadata struct {
20+
ID string `json:"id"`
21+
ImageID string `json:"image_id"`
22+
Title string `json:"title"`
23+
Artist string `json:"artist"`
24+
Date string `json:"date"`
25+
Medium string `json:"medium"`
26+
Dimensions string `json:"dimensions"`
27+
ImageURL string `json:"imageUrl"`
28+
IIIFURL string `json:"iiif_url"`
29+
Gallery string `json:"gallery"`
30+
Museum string `json:"museum"`
31+
MuseumURL string `json:"museumUrl"`
32+
Description string `json:"description,omitempty"`
33+
Related string `json:"related"`
34+
Colors ColorSpectrum `json:"colors"`
35+
Attribution string `json:"attribution"`
36+
Copyright string `json:"copyright"`
37+
}
38+
39+
type ColorSpectrum struct {
40+
Profile string `json:"profile"`
41+
Palette string `json:"palette"`
42+
}

core/registry/artwork_registry.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package registry
2+
3+
import (
4+
"api/core/models"
5+
"context"
6+
"fmt"
7+
)
8+
9+
type ArtworkProvider interface {
10+
FetchRawArtwork(ctx context.Context) (any, error)
11+
NormalizeMetadata(metadata any) ([]models.ArtworkMetadata, error)
12+
BuildResponse(metadata models.ArtworkMetadata) (models.ArtworkResponse, error)
13+
Name() string
14+
}
15+
16+
type ArtworkRegistry struct {
17+
providers map[string]ArtworkProvider
18+
}
19+
20+
func NewArtworkRegistry(providers ...ArtworkProvider) *ArtworkRegistry {
21+
reg := &ArtworkRegistry{providers: make(map[string]ArtworkProvider)}
22+
for _, provider := range providers {
23+
reg.providers[provider.Name()] = provider
24+
}
25+
return reg
26+
}
27+
28+
func (r *ArtworkRegistry) GetProvider(name string) (ArtworkProvider, error) {
29+
p, ok := r.providers[name]
30+
if !ok {
31+
return nil, fmt.Errorf("IIIF provider not found for: %s", name)
32+
}
33+
return p, nil
34+
}

0 commit comments

Comments
 (0)