All checks were successful
		
		
	
	ci/woodpecker/push/woodpecker Pipeline was successful
				
			Reviewed-on: #17 Co-authored-by: David Ashby <delta.mu.alpha@gmail.com> Co-committed-by: David Ashby <delta.mu.alpha@gmail.com>
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package query
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"git.yetaga.in/alazyreader/go-openlibrary/client"
 | 
						|
	"git.yetaga.in/alazyreader/library/media"
 | 
						|
)
 | 
						|
 | 
						|
type OpenLibrary struct {
 | 
						|
	client client.Client
 | 
						|
}
 | 
						|
 | 
						|
func (o *OpenLibrary) GetByISBN(isbn string) (*media.Book, error) {
 | 
						|
	details, err := o.client.GetByISBN(isbn)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return openLibraryToBook(details), nil
 | 
						|
}
 | 
						|
 | 
						|
func openLibraryToBook(details *client.BookDetails) *media.Book {
 | 
						|
	return &media.Book{
 | 
						|
		Title:      details.Title,
 | 
						|
		Authors:    getAuthors(details.Authors),
 | 
						|
		SortAuthor: strings.ToLower(getLastName(tryGetFirst(getAuthors(details.Authors)))),
 | 
						|
		Publisher:  getPublisher(details.Publishers),
 | 
						|
		ISBN10:     tryGetFirst(details.Identifiers.ISBN10),
 | 
						|
		ISBN13:     tryGetFirst(details.Identifiers.ISBN13),
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func getPublisher(publishers []client.Publishers) string {
 | 
						|
	if len(publishers) == 0 {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	return publishers[0].Name
 | 
						|
}
 | 
						|
 | 
						|
func getAuthors(authors []client.Authors) []string {
 | 
						|
	ret := make([]string, len(authors))
 | 
						|
	for _, author := range authors {
 | 
						|
		ret = append(ret, author.Name)
 | 
						|
	}
 | 
						|
	return ret
 | 
						|
}
 |