fetcher refact

This commit is contained in:
Zsolt Tasnadi
2026-01-20 08:39:02 +01:00
parent 6be44be9bf
commit 4f168197b8
5 changed files with 113 additions and 79 deletions

View File

@@ -14,38 +14,42 @@ type RedmineResponse struct {
}
type RedmineFetcher struct {
BaseURL string
Key string
Cache *Cache
BaseFetcher
}
func (f RedmineFetcher) Fetch() []Entry {
func (f *RedmineFetcher) Name() string {
return "Redmine"
}
func (f *RedmineFetcher) Fetch() []Entry {
req := FetcherRequest{
BaseURL: f.BaseURL,
Path: "/issues.json?limit=1&sort=updated_on:desc",
Method: http.MethodGet,
Headers: map[string]string{
"X-Redmine-API-Key": f.Key,
"X-Redmine-API-Key": f.Token,
},
}
var r RedmineResponse
if err := req.Run(&r); err != nil {
return []Entry{}
var resp RedmineResponse
if err := req.Run(&resp); err != nil {
return nil
}
if len(r.Issues) == 0 {
return []Entry{}
if len(resp.Issues) == 0 {
return nil
}
i := r.Issues[0]
if f.Cache.TryUpdate("redmine", i.UpdatedOn) {
url := fmt.Sprintf("%s/issues/%d", f.BaseURL, i.ID)
return []Entry{{
Title: fmt.Sprintf("🎫 [Redmine] - #%d %s", i.ID, i.Subject),
URL: url,
}}
issue := resp.Issues[0]
entry := f.TryCreateEntry(
"redmine",
issue.UpdatedOn,
fmt.Sprintf("🎫 [%s] - #%d %s", f.Name(), issue.ID, issue.Subject),
fmt.Sprintf("%s/issues/%d", f.BaseURL, issue.ID),
)
if entry != nil {
return []Entry{*entry}
}
return []Entry{}
return nil
}