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 }