diff --git a/.discogs.go.swp b/.discogs.go.swp new file mode 100644 index 0000000..175473d Binary files /dev/null and b/.discogs.go.swp differ diff --git a/.models.go.swp b/.models.go.swp new file mode 100644 index 0000000..61ae027 Binary files /dev/null and b/.models.go.swp differ diff --git a/discogs.go b/discogs.go index 8c39d8c..f08aa57 100644 --- a/discogs.go +++ b/discogs.go @@ -62,7 +62,7 @@ func NewClient(o *Options) (*Client, error) { return &Client{ Release: newReleaseService(o.URL+"/releases/", cur), Artist: newArtistService(o.URL + "/artists/"), - Label: newLabelService(base.New()), + Label: newLabelService(o.URL + "/labels/"), Master: newMasterService(o.URL + "/masters/"), Search: newSearchService(base.New()), }, nil diff --git a/labels.go b/labels.go index e5e484c..94a9e6e 100644 --- a/labels.go +++ b/labels.go @@ -1,58 +1,56 @@ package discogs import ( - "net/http" - - "github.com/irlndts/go-apirequest" + "strconv" ) +// LabelService ... type LabelService struct { - api *apirequest.API + url string } -type LabelParams struct { - Label_id string - Page int - Per_Page int +func newLabelService(url string) *LabelService { + return &LabelService{ + url: url, + } } +// Label resource represents a label, company, recording studio, location, +// or other entity involved with artists and releases. type Label struct { - Profile string `json:"profile"` - Releases_url string `json:"releases_url"` - Name string `json:"name"` - Contact_info string `json:"contact_info"` - Uri string `json:"uri"` - Sublabels []Sublable `json:"sublabels"` - Urls []string `json:"urls"` - Images []Image `json:"images"` - Resource_url string `json:"resource_url"` - Id int `json:"id"` - Data_quality string `json:"data_quality"` + Profile string `json:"profile"` + ReleasesURL string `json:"releases_url"` + Name string `json:"name"` + ContactInfo string `json:"contact_info"` + URI string `json:"uri"` + Sublabels []Sublable `json:"sublabels"` + URLs []string `json:"urls"` + Images []Image `json:"images"` + ResourceURL string `json:"resource_url"` + ID int `json:"id"` + DataQuality string `json:"data_quality"` } +// Label returns a label. +func (s *LabelService) Label(labelID int) (*Label, error) { + var label *Label + if err := request(s.url+strconv.Itoa(labelID), nil, &label); err != nil { + return nil, err + } + return label, nil +} + +// LabelReleases is a list of Releases associated with the label. type LabelReleases struct { Pagination Page `json:"pagination"` Releases []ReleaseSource `json:"releases"` } -func newLabelService(api *apirequest.API) *LabelService { - return &LabelService{ - api: api.Path("labels/"), +// Releases returns a list of Releases associated with the label. +func (s *LabelService) Releases(labelID int, pagination *Pagination) (*LabelReleases, error) { + var releases *LabelReleases + if err := request(s.url+strconv.Itoa(labelID)+"/releases", pagination.toParams(), &releases); err != nil { + return nil, err } -} - -func (self *LabelService) Label(params *LabelParams) (*Label, *http.Response, error) { - label := new(Label) - apiError := new(APIError) - - resp, err := self.api.New().Get(params.Label_id).Receive(label, apiError) - return label, resp, relevantError(err, *apiError) -} - -func (self *LabelService) Releases(params *LabelParams) (*LabelReleases, *http.Response, error) { - releases := new(LabelReleases) - apiError := new(APIError) - - resp, err := self.api.New().Get(params.Label_id+"/releases").QueryStruct(params).Receive(releases, apiError) - return releases, resp, relevantError(err, *apiError) + return releases, nil } diff --git a/models.go b/models.go index a2c50c4..c8f40b1 100644 --- a/models.go +++ b/models.go @@ -5,33 +5,37 @@ import ( "strconv" ) +// Video ... type Video struct { Description string `json:"description"` Duration int `json:"duration"` Embed bool `json:"embed"` Title string `json:"title"` - Uri string `json:"uri"` + URI string `json:"uri"` } +// ArtistSource ... type ArtistSource struct { - Anv string `json:"anv"` - Id int `json:"id"` - Join string `json:"join"` - Name string `json:"name:` - Resource_url string `json:"resource_url"` - Role string `json:"role"` - Tracks string `json:"tracks"` + Anv string `json:"anv"` + ID int `json:"id"` + Join string `json:"join"` + Name string `json:"name:` + ResourceURL string `json:"resource_url"` + Role string `json:"role"` + Tracks string `json:"tracks"` } +// Image ... type Image struct { - Height int `json:"height"` - Width int `json:"width"` - Resource_url string `json:"resource_url"` - Type string `json:"type"` - Uri string `json:"uri"` - Uri150 string `json:"uri150"` + Height int `json:"height"` + Width int `json:"width"` + ResourceURL string `json:"resource_url"` + Type string `json:"type"` + URI string `json:"uri"` + URI150 string `json:"uri150"` } +// Track ... type Track struct { Duration string `json:"duration"` Position string `json:"position"` @@ -40,37 +44,42 @@ type Track struct { Extraartists []ArtistSource `json:"extraartists"` } +// LabelSource ... type LabelSource struct { - Catno string `json:"catno"` - Entity_type string `json:"entity_type"` - Id int `json:"id"` - Name string `json:"name"` - Resource_url string `json:"resource_url"` + Catno string `json:"catno"` + EntityType string `json:"entity_type"` + ID int `json:"id"` + Name string `json:"name"` + ResourceURL string `json:"resource_url"` } +// Itentifier ... type Identifier struct { Type string `json:"type"` Value string `json:"value"` } +// Format ... type Format struct { Descriptions []string `json:"descriptions"` Name string `json:"name"` Qty string `json:"qty"` } +// Company ... type Company struct { - Catno string `json:"catno"` - Entity_type string `json:"entity_type"` - Entity_type_name string `json:"entity_type_name"` - Id int `json:"id"` - Name string `json:"name"` - Resource_url string `json:"resource_url"` + Catno string `json:"catno"` + EntityType string `json:"entity_type"` + EntityTypeName string `json:"entity_type_name"` + ID int `json:"id"` + Name string `json:"name"` + ResourceURL string `json:"resource_url"` } +// Community ... type Community struct { Contributors []Contributor `json:"contributors"` - Data_quality string `json:"string"` + DataQuality string `json:"string"` Have int `json:"have"` Rating Rating `json:"rating"` Status string `json:"status"` @@ -78,73 +87,82 @@ type Community struct { Want int `json:"want"` } +// Submitter ... type Submitter struct { - Resource_url string `json:"resource_url"` - Username string `json:"username"` + ResourceURL string `json:"resource_url"` + Username string `json:"username"` } +// Rating ... type Rating struct { Average float32 `json:"average"` Count int `json:"count"` } +// Contributor ... type Contributor struct { - Resource_url string `json:"resource_url"` - Username string `json:"username"` + ResourceURL string `json:"resource_url"` + Username string `json:"username"` } +// Page ... type Page struct { - Per_page int `json:"per_page"` - Items int `json:"items"` - Page int `json:"page"` - Urls URLS `json:"urls"` - Pages int `json:"pages"` + PerPage int `json:"per_page"` + Items int `json:"items"` + Page int `json:"page"` + URLs URLsList `json:"urls"` + Pages int `json:"pages"` } -type URLS struct { +// URLsList ... +type URLsList struct { Last string `json:"last"` Next string `json:"next"` } +// Version ... type Version struct { - Catno string `json:"catno"` - Country string `json:"country"` - Format string `json:"format"` - Id int `json:"id"` - Label string `json:"label"` - Released string `json:"released"` - Resource_url string `json:"resource_url"` - Status string `json:"status"` - Thumb string `json:"thumb"` - Title string `json:"title"` + Catno string `json:"catno"` + Country string `json:"country"` + Format string `json:"format"` + ID int `json:"id"` + Label string `json:"label"` + Released string `json:"released"` + ResourceURL string `json:"resource_url"` + Status string `json:"status"` + Thumb string `json:"thumb"` + Title string `json:"title"` } +// Member ... type Member struct { - Active bool `json:"active"` - Id int `json:"id"` - Name string `json:"name"` - Resource_url string `json:"resource_url"` + Active bool `json:"active"` + ID int `json:"id"` + Name string `json:"name"` + ResourceURL string `json:"resource_url"` } +// Sublable ... type Sublable struct { - Resource_url string `json:"url"` - Id int `json:"id"` - Name string `json:"name"` + ResourceURL string `json:"url"` + ID int `json:"id"` + Name string `json:"name"` } +// ReleaseSource ... type ReleaseSource struct { - Artist string `json:"artist"` - Catno string `json:"catno"` - Format string `json:"format"` - Id int `json:"id"` - Resource_url string `json:"resource_url"` - Status string `json:"status"` - Thumb string `json:"thumb"` - Title string `json:"title"` - Year int `json:"year"` - Main_release int `json:"main_release"` - Role string `json:"role"` - Type string `json:"type"` + Artist string `json:"artist"` + Catno string `json:"catno"` + Format string `json:"format"` + ID int `json:"id"` + ResourceURL string `json:"resource_url"` + Status string `json:"status"` + Thumb string `json:"thumb"` + Title string `json:"title"` + Year int `json:"year"` + MainRelease int `json:"main_release"` + Role string `json:"role"` + Type string `json:"type"` } // Pagination ...