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
 | |
| }
 |