DSCGS-11 Improve SearchService

This commit is contained in:
irlndts 2018-03-13 00:12:06 +03:00
parent b8ec73e2a0
commit 1091d9be02
6 changed files with 23 additions and 23 deletions

Binary file not shown.

BIN
.search.go.swp Normal file

Binary file not shown.

View File

@ -64,7 +64,7 @@ func NewClient(o *Options) (*Client, error) {
Artist: newArtistService(o.URL + "/artists/"), Artist: newArtistService(o.URL + "/artists/"),
Label: newLabelService(o.URL + "/labels/"), Label: newLabelService(o.URL + "/labels/"),
Master: newMasterService(o.URL + "/masters/"), Master: newMasterService(o.URL + "/masters/"),
Search: newSearchService(base.New()), Search: newSearchService(o.URL + "/database/search"),
}, nil }, nil
} }
@ -100,6 +100,7 @@ func request(path string, params url.Values, resp interface{}) error {
if err != nil { if err != nil {
return err return err
} }
fmt.Println(string(body))
return json.Unmarshal(body, &resp) return json.Unmarshal(body, &resp)
} }

View File

@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"net/url"
"github.com/irlndts/go-discogs" "github.com/irlndts/go-discogs"
) )
@ -17,7 +18,9 @@ func main() {
return return
} }
release, err := d.Master.Versions(1147170, nil) params := url.Values{}
params.Set("q", "Ska-Jazz Review")
release, err := d.Search.Search(params)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
return return

View File

@ -1,17 +1,19 @@
package discogs package discogs
import ( import "net/url"
"net/http"
"github.com/irlndts/go-apirequest"
)
// SearchService ... // SearchService ...
type SearchService struct { type SearchService struct {
api *apirequest.API url string
} }
// SerachRequest describes search request json func newSearchService(url string) *SearchService {
return &SearchService{
url: url,
}
}
// SerachRequest describes search request
type SearchRequest struct { type SearchRequest struct {
Q string // search query (optional) Q string // search query (optional)
Type string // one of release, master, artist, label (optional) Type string // one of release, master, artist, label (optional)
@ -32,8 +34,8 @@ type SearchRequest struct {
Submitter string // search submitter username (optional) Submitter string // search submitter username (optional)
Contributer string // search contributor usernames (optional) Contributer string // search contributor usernames (optional)
Page int // optional Page int // optional
Per_page int // optional PerPage int // optional
} }
// Search describes search response // Search describes search response
@ -60,20 +62,14 @@ type Result struct {
ID int `json:"id,omitempty"` ID int `json:"id,omitempty"`
} }
func newSearchService(api *apirequest.API) *SearchService {
return &SearchService{
api: api.Path("database/search"),
}
}
// Search makes search request to discogs. // Search makes search request to discogs.
// Issue a search query to our database. This endpoint accepts pagination parameters. // Issue a search query to our database. This endpoint accepts pagination parameters.
// Authentication (as any user) is required. // Authentication (as any user) is required.
// https://www.discogs.com/developers/#page:database,header:database-search // https://www.discogs.com/developers/#page:database,header:database-search
func (self *SearchService) Search(params *SearchRequest) (*Search, *http.Response, error) { func (s *SearchService) Search(params url.Values) (*Search, error) {
search := new(Search) var search *Search
apiError := new(APIError) if err := request(s.url, params, &search); err != nil {
return nil, err
resp, err := self.api.New().QueryStruct(params).Receive(search, apiError) }
return search, resp, relevantError(err, *apiError) return search, nil
} }