Fix tags API pagination

This commit is contained in:
Dominik Schröter 2024-10-16 14:47:50 +02:00
parent 31f0e81465
commit 0dd1d0b5ad
2 changed files with 36 additions and 28 deletions

11
main.go
View file

@ -165,14 +165,18 @@ func createLLM() (llms.Model, error) {
} }
func getAllTags(ctx context.Context, baseURL, apiToken string) (map[string]int, error) { func getAllTags(ctx context.Context, baseURL, apiToken string) (map[string]int, error) {
tagIDMapping := make(map[string]int)
url := fmt.Sprintf("%s/api/tags/", baseURL) url := fmt.Sprintf("%s/api/tags/", baseURL)
client := &http.Client{}
for url != "" {
req, err := http.NewRequestWithContext(ctx, "GET", url, nil) req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
req.Header.Set("Authorization", fmt.Sprintf("Token %s", apiToken)) req.Header.Set("Authorization", fmt.Sprintf("Token %s", apiToken))
client := &http.Client{}
resp, err := client.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {
return nil, err return nil, err
@ -189,6 +193,7 @@ func getAllTags(ctx context.Context, baseURL, apiToken string) (map[string]int,
ID int `json:"id"` ID int `json:"id"`
Name string `json:"name"` Name string `json:"name"`
} `json:"results"` } `json:"results"`
Next string `json:"next"`
} }
err = json.NewDecoder(resp.Body).Decode(&tagsResponse) err = json.NewDecoder(resp.Body).Decode(&tagsResponse)
@ -196,11 +201,13 @@ func getAllTags(ctx context.Context, baseURL, apiToken string) (map[string]int,
return nil, err return nil, err
} }
tagIDMapping := make(map[string]int)
for _, tag := range tagsResponse.Results { for _, tag := range tagsResponse.Results {
tagIDMapping[tag.Name] = tag.ID tagIDMapping[tag.Name] = tag.ID
} }
url = tagsResponse.Next
}
return tagIDMapping, nil return tagIDMapping, nil
} }

View file

@ -17,6 +17,7 @@ const SuggestionCard: React.FC<SuggestionCardProps> = ({
onTagAddition, onTagAddition,
onTagDeletion, onTagDeletion,
}) => { }) => {
const sortedAvailableTags = availableTags.sort((a, b) => a.name.localeCompare(b.name));
const document = suggestion.original_document; const document = suggestion.original_document;
return ( return (
<div className="bg-white dark:bg-gray-800 shadow-lg shadow-blue-500/50 rounded-md p-4 relative flex flex-col justify-between h-full"> <div className="bg-white dark:bg-gray-800 shadow-lg shadow-blue-500/50 rounded-md p-4 relative flex flex-col justify-between h-full">
@ -64,7 +65,7 @@ const SuggestionCard: React.FC<SuggestionCardProps> = ({
value: index.toString(), value: index.toString(),
})) || [] })) || []
} }
suggestions={availableTags.map((tag) => ({ suggestions={sortedAvailableTags.map((tag) => ({
id: tag.id, id: tag.id,
name: tag.name, name: tag.name,
label: tag.name, label: tag.name,