/
search.go
53 lines (41 loc) 路 1.25 KB
/
search.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package api
import (
"context"
"fmt"
"strings"
"github.com/arrow2nd/anct/gen"
)
// SearchWorks : 銈偍銉亱銈変綔鍝併倰妞滅储
func (a *API) SearchWorks(q string, seasons []string, limit int64) ([]*gen.WorkFragment, error) {
ctx := context.Background()
list, err := a.client.SearchWorksByKeyword(ctx, q, seasons, limit)
if err != nil {
return nil, handleClientError(err)
}
if len(list.SearchWorks.Nodes) == 0 {
return nil, fmt.Errorf("no matching works found (query: %s)", q)
}
return list.SearchWorks.Nodes, nil
}
// SearchWorksFromLibrary : 銉┿偆銉栥儵銉唴銇綔鍝併倰妞滅储
func (a *API) SearchWorksFromLibrary(q string, states []gen.StatusState, seasons []string, limit int64) ([]*gen.WorkFragment, error) {
ctx := context.Background()
list, err := a.client.FetchUserLibrary(ctx, states, seasons, limit)
if err != nil {
return nil, handleClientError(err)
}
// 銈偍銉仹绲炪倞杈笺個
works := []*gen.WorkFragment{}
for _, node := range list.Viewer.LibraryEntries.Nodes {
if node == nil {
continue
}
if q == "" || strings.Contains(node.Work.Title, q) {
works = append(works, node.Work)
}
}
if len(works) == 0 {
return nil, fmt.Errorf("no matches found in the library (states: %v)", states)
}
return works, nil
}